diff --git a/conanfile.txt b/conanfile.txt
index da194ce3e326275d10fc925a0d7b309144b497ff..76399f5c9780b0f4a66851187e037e8c80c0866a 100644
--- a/conanfile.txt
+++ b/conanfile.txt
@@ -1,5 +1,5 @@
 [requires]
-caosdb/0.0.16
+caosdb/0.0.17
 gtest/1.11.0
 
 [generators]
diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index ff01b9ba95d8dcded153aa9f94260a98cf5b3c53..357149971e028ad28560cd4883d20720f5432a8c 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -298,7 +298,9 @@ TEST_F(test_ccaosdb, test_insert_update_delete) {
   caosdb_entity_create_entity(&original_entity);
   caosdb_entity_entity_set_name(&original_entity, "TestName");
   caosdb_entity_entity_set_role(&original_entity, "PROPERTY");
-  caosdb_entity_entity_set_datatype(&original_entity, "TEXT", false, false);
+  caosdb_entity_datatype in_type;
+  caosdb_entity_create_atomic_datatype(&in_type, "TEXT");
+  caosdb_entity_entity_set_datatype(&original_entity, &in_type);
 
   caosdb_transaction_transaction insert_transaction;
   caosdb_connection_connection_create_transaction(&connection,
@@ -347,17 +349,14 @@ TEST_F(test_ccaosdb, test_insert_update_delete) {
   caosdb_entity_entity_get_role(&retrieved_entity_1, &out);
   EXPECT_EQ(strcmp(in, out), 0);
 
-  bool is_list_in[] = {false}; // NOLINT
-  bool is_ref_in[] = {false};  // NOLINT
-  caosdb_entity_entity_get_datatype(&original_entity, &in, is_ref_in,
-                                    is_list_in);
-  bool is_list_out[] = {false}; // NOLINT
-  bool is_ref_out[] = {false};  // NOLINT
-  caosdb_entity_entity_get_datatype(&retrieved_entity_1, &out, is_ref_out,
-                                    is_list_out);
+  caosdb_entity_datatype out_type;
+  caosdb_entity_entity_get_datatype(&original_entity, &out_type);
+  bool out_is(false);
+  caosdb_entity_datatype_is_atomic(&out_type, &out_is);
+  EXPECT_TRUE(out_is);
+  caosdb_entity_datatype_get_datatype_name(&in_type, &in);
+  caosdb_entity_datatype_get_datatype_name(&out_type, &out);
   EXPECT_EQ(strcmp(in, out), 0);
-  EXPECT_EQ(*is_list_in, *is_list_out);
-  EXPECT_EQ(*is_ref_in, *is_ref_out);
 
   // Change name and update
   return_code =
@@ -414,13 +413,12 @@ TEST_F(test_ccaosdb, test_insert_update_delete) {
   caosdb_entity_entity_get_role(&retrieved_entity_2, &out);
   EXPECT_EQ(strcmp(in, out), 0);
 
-  caosdb_entity_entity_get_datatype(&original_entity, &in, is_ref_in,
-                                    is_list_in);
-  caosdb_entity_entity_get_datatype(&retrieved_entity_2, &out, is_ref_out,
-                                    is_list_out);
+  caosdb_entity_entity_get_datatype(&retrieved_entity_2, &out_type);
+  caosdb_entity_datatype_is_atomic(&out_type, &out_is);
+  EXPECT_TRUE(out_is);
+  caosdb_entity_datatype_get_datatype_name(&in_type, &in);
+  caosdb_entity_datatype_get_datatype_name(&out_type, &out);
   EXPECT_EQ(strcmp(in, out), 0);
-  EXPECT_EQ(*is_ref_in, *is_ref_out);
-  EXPECT_EQ(*is_list_in, *is_list_out);
 
   // Now delete
   caosdb_transaction_transaction delete_transaction;
@@ -472,6 +470,7 @@ TEST_F(test_ccaosdb, test_insert_update_delete) {
   caosdb_transaction_delete_transaction(&retrieve_transaction_1);
   caosdb_transaction_delete_transaction(&insert_transaction);
   caosdb_entity_delete_entity(&original_entity);
+  caosdb_entity_delete_datatype(&in_type);
 }
 
 TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
@@ -486,7 +485,9 @@ TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
 
   caosdb_entity_entity_set_name(&original_prop, "TestProp");
   caosdb_entity_entity_set_role(&original_prop, "PROPERTY");
-  caosdb_entity_entity_set_datatype(&original_prop, "TEXT", false, false);
+  caosdb_entity_datatype original_type;
+  caosdb_entity_create_atomic_datatype(&original_type, "TEXT");
+  caosdb_entity_entity_set_datatype(&original_prop, &original_type);
 
   std::cout << "Inserting a property..." << std::endl;
   caosdb_transaction_transaction prop_insertion;
@@ -540,7 +541,9 @@ TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
   caosdb_entity_property rec_prop;
   caosdb_entity_create_property(&rec_prop);
   caosdb_entity_property_set_id(&rec_prop, prop_id);
-  caosdb_entity_property_set_string_value(&rec_prop, "Bla");
+  caosdb_entity_value in_value;
+  caosdb_entity_create_string_value(&in_value, "Bla");
+  caosdb_entity_property_set_value(&rec_prop, &in_value);
   caosdb_entity_entity_append_property(&original_rec, &rec_prop);
 
   caosdb_transaction_transaction rec_insertion;
@@ -593,8 +596,10 @@ TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
   caosdb_entity_entity_get_name(&original_prop, &in);
   caosdb_entity_property_get_name(&retrieved_property, &out);
   EXPECT_EQ(strcmp(in, out), 0);
-  caosdb_entity_property_get_string_value(&rec_prop, &in);
-  caosdb_entity_property_get_string_value(&retrieved_property, &out);
+  caosdb_entity_value out_value;
+  caosdb_entity_property_get_value(&retrieved_property, &out_value);
+  caosdb_entity_value_get_as_string(&in_value, &in);
+  caosdb_entity_value_get_as_string(&out_value, &out);
   EXPECT_EQ(strcmp(in, out), 0);
 
   caosdb_transaction_delete_transaction(&retrieve_transaction);
@@ -607,6 +612,8 @@ TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
   caosdb_entity_delete_entity(&original_rt);
   caosdb_transaction_delete_transaction(&prop_insertion);
   caosdb_entity_delete_entity(&original_prop);
+  caosdb_entity_delete_datatype(&original_type);
+  caosdb_entity_delete_value(&in_value);
 }
 
 TEST_F(test_ccaosdb, test_up_n_download_file) {
diff --git a/test/test_list_properties.cpp b/test/test_list_properties.cpp
index 32f02e2fad8f46199d4240e86e9e1d31c86e936d..e4ce774ccbe529d5abe3a9da5d539ff7166ac1e8 100644
--- a/test/test_list_properties.cpp
+++ b/test/test_list_properties.cpp
@@ -105,13 +105,13 @@ TEST_F(test_list_properties, insert_list_of_text) {
   const auto &value = same_entity.GetProperties().at(0).GetValue();
 
   EXPECT_TRUE(data_type.IsList());
-  EXPECT_TRUE(data_type.AsList().IsListOfAtomic());
-  EXPECT_EQ(data_type.AsList().GetAtomicDataType(), AtomicDataType::TEXT);
+  EXPECT_TRUE(data_type.GetAsList().IsListOfAtomic());
+  EXPECT_EQ(data_type.GetAsList().GetAtomicDataType(), AtomicDataType::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(), "item5");
+  EXPECT_TRUE(value.IsVector());
+  EXPECT_EQ(value.GetAsVector().size(), 3);
+  EXPECT_TRUE(value.GetAsVector().at(1).IsString());
+  EXPECT_EQ(value.GetAsVector().at(1).GetAsString(), "item5");
 }
 
 TEST_F(test_list_properties, insert_list_of_int) {
@@ -161,13 +161,13 @@ TEST_F(test_list_properties, insert_list_of_int) {
   const auto &value = same_entity.GetProperties().at(0).GetValue();
 
   EXPECT_TRUE(data_type.IsList());
-  EXPECT_TRUE(data_type.AsList().IsListOfAtomic());
-  EXPECT_EQ(data_type.AsList().GetAtomicDataType(), AtomicDataType::INTEGER);
+  EXPECT_TRUE(data_type.GetAsList().IsListOfAtomic());
+  EXPECT_EQ(data_type.GetAsList().GetAtomicDataType(), AtomicDataType::INTEGER);
 
-  EXPECT_TRUE(value.IsList());
-  EXPECT_EQ(value.AsList().size(), 3);
-  EXPECT_TRUE(value.AsList().at(1).IsInteger());
-  EXPECT_EQ(value.AsList().at(1).AsInteger(), 5);
+  EXPECT_TRUE(value.IsVector());
+  EXPECT_EQ(value.GetAsVector().size(), 3);
+  EXPECT_TRUE(value.GetAsVector().at(1).IsInt64());
+  EXPECT_EQ(value.GetAsVector().at(1).GetAsInt64(), 5);
 }
 
 TEST_F(test_list_properties, insert_list_of_bool) {
@@ -217,13 +217,13 @@ TEST_F(test_list_properties, insert_list_of_bool) {
   const auto &value = same_entity.GetProperties().at(0).GetValue();
 
   EXPECT_TRUE(data_type.IsList());
-  EXPECT_TRUE(data_type.AsList().IsListOfAtomic());
-  EXPECT_EQ(data_type.AsList().GetAtomicDataType(), AtomicDataType::BOOLEAN);
+  EXPECT_TRUE(data_type.GetAsList().IsListOfAtomic());
+  EXPECT_EQ(data_type.GetAsList().GetAtomicDataType(), AtomicDataType::BOOLEAN);
 
-  EXPECT_TRUE(value.IsList());
-  EXPECT_EQ(value.AsList().size(), 3);
-  EXPECT_TRUE(value.AsList().at(1).IsBool());
-  EXPECT_FALSE(value.AsList().at(1).AsBool());
+  EXPECT_TRUE(value.IsVector());
+  EXPECT_EQ(value.GetAsVector().size(), 3);
+  EXPECT_TRUE(value.GetAsVector().at(1).IsBool());
+  EXPECT_FALSE(value.GetAsVector().at(1).GetAsBool());
 }
 
 } // namespace caosdb::entity
diff --git a/test/test_properties.cpp b/test/test_properties.cpp
index 6137494905b5fe0e5c04aa256a45648f355a8b91..f810949f62cbe0d1b5644b5cbb12ee5b67241945 100644
--- a/test/test_properties.cpp
+++ b/test/test_properties.cpp
@@ -94,11 +94,11 @@ TEST_F(test_properties, retrieve_unit) {
   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.GetDataType().GetAsAtomic(), 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(),
+  EXPECT_EQ(same_record_type.GetProperties().at(0).GetDataType().GetAsAtomic(),
             AtomicDataType::DOUBLE);
   EXPECT_EQ(same_record_type.GetProperties().at(0).GetUnit(), "V");
 }
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 13ffb647dbbc8eb152b1683309032459611927cb..70624decb063804732a1709476d9bdbae2390c8b 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -132,22 +132,22 @@ protected:
 
 template <>
 auto test_transaction::getValueAs<double>(const Value &value) -> double {
-  return value.AsDouble();
+  return value.GetAsDouble();
 }
 
 template <>
 auto test_transaction::getValueAs<int64_t>(const Value &value) -> int64_t {
-  return value.AsInteger();
+  return value.GetAsInt64();
 }
 
 template <>
 auto test_transaction::getValueAs<int32_t>(const Value &value) -> int32_t {
-  return static_cast<int32_t>(value.AsInteger());
+  return static_cast<int32_t>(value.GetAsInt64());
 }
 
 template <>
 auto test_transaction::getValueAs<bool>(const Value &value) -> bool {
-  return value.AsBool();
+  return value.GetAsBool();
 }
 
 /*