diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ec9d39041bf87350c1b018615f96203475ae01a9..18cb4da07c0d780d0a335bfde0cc177876329efb 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -23,8 +23,9 @@
 #######################################################################
 set(test_cases
     test_connection
-    test_transaction
     test_list_properties
+    test_properties
+    test_transaction
     test_ccaosdb
     )
 
diff --git a/test/caosdb_test_utility.h b/test/caosdb_test_utility.h
index 4cde3dc5059acf60a04b071154b44a59b67e9833..4c97c203a8ab55c9d239d824cd274fe3b99aa60b 100644
--- a/test/caosdb_test_utility.h
+++ b/test/caosdb_test_utility.h
@@ -33,16 +33,16 @@
  */
 #define EXPECT_THROW_MESSAGE(statement, exeption_type, message)                \
   EXPECT_THROW(                                                                \
-      try { statement; } catch (const exeption_type &e) {                      \
-        EXPECT_EQ(std::string(e.what()), message);                             \
-        throw;                                                                 \
-      },                                                                       \
-      exeption_type)
+    try { statement; } catch (const exeption_type &e) {                        \
+      EXPECT_EQ(std::string(e.what()), message);                               \
+      throw;                                                                   \
+    },                                                                         \
+    exeption_type)
 #define ASSERT_THROW_MESSAGE(statement, exeption_type, message)                \
   ASSERT_THROW(                                                                \
-      try { statement; } catch (const exeption_type &e) {                      \
-        ASSERT_EQ(std::string(e.what()), message);                             \
-        throw;                                                                 \
-      },                                                                       \
-      exeption_type)
+    try { statement; } catch (const exeption_type &e) {                        \
+      ASSERT_EQ(std::string(e.what()), message);                               \
+      throw;                                                                   \
+    },                                                                         \
+    exeption_type)
 #endif
diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index ecc3eb59b63950f76d5cd342ba0fac8aa17c2639..64ef436100824845e52b2a39511e6ed1a86a365c 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -18,19 +18,19 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
  */
-#include "caosdb/file_transmission/file_reader.h" // for FileReader
 #include "caosdb/file_transmission/file_writer.h" // for FileWriter
-#include "caosdb/message_code.h"                  // for MessageCode
-#include "caosdb/status_code.h"                   // for StatusCode
-#include "ccaosdb.h"                 // for caosdb_info_version_info, caosdb_...
-#include <boost/filesystem/path.hpp> // for path
-#include <boost/filesystem/path_traits.hpp> // for filesystem
-#include <cstring>                          // for strcmp
-#include <gtest/gtest-message.h>            // for Message
-#include <gtest/gtest-test-part.h>          // for TestPartResult
-#include <gtest/gtest_pred_impl.h> // for Test, EXPECT_EQ, SuiteApiResolver
-#include <iostream>
-#include <memory> // for allocator, unique_ptr
+#include "caosdb/message_code.h"                  // for ENTITY_DOES_NOT_EXIST
+#include "caosdb/status_code.h"                   // for GO_ON, StatusCode
+#include "ccaosdb.h"                              // for caosdb_connection_...
+#include <boost/filesystem/operations.hpp>        // for remove
+#include <boost/filesystem/path.hpp>              // for path
+#include <boost/filesystem/path_traits.hpp>       // for filesystem
+#include <cstring>                                // for strcmp
+#include <gtest/gtest-message.h>                  // for Message
+#include <gtest/gtest-test-part.h>                // for TestPartResult
+#include <gtest/gtest_pred_impl.h>                // for EXPECT_EQ, TestInfo
+#include <iostream>                               // for operator<<, endl
+#include <string>                                 // for allocator, string
 
 namespace fs = boost::filesystem;
 class test_ccaosdb : public ::testing::Test {
@@ -109,7 +109,7 @@ TEST_F(test_ccaosdb, connection_ssl_authentication_success) {
   auto major = caosdb_constants_COMPATIBLE_SERVER_VERSION_MAJOR();
   auto minor = caosdb_constants_COMPATIBLE_SERVER_VERSION_MINOR();
   const auto *const pre_release =
-      caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE();
+    caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE();
 
   EXPECT_EQ(major, version_info.major);
   EXPECT_EQ(minor, version_info.minor);
@@ -120,12 +120,12 @@ TEST_F(test_ccaosdb, test_count_query) {
 
   caosdb_connection_connection connection;
   int return_code(
-      caosdb_connection_connection_manager_get_default_connection(&connection));
+    caosdb_connection_connection_manager_get_default_connection(&connection));
   EXPECT_EQ(return_code, 0);
 
   caosdb_transaction_transaction transaction;
-  return_code = caosdb_connection_connection_create_transaction(&connection,
-                                                                &transaction);
+  return_code =
+    caosdb_connection_connection_create_transaction(&connection, &transaction);
   EXPECT_EQ(return_code, 0);
 
   // COUNT query with an empty result
@@ -139,7 +139,7 @@ TEST_F(test_ccaosdb, test_count_query) {
   long dummy(-1);       // NOLINT
   long *count = &dummy; // NOLINT
   return_code =
-      caosdb_transaction_transaction_get_count_result(&transaction, count);
+    caosdb_transaction_transaction_get_count_result(&transaction, count);
   EXPECT_EQ(return_code, 0);
   EXPECT_EQ(*count, 0);
 
@@ -150,12 +150,12 @@ TEST_F(test_ccaosdb, test_count_query) {
 TEST_F(test_ccaosdb, test_query) {
   caosdb_connection_connection connection;
   int return_code(
-      caosdb_connection_connection_manager_get_default_connection(&connection));
+    caosdb_connection_connection_manager_get_default_connection(&connection));
   EXPECT_EQ(return_code, 0);
 
   caosdb_transaction_transaction transaction;
-  return_code = caosdb_connection_connection_create_transaction(&connection,
-                                                                &transaction);
+  return_code =
+    caosdb_connection_connection_create_transaction(&connection, &transaction);
   EXPECT_EQ(return_code, 0);
 
   return_code = caosdb_transaction_transaction_query(&transaction,
@@ -167,7 +167,7 @@ TEST_F(test_ccaosdb, test_query) {
 
   caosdb_transaction_result_set result_set;
   return_code =
-      caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
+    caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
   EXPECT_EQ(return_code, 0);
 
   int dummy(-1);
@@ -183,16 +183,16 @@ TEST_F(test_ccaosdb, test_query) {
 TEST_F(test_ccaosdb, test_single_id_retrieve) {
   caosdb_connection_connection connection;
   int return_code(
-      caosdb_connection_connection_manager_get_default_connection(&connection));
+    caosdb_connection_connection_manager_get_default_connection(&connection));
   EXPECT_EQ(return_code, 0);
 
   caosdb_transaction_transaction transaction;
-  return_code = caosdb_connection_connection_create_transaction(&connection,
-                                                                &transaction);
+  return_code =
+    caosdb_connection_connection_create_transaction(&connection, &transaction);
   EXPECT_EQ(return_code, 0);
 
   return_code =
-      caosdb_transaction_transaction_retrieve_by_id(&transaction, "21");
+    caosdb_transaction_transaction_retrieve_by_id(&transaction, "21");
   EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
 
   return_code = caosdb_transaction_transaction_execute(&transaction);
@@ -200,7 +200,7 @@ TEST_F(test_ccaosdb, test_single_id_retrieve) {
 
   caosdb_transaction_result_set result_set;
   return_code =
-      caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
+    caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
   EXPECT_EQ(return_code, 0);
 
   int dummy(-1);
@@ -229,17 +229,17 @@ TEST_F(test_ccaosdb, test_single_id_retrieve) {
 TEST_F(test_ccaosdb, test_multi_id_retrieve) {
   caosdb_connection_connection connection;
   int return_code(
-      caosdb_connection_connection_manager_get_default_connection(&connection));
+    caosdb_connection_connection_manager_get_default_connection(&connection));
   EXPECT_EQ(return_code, 0);
 
   caosdb_transaction_transaction transaction;
-  return_code = caosdb_connection_connection_create_transaction(&connection,
-                                                                &transaction);
+  return_code =
+    caosdb_connection_connection_create_transaction(&connection, &transaction);
   EXPECT_EQ(return_code, 0);
 
   const char *ids[] = {"20", "21", "22"}; // NOLINT
   return_code =
-      caosdb_transaction_transaction_retrieve_by_ids(&transaction, ids, 3);
+    caosdb_transaction_transaction_retrieve_by_ids(&transaction, ids, 3);
   EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
 
   return_code = caosdb_transaction_transaction_execute(&transaction);
@@ -248,7 +248,7 @@ TEST_F(test_ccaosdb, test_multi_id_retrieve) {
 
   caosdb_transaction_result_set result_set;
   return_code =
-      caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
+    caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
   EXPECT_EQ(return_code, 0);
 
   int dummy(-1);
@@ -361,7 +361,7 @@ TEST_F(test_ccaosdb, test_insert_update_delete) {
 
   // Change name and update
   return_code =
-      caosdb_entity_entity_set_name(&retrieved_entity_1, "TestNameNew");
+    caosdb_entity_entity_set_name(&retrieved_entity_1, "TestNameNew");
   EXPECT_EQ(return_code, 0);
   caosdb_transaction_transaction update_transaction;
   caosdb_connection_connection_create_transaction(&connection,
@@ -650,13 +650,13 @@ TEST_F(test_ccaosdb, test_up_n_download_file) {
   // return_code = caosdb_transaction_transaction_retrieve_by_id(
   //   &retrieve_transaction_1, rec_id);
   return_code = caosdb_transaction_transaction_retrieve_and_download_file_by_id(
-      &retrieve_transaction_1, rec_id, test_download_file_1.c_str());
+    &retrieve_transaction_1, rec_id, test_download_file_1.c_str());
   EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
   return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_1);
   EXPECT_EQ(return_code, 0);
 
   caosdb_transaction_result_set result_set;
   return_code = caosdb_transaction_transaction_get_result_set(
-      &retrieve_transaction_1, &result_set);
+    &retrieve_transaction_1, &result_set);
   EXPECT_EQ(return_code, 0);
 }
diff --git a/test/test_connection.cpp b/test/test_connection.cpp
index 28c1660306454039cd5ed8ca140e9f0ca0bd50e7..169fc9df1a2bd5d3e71aabf9a7b563402f733895 100644
--- a/test/test_connection.cpp
+++ b/test/test_connection.cpp
@@ -62,10 +62,10 @@ TEST(test_connection, connect_somehost_42347_fails) {
 
 TEST(test_connection, connection_insecure_authentication_error_anonymous) {
   const auto *port_str =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_GRPC_PORT_HTTP", "8080");
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_GRPC_PORT_HTTP", "8080");
   auto port = std::stoi(port_str);
   const auto *const host =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
 
   auto config = InsecureConnectionConfiguration(host, port);
   auto connection = Connection(config);
@@ -74,13 +74,13 @@ TEST(test_connection, connection_insecure_authentication_error_anonymous) {
 }
 
 TEST(test_connection, connection_ssl_authentication_error_anonymous) {
-  const auto *port_str = caosdb::utility::get_env_fallback(
-      "CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
+  const auto *port_str =
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
   auto port = std::stoi(port_str);
   const auto *const host =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
   const auto path =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_CERT", std::string());
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_CERT", std::string());
 
   auto cert = PemFileCertificateProvider(path);
   auto config = TlsConnectionConfiguration(host, port, cert);
@@ -93,13 +93,13 @@ TEST(test_connection, connection_ssl_authentication_error_anonymous) {
 }
 
 TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
-  const auto *port_str = caosdb::utility::get_env_fallback(
-      "CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
+  const auto *port_str =
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
   auto port = std::stoi(port_str);
   const auto *const host =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_HOST", "localhost");
   const auto path =
-      caosdb::utility::get_env_fallback("CAOSDB_SERVER_CERT", std::string());
+    caosdb::utility::get_env_fallback("CAOSDB_SERVER_CERT", std::string());
   const auto *const user = "not-a-user-23461237";
   const auto *const password = "very-c-cred";
 
@@ -109,10 +109,10 @@ TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
   auto connection = Connection(config);
 
   EXPECT_THROW_MESSAGE(
-      connection.RetrieveVersionInfo(), AuthenticationError,
-      "The attempt to execute this transaction has not been executed at all "
-      "because the authentication did not succeed. Original error: "
-      "Authentication failed. Username or password wrong.");
+    connection.RetrieveVersionInfo(), AuthenticationError,
+    "The attempt to execute this transaction has not been executed at all "
+    "because the authentication did not succeed. Original error: "
+    "Authentication failed. Username or password wrong.");
 }
 
 TEST(test_connection, connection_ssl_authentication_success) {
@@ -121,7 +121,7 @@ TEST(test_connection, connection_ssl_authentication_success) {
   auto major = caosdb::COMPATIBLE_SERVER_VERSION_MAJOR;
   auto minor = caosdb::COMPATIBLE_SERVER_VERSION_MINOR;
   const auto pre_release =
-      std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE);
+    std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE);
 
   const auto &v_info = connection->RetrieveVersionInfo();
   EXPECT_EQ(major, v_info.GetMajor());
diff --git a/test/test_list_properties.cpp b/test/test_list_properties.cpp
index ace6a93355761a53b92d7c93df8b115511acda36..825ea24c1e163bb5284e03b406ef9ec19ecc3e17 100644
--- a/test/test_list_properties.cpp
+++ b/test/test_list_properties.cpp
@@ -42,7 +42,7 @@ protected:
 
   static void DeleteEntities() {
     const auto &connection =
-        caosdb::connection::ConnectionManager::GetDefaultConnection();
+      caosdb::connection::ConnectionManager::GetDefaultConnection();
     auto query_transaction(connection->CreateTransaction());
     query_transaction->Query("FIND ENTITY WITH id > 99");
     query_transaction->Execute();
@@ -58,7 +58,7 @@ protected:
 
 TEST_F(test_list_properties, insert_list_of_text) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto insertion_prop(connection->CreateTransaction());
 
@@ -67,7 +67,7 @@ TEST_F(test_list_properties, insert_list_of_text) {
   abstract_list_property.SetName("TestProp");
   abstract_list_property.SetDataType(DataType::ListOf(AtomicDataType::TEXT));
   abstract_list_property.SetValue(
-      std::vector<std::string>{"item1", "item2", "item3"});
+    std::vector<std::string>{"item1", "item2", "item3"});
 
   insertion_prop->InsertEntity(&abstract_list_property);
   std::cout << "response " << insertion_prop->ResponseToString();
@@ -110,7 +110,7 @@ TEST_F(test_list_properties, insert_list_of_text) {
   EXPECT_TRUE(value.IsList());
   EXPECT_EQ(value.AsList().size(), 3);
   EXPECT_TRUE(value.AsList().at(1).IsString());
-  EXPECT_EQ(value.AsList().at(1).AsString(), "item6");
+  EXPECT_EQ(value.AsList().at(1).AsString(), "item5");
 }
 
 } // namespace caosdb::entity
diff --git a/test/test_properties.cpp b/test/test_properties.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6137494905b5fe0e5c04aa256a45648f355a8b91
--- /dev/null
+++ b/test/test_properties.cpp
@@ -0,0 +1,106 @@
+/*
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+ * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+#include "caosdb/connection.h"         // for Connection, ConnectionManager
+#include "caosdb/data_type.h"          // for AtomicDataType, AtomicDataTyp...
+#include "caosdb/entity.h"             // for Entity, Properties, Property
+#include "caosdb/transaction.h"        // for Transaction, ResultSet, Resul...
+#include "caosdb/transaction_status.h" // for TransactionStatus
+#include <gtest/gtest-message.h>       // for Message
+#include <gtest/gtest-test-part.h>     // for TestPartResult, SuiteApiResolver
+#include <gtest/gtest_pred_impl.h>     // for AssertionResult, EXPECT_EQ
+#include <memory>                      // for unique_ptr, allocator, __shar...
+
+namespace caosdb::entity {
+
+class test_properties : public ::testing::Test {
+protected:
+  void SetUp() override { DeleteEntities(); }
+
+  void TearDown() override { DeleteEntities(); }
+
+  static void DeleteEntities() {
+    const auto &connection =
+      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    auto query_transaction(connection->CreateTransaction());
+    query_transaction->Query("FIND ENTITY WITH id > 99");
+    query_transaction->Execute();
+    if (query_transaction->GetResultSet().size() > 0) {
+      auto delete_transaction(connection->CreateTransaction());
+      for (const Entity &entity : query_transaction->GetResultSet()) {
+        delete_transaction->DeleteById(entity.GetId());
+      }
+      delete_transaction->Execute();
+    }
+  }
+};
+
+TEST_F(test_properties, retrieve_unit) {
+  const auto &connection =
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  auto insertion_prop(connection->CreateTransaction());
+
+  Entity abstract_property;
+  abstract_property.SetRole(Role::PROPERTY);
+  abstract_property.SetName("TestProp");
+  abstract_property.SetDataType(AtomicDataType::DOUBLE);
+  abstract_property.SetUnit("V");
+
+  insertion_prop->InsertEntity(&abstract_property);
+  insertion_prop->Execute();
+  EXPECT_TRUE(insertion_prop->GetStatus().IsTerminated());
+
+  auto insertion_rt(connection->CreateTransaction());
+
+  Property property;
+  property.SetId(insertion_prop->GetResultSet().at(0).GetId());
+
+  Entity entity;
+  entity.SetRole(Role::RECORD_TYPE);
+  entity.SetName("TestRT");
+  entity.AppendProperty(property);
+
+  insertion_rt->InsertEntity(&entity);
+  insertion_rt->Execute();
+  EXPECT_TRUE(insertion_rt->GetStatus().IsTerminated());
+  EXPECT_FALSE(insertion_rt->GetStatus().IsError());
+
+  // retrieve and check again
+  auto retrieval(connection->CreateTransaction());
+  retrieval->RetrieveById(insertion_prop->GetResultSet().at(0).GetId());
+  retrieval->RetrieveById(insertion_rt->GetResultSet().at(0).GetId());
+  retrieval->ExecuteAsynchronously();
+  retrieval->WaitForIt();
+
+  EXPECT_TRUE(retrieval->GetStatus().IsTerminated());
+  EXPECT_FALSE(retrieval->GetStatus().IsError());
+
+  const auto &same_property = retrieval->GetResultSet().at(0);
+  EXPECT_EQ(same_property.GetDataType().AsAtomic(), AtomicDataType::DOUBLE);
+  EXPECT_EQ(same_property.GetUnit(), "V");
+
+  const auto &same_record_type = retrieval->GetResultSet().at(1);
+  EXPECT_EQ(same_record_type.GetProperties().at(0).GetDataType().AsAtomic(),
+            AtomicDataType::DOUBLE);
+  EXPECT_EQ(same_record_type.GetProperties().at(0).GetUnit(), "V");
+}
+
+} // namespace caosdb::entity
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 64b6d8ad129acf3bcb2935fdd1a46dcfc6fdbd1d..9e744ff3e7b9910a7a89421b96ab907a48c2d0fb 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -18,26 +18,30 @@
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
  *
  */
-#include "caosdb/connection.h" // for Connection, ConnectionManager
-#include "caosdb/data_type.h"  // for AtomicDataType
-#include "caosdb/entity.h"     // for Entity, Messages, Message
-#include "caosdb/file_transmission/file_reader.h" // for FileReader
+#include "caosdb/connection.h"                    // for Connection, Connec...
+#include "caosdb/data_type.h"                     // for AtomicDataType
+#include "caosdb/entity.h"                        // for Entity, Property
+#include "caosdb/file_transmission/file_reader.h" // for path, FileReader
 #include "caosdb/file_transmission/file_writer.h" // for FileWriter
-#include "caosdb/message_code.h"       // for ENTITY_DOES_NOT_EXIST, Messag...
-#include "caosdb/status_code.h"        // for SUCCESS, StatusCode
-#include "caosdb/transaction.h"        // for Entity, Transaction,...
-#include "caosdb/transaction_status.h" // for TransactionStatus, StatusCode
-#include <boost/filesystem/operations.hpp>  // for remove
-#include <boost/filesystem/path.hpp>        // for path
-#include <boost/filesystem/path_traits.hpp> // for filesystem
-#include <boost/lexical_cast.hpp>
-#include <gtest/gtest-message.h>   // for Message
-#include <gtest/gtest-test-part.h> // for TestPartResult, SuiteApiResolver
-#include <gtest/gtest_pred_impl.h> // for Test, EXPECT_EQ, AssertionResult
-#include <iostream>
-#include <memory> // for unique_ptr, allocator, __shar...
-#include <string> // for string
-#include <vector> // for vector
+#include "caosdb/message_code.h"                  // for MessageCode, ENTIT...
+#include "caosdb/status_code.h"                   // for StatusCode, SUCCESS
+#include "caosdb/transaction.h"                   // for Entity, Transaction
+#include "caosdb/transaction_status.h"            // for TransactionStatus
+#include "caosdb/value.h"                         // for Value
+#include <gtest/gtest-message.h>                  // for Message
+#include <gtest/gtest-test-part.h>                // for TestPartResult
+#include <gtest/gtest_pred_impl.h>                // for AssertionResult
+#include <stddef.h>                               // for size_t
+#include <boost/filesystem/operations.hpp>        // for remove
+#include <boost/filesystem/path.hpp>              // for path
+#include <boost/filesystem/path_traits.hpp>       // for filesystem
+#include <cstdint>                                // for int32_t
+#include <iostream>                               // for operator<<, endl
+#include <limits>                                 // for numeric_limits
+#include <memory>                                 // for unique_ptr, allocator
+#include <stdexcept>                              // for logic_error
+#include <string>                                 // for string, operator+
+#include <vector>                                 // for vector, operator!=
 
 namespace fs = boost::filesystem;
 namespace caosdb::transaction {
@@ -60,11 +64,14 @@ public:
    */
   template <typename T> static auto generateValues() -> std::vector<T> {
     std::vector<T> values = {
-        0, 1,
-        // (T)6.91629132943846e-310,
-        std::numeric_limits<T>::max(), std::numeric_limits<T>::min(),
-        std::numeric_limits<T>::denorm_min(), std::numeric_limits<T>::lowest(),
-        std::numeric_limits<T>::epsilon() // 0 for integers, but who cares?
+      static_cast<T>(0),
+      static_cast<T>(1),
+      static_cast<T>(6.91629132943846e-310),
+      std::numeric_limits<T>::max(),
+      std::numeric_limits<T>::min(),
+      std::numeric_limits<T>::denorm_min(),
+      std::numeric_limits<T>::lowest(),
+      std::numeric_limits<T>::epsilon() // 0 for integers, but who cares?
     };
 
     return values;
@@ -76,7 +83,7 @@ public:
   static void DeleteEntities() {
     // delete all entities
     const auto &connection =
-        caosdb::connection::ConnectionManager::GetDefaultConnection();
+      caosdb::connection::ConnectionManager::GetDefaultConnection();
     auto query_transaction(connection->CreateTransaction());
     query_transaction->Query("FIND ENTITY WITH id > 99");
     query_transaction->Execute();
@@ -130,6 +137,11 @@ auto test_transaction::getValueAs<int32_t>(const Value &value) -> int32_t {
   return value.AsInteger();
 }
 
+template <>
+auto test_transaction::getValueAs<bool>(const Value &value) -> bool {
+  return value.AsBool();
+}
+
 /*
  * Test the retrieval of a non-existing entity
  *
@@ -138,7 +150,7 @@ auto test_transaction::getValueAs<int32_t>(const Value &value) -> int32_t {
  */
 TEST_F(test_transaction, retrieve_non_existing) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto transaction(connection->CreateTransaction());
 
@@ -168,7 +180,7 @@ TEST_F(test_transaction, retrieve_non_existing) {
  */
 TEST_F(test_transaction, insert_without_delete) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto insert_transaction(connection->CreateTransaction());
 
@@ -203,7 +215,7 @@ TEST_F(test_transaction, insert_delete) {
   // same as in insert_without_delete
   // until marked  END SAME
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto insert_transaction(connection->CreateTransaction());
 
@@ -248,7 +260,7 @@ TEST_F(test_transaction, insert_delete_with_parent) {
   // same as in insert_without_delete
   // until marked  END SAME
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto insert_transaction(connection->CreateTransaction());
 
@@ -343,7 +355,7 @@ TEST_F(test_transaction, insert_delete_with_parent) {
  */
 TEST_F(test_transaction, insert_delete_with_property) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   // Create and insert Text property
   Entity prop_ent;
@@ -537,7 +549,7 @@ TEST_F(test_transaction, insert_delete_with_property) {
  */
 TEST_F(test_transaction, test_multi_retrieve) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto transaction(connection->CreateTransaction());
 
@@ -571,7 +583,7 @@ TEST_F(test_transaction, test_multi_retrieve) {
  */
 TEST_F(test_transaction, insert_update_delete) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   // INSERT
   auto insert_transaction(connection->CreateTransaction());
@@ -639,7 +651,7 @@ TEST_F(test_transaction, insert_update_delete) {
  */
 TEST_F(test_transaction, test_query) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   auto insert_transaction(connection->CreateTransaction());
 
@@ -685,7 +697,7 @@ TEST_F(test_transaction, test_query) {
 template <typename T>
 auto test_numeric_values_impl(AtomicDataType a_type) -> void {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   // Insert entities
   auto values_orig = test_transaction::generateValues<T>();
@@ -728,7 +740,7 @@ auto test_numeric_values_impl(AtomicDataType a_type) -> void {
     const auto result = retrieve_transaction->GetResultSet().at(0);
     EXPECT_EQ(result.GetDataType(), a_type);
     const auto &retrieved_value =
-        test_transaction::getValueAs<T>(result.GetValue());
+      test_transaction::getValueAs<T>(result.GetValue());
     // std::cout << "retrieved_value: " << retrieved_value << std::endl;
     EXPECT_EQ(retrieved_value, value);
     ++i;
@@ -742,6 +754,8 @@ TEST_F(test_transaction, test_numeric_values) {
   test_numeric_values_impl<double>(AtomicDataType::DOUBLE);
   test_transaction::DeleteEntities();
   test_numeric_values_impl<int32_t>(AtomicDataType::INTEGER);
+  test_transaction::DeleteEntities();
+  test_numeric_values_impl<bool>(AtomicDataType::BOOLEAN);
 }
 
 // /*
@@ -767,7 +781,7 @@ TEST_F(test_transaction, test_numeric_values) {
  */
 TEST_F(test_transaction, test_query_with_retrieve) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   // rt1
   Entity rt1;
@@ -882,7 +896,7 @@ TEST_F(test_transaction, test_query_with_retrieve) {
  */
 TEST_F(test_transaction, test_file_upload) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   Entity file;
   file.SetRole(Role::FILE);
@@ -919,7 +933,7 @@ TEST_F(test_transaction, test_file_upload) {
  */
 TEST_F(test_transaction, test_file_up_n_download) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   Entity file;
   file.SetRole(Role::FILE);
@@ -938,7 +952,7 @@ TEST_F(test_transaction, test_file_up_n_download) {
 
   auto download_transaction(connection->CreateTransaction());
   download_transaction->RetrieveAndDownloadFileById(
-      inserted_file.GetId(), test_download_file_1.string());
+    inserted_file.GetId(), test_download_file_1.string());
   download_transaction->ExecuteAsynchronously();
   ASSERT_EQ(download_transaction->WaitForIt().GetCode(), StatusCode::SUCCESS);
 
@@ -965,7 +979,7 @@ TEST_F(test_transaction, test_file_up_n_download) {
  */
 TEST_F(test_transaction, test_full_workflow) {
   const auto &connection =
-      caosdb::connection::ConnectionManager::GetDefaultConnection();
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
 
   // ######  Create Data Model  ######
   Entity dataRT;