Merge "Serialization now adheres to new VAB serialization scheme."
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
index fa7a8bd..c21fb3d 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
@@ -16,21 +16,18 @@
 			auto & vec = this->Get<object::list_t<T>&>();
 			vec.push_back(t);
 			return true;
-		};
-		break;
-	case basyx::type::objectType::Set:
-		if (this->InstanceOf<object::set_t<T>>())
+		}
+		else if (this->InstanceOf<object::object_list_t>())
 		{
-			auto & set = this->Get<object::set_t<T>&>();
-			return set.emplace(t).second;
-		};
+			auto & vec = this->Get<object::object_list_t&>();
+			vec.emplace_back(t);
+			return true;
+		}
 		break;
 	};
 	return false;
 };
 
-
-
 template<typename T>
 bool basyx::object::insertKey(const std::string & key, const T & t, bool override)
 {
@@ -76,13 +73,6 @@
 	// Check if contained object is list or set
 	switch (content->object_type())
 	{
-	case basyx::type::objectType::Set:
-		if (this->InstanceOf<object::set_t<T>>())
-		{
-			auto & set = this->Get<object::set_t<T>&>();
-			return set.erase(t) > 0;
-		};
-		break;
 	case basyx::type::objectType::List:
 		auto & list = this->Get<object::list_t<T>&>();
 		list.erase(std::remove(list.begin(), list.end(), t), list.end());
@@ -109,7 +99,6 @@
 	case basyx::type::valueType::Float:
 		return this->remove(obj.Get<const double>());
 		break;
-
 	};
 
 	return false;
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
index 0872f31..6720e8f 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
@@ -42,18 +42,6 @@
 	return basyx::object{ object::list_t<basyx::object>(std::forward<Args>(args)...) };
 };
 
-template<typename T, typename... Args>
-basyx::object basyx::object::make_set(Args && ... args)
-{
-	return basyx::object{ object::set_t<T>(std::forward<Args>(args)...) };
-};
-
-template<typename... Args>
-basyx::object basyx::object::make_object_set(Args && ... args)
-{
-	return basyx::object{ object::set_t<basyx::object>(std::forward<Args>(args)...) };
-};
-
 template<typename... Args>
 basyx::object basyx::object::make_map(Args && ... args)
 {
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
index 627ce3d..aab6a07 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
@@ -19,7 +19,6 @@
 
 #include <vector>
 #include <unordered_map>
-#include <unordered_set>
 
 namespace basyx {
 // basyx::object
@@ -35,17 +34,12 @@
 		using list_t = std::vector<T>;
 
 		template<typename T>
-		using set_t = std::unordered_set<T>;
-
-		template<typename T>
 		using hash_map_t = std::unordered_map<std::string, T>;
 
 		using object_list_t = list_t<basyx::object>;
-		using object_set_t = set_t<basyx::object>;
 		using object_map_t = object::hash_map_t<basyx::object>;
 
 		using function_t = std::function<basyx::object(basyx::object*)>;	
-
 	public:	// Constructors
 		object();
 		object(const char *);
@@ -135,6 +129,7 @@
 		template<typename T>
 		bool insertKey(const std::string & key, const T & t, bool override = false);
 
+		std::size_t size();
 
 		template<typename T>
 		bool remove(const T & t);
@@ -177,12 +172,6 @@
 		template<typename T>
 		static object make_list(std::initializer_list<T>);
 
-		template<typename T, typename... Args>
-		static object make_set(Args && ... args);
-
-		template<typename... Args>
-		static object make_object_set(Args && ... args);
-
 		template<typename... Args>
 		static object make_map(Args && ... args);
 
@@ -213,7 +202,6 @@
 	{
 		std::size_t operator()(basyx::object const & o) const noexcept
 		{
-			auto TEST = reinterpret_cast<std::size_t>(o.content->get_address());
 			return reinterpret_cast<std::size_t>(o.content->get_address());
 		};
 	};
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
index 67a5e52..96471c8 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
@@ -22,7 +22,6 @@
 	enum class objectType {
 		Primitive,
 		List,
-		Set,
 		Map,
 		Function
 	};
@@ -100,14 +99,6 @@
 		static constexpr basyx::type::valueType value_type = basyx::type::basyx_type<T>::value_type;
 	};
 
-	// Specialization for std::unordered_set
-	template <typename T>
-	struct basyx_type<std::unordered_set<T>>
-	{
-		static constexpr basyx::type::objectType object_type = basyx::type::objectType::Set;
-		static constexpr basyx::type::valueType value_type = basyx::type::basyx_type<T>::value_type;
-	};
-
 	// Specialization for std::unordered_map
 	template <typename T>
 	struct basyx_type<std::unordered_map<std::string, T>>
@@ -154,12 +145,6 @@
 
 	template <typename T>
 	constexpr basyx::type::objectType basyx_type<std::vector<T>>::object_type;
-
-	template <typename T>
-	constexpr basyx::type::valueType basyx_type<std::unordered_set<T>>::value_type;
-
-	template <typename T>
-	constexpr basyx::type::objectType basyx_type<std::unordered_set<T>>::object_type;
 };
 };
 
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
index eff536a..52688eb 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
@@ -31,18 +31,16 @@
 
             if (json.is_primitive()) {
                 return deserialize_helper::fundamental(json);
-            } else // deserialize objectMap
-            if (json.is_object()) 
+            } 
+			// deserialize list
+			else if( json.is_array()) 
 			{
-				if (json.find(basyx::serialization::typeSpecifier) != json.end())
-				{	
-					// deserialize typed basyx list
-					return collection(json);
-				}
-				else // assume is map
-				{
-					return basyx::object{ std::forward<basyx::object::object_map_t>(deserialize_helper::objectMap(json)) };
-				}
+				return deserialize_helper::list(json);
+			}
+			// deserialize objectMap
+			else if (json.is_object()) 
+			{
+				return basyx::object{ std::forward<basyx::object::object_map_t>(deserialize_helper::objectMap(json)) };
             } 
 
 			return basyx::object::make_null();
@@ -61,29 +59,6 @@
             else if (json.is_string())
                 return basyx::object { json.get<std::string>() };
 
-            // Get the typeId and value node
-            //auto typeId = json[basyx::serialization::typeIdSpecifier].get<std::string>();
-            //auto valueJson = json[basyx::serialization::valueSpecifier];
-
-            //if (typeId == basyx::serialization::basysType<int>::string) {
-            //	return basyx::object{ valueJson.get<int>() };
-            //}
-            //else if (typeId == basyx::serialization::basysType<bool>::string) {
-            //	return basyx::object{ valueJson.get<bool>() };
-            //}
-            //else if (typeId == basyx::serialization::basysType<float>::string) {
-            //	return basyx::object{ valueJson.get<float>() };
-            //}
-            //else if (typeId == basyx::serialization::basysType<double>::string) {
-            //	return basyx::object{ valueJson.get<double>() };
-            //}
-            //else if (typeId == basyx::serialization::basysType<char>::string) {
-            //	return basyx::object{ valueJson.get<char>() };
-            //}
-            //else if (typeId == basyx::serialization::basysType<std::string>::string) {
-            //	return basyx::object{ valueJson.get<std::string>() };
-            //}
-
             return basyx::object::make_null();
         }
 
@@ -115,26 +90,10 @@
 			return last_type;
 		};
 
-		static basyx::object collection(const json_t & json)
+		static basyx::object list(const json_t & json_array)
 		{
-			if (json[basyx::serialization::typeSpecifier] == "list")
-			{
-				return deserialize_helper::list(json);
-			}
-			else if (json[basyx::serialization::typeSpecifier] == "set")
-			{
-				return deserialize_helper::set(json);
-			};
-
-			return basyx::object::make_null();
-		};
-
-		static basyx::object list(const json_t & json)
-		{
-			auto json_array = json[basyx::serialization::valueSpecifier];
-
 			if (json_array.empty())
-				return basyx::object::make_list<int>();
+				return basyx::object::object_list_t();
 
 			if (json_array.is_array())
 			{
@@ -158,33 +117,6 @@
 			return basyx::object::make_null();
 		};
 
-		static basyx::object set(const json_t & json)
-		{
-			auto json_array = json[basyx::serialization::valueSpecifier];
-
-			if (json_array.empty())
-				return basyx::object::make_set<int>();
-
-			if (json_array.is_array())
-			{
-				auto value_type = check_array_type(json_array);
-
-				switch (value_type)
-				{
-				case basyx::type::valueType::Bool:
-					return deserialize_helper::set_t<bool>(json_array);
-				case basyx::type::valueType::Int:
-					return deserialize_helper::set_t<int>(json_array);
-				case basyx::type::valueType::String:
-					return deserialize_helper::set_t<std::string>(json_array);
-				case basyx::type::valueType::Float:
-					return deserialize_helper::set_t<double>(json_array);
-				};
-			}
-
-			return basyx::object::make_null();
-		};
-
         static basyx::object object_list(const json_t& json)
         {
             basyx::object::object_list_t objectList;
@@ -208,18 +140,6 @@
 			return list;
 		};
 
-		template<typename T>
-		static basyx::object set_t(const json_t & json)
-		{
-			basyx::object set = basyx::object::make_set<T>();
-
-			for (const auto& val : json) {
-				set.insert(deserialize(val));
-			}
-
-			return set;
-		};
-
         // Deserializes an objectMap from the given JSON
         static basyx::object::object_map_t objectMap(const json_t& json)
         {
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
index 3cd35fa..8917501 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
@@ -50,42 +50,15 @@
 	template<typename T>
 	inline void serialize_helper(json_t & json, const basyx::object::list_t<T> & list)
 	{
-		json[basyx::serialization::typeSpecifier] = "list";
-		json[basyx::serialization::valueSpecifier] = list ;
-	};
-
-	template<typename T>
-	inline void serialize_helper(json_t & json, const basyx::object::set_t<T> & set)
-	{
-		json[basyx::serialization::typeSpecifier] = "set";
-		json[basyx::serialization::valueSpecifier] = set;
+		json = list ;
 	};
 
     // basyx::object::object_map_t serializer
     inline void serialize_helper(json_t& json, const basyx::object::object_map_t & objectMap)
     {
 		// Initialize as valid json object, even if map is empty
-		json = json_t::object();
-        json_t collectionTypes;
-
-        for (const auto& entry : objectMap) {
-            if (entry.second.InstanceOf<basyx::object::object_list_t>()) {
-                collectionTypes[entry.first] = "list";
-            };
-
-            json[entry.first] = entry.second;
-            if (collectionTypes.size() > 0)
-                json["_basyxTypes"] = collectionTypes;
-        }
+		json = objectMap;
     }
-
-    // basyx::object::object_list_t serializer
-    //inline void serialize_helper(json_t& json, const basyx::object::object_list_t& objectCollection)
-    //{
-    //    for (const auto& object : objectCollection) {
-    //        json.push_back(object);
-    //    }
-    //}
 };
 };
 };
diff --git a/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp b/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
index 1c043eb..2a931bd 100644
--- a/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
+++ b/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
@@ -42,22 +42,6 @@
 			return this->Get<object::object_list_t&>().empty();
 			break;
 		};
-	case basyx::type::objectType::Set:
-		switch (value_type)
-		{
-		case basyx::type::valueType::Bool:
-			return this->Get<object::set_t<bool>&>().empty();
-			break;
-		case basyx::type::valueType::Int:
-			return this->Get<object::set_t<int>&>().empty();
-			break;
-		case basyx::type::valueType::Float:
-			return this->Get<object::set_t<double>&>().empty();
-			break;
-		case basyx::type::valueType::String:
-			return this->Get<object::set_t<std::string>&>().empty();
-			break;
-		};
 	case basyx::type::objectType::Map:
 		return this->Get<object::object_map_t&>().empty();
 		break;
@@ -85,14 +69,6 @@
 			this->Get<basyx::object::object_list_t&>().emplace_back(obj);
 			return true;
 		}
-	case basyx::type::objectType::Set:
-		if (this->content->value_type() == basyx::type::valueType::Object)
-		{
-			auto & objectSet = this->Get<basyx::object::set_t<basyx::object>&>();
-			auto resultSet = objectSet.emplace(obj);
-			return resultSet.second;
-			break;
-		};
 
 		if (this->content->value_type() == value_type)
 		{
@@ -158,6 +134,44 @@
 	return this->content->compare(rhs.content.get());
 }
 
+std::size_t basyx::object::size()
+{
+	if (!this->content)
+		return 0;
+
+	auto valueType = this->GetValueType();
+
+	// Check if contained object is list or set
+	switch (content->object_type())
+	{
+	case basyx::type::objectType::List:
+		switch (valueType)
+		{
+		case basyx::type::valueType::Bool:
+			return this->Get<object::list_t<bool>&>().size();
+			break;
+		case basyx::type::valueType::Int:
+			return this->Get<object::list_t<int>&>().size();
+			break;
+		case basyx::type::valueType::Float:
+			return this->Get<object::list_t<float>&>().size();
+			break;
+		case basyx::type::valueType::String:
+			return this->Get<object::list_t<std::string>&>().size();
+			break;
+		case basyx::type::valueType::Object:
+			return this->Get<object::object_list_t&>().size();
+			break;
+		};
+		break;
+	case basyx::type::objectType::Map:
+		return this->Get<object::object_map_t&>().size();
+		break;
+	};
+
+	return 1;
+};
+
 basyx::object basyx::object::make_null()
 {
 	return basyx::object{ nullptr };
diff --git a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
index 6690121..004fc40 100644
--- a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
+++ b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
@@ -3,7 +3,7 @@
 const std::string empty{};
 
 basyx::submodel::LangStringSet::LangStringSet()
-	: vab::ElementMap{basyx::object::make_object_set()}
+	: vab::ElementMap{basyx::object::make_object_list()}
 {
 }
 
@@ -16,7 +16,7 @@
 
 const std::string & basyx::submodel::LangStringSet::getLangString(const std::string & languageCode) const
 {
-	auto & objectSet = this->getMap().Get<basyx::object::object_set_t&>();
+	auto & objectSet = this->getMap().Get<basyx::object::object_list_t&>();
 
 	for (auto & entry : objectSet)
 	{
@@ -31,15 +31,15 @@
 
 basyx::submodel::LangStringSet::langCodeSet_t basyx::submodel::LangStringSet::getLanguageCodes() const
 {
-	auto & objectSet = this->getMap().Get<basyx::object::object_set_t&>();
+	auto & objectList = this->getMap().Get<basyx::object::object_list_t&>();
 
 	std::remove_const<langCodeSet_t>::type ret;
-	ret.reserve(objectSet.size());
+	ret.reserve(objectList.size());
 
-	for (auto & entry : objectSet)
+	for (auto & entry : objectList)
 	{
 		auto & object = const_cast<basyx::object&>(entry);
-		ret.emplace_back(  std::cref( object.getProperty(Path::Language).GetStringContent()) );
+		ret.emplace_back( std::cref( object.getProperty(Path::Language).GetStringContent()) );
 	};
 
 	return ret;
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc b/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
index 700b457..2cc09dc 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
+++ b/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
@@ -98,19 +98,6 @@
 	ASSERT_EQ(basyx::type::basyx_type<basyx::object::list_t<double>>::object_type, basyx::type::objectType::List);
 	ASSERT_EQ(basyx::type::basyx_type<basyx::object::list_t<double>>::value_type, basyx::type::valueType::Float);
 
-	// sets
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<int>>::object_type, basyx::type::objectType::Set);
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<int>>::value_type, basyx::type::valueType::Int);
-
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<uint64_t>>::object_type, basyx::type::objectType::Set);
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<uint64_t>>::value_type, basyx::type::valueType::Int);
-
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<std::string>>::object_type, basyx::type::objectType::Set);
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<std::string>>::value_type, basyx::type::valueType::String);
-
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<double>>::object_type, basyx::type::objectType::Set);
-	ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<double>>::value_type, basyx::type::valueType::Float);
-
 	// functions
 	ASSERT_EQ(basyx::type::basyx_type<basyx::detail::functionWrapper>::object_type, basyx::type::objectType::Function);
 	ASSERT_EQ(basyx::type::basyx_type<basyx::detail::functionWrapper>::value_type, basyx::type::valueType::Object);
@@ -223,14 +210,6 @@
 	ASSERT_EQ(vec.size(), 2);
 	ASSERT_TRUE(anyVec.insert(3));
 	ASSERT_EQ(vec.size(), 3);
-
-	basyx::object anySet = std::unordered_set<int>{ 1,2 };
-	auto & set = anySet.Get<std::unordered_set<int>&>();
-
-	ASSERT_EQ(set.size(), 2);
-	ASSERT_FALSE(anySet.insert(2));
-	ASSERT_TRUE(anySet.insert(3));
-	ASSERT_EQ(set.size(), 3);
 }
 
 TEST_F(TestBaSyxObject, InsertTestObject)
@@ -254,13 +233,7 @@
 
 TEST_F(TestBaSyxObject, RemoveTest)
 {
-	basyx::object anySet = std::unordered_set<int>{ 1,2,3 };
-	auto & set = anySet.Get<std::unordered_set<int>&>();
 
-	ASSERT_EQ(set.size(), 3);
-	ASSERT_FALSE(anySet.remove(4));
-	ASSERT_TRUE(anySet.remove(3));
-	ASSERT_EQ(set.size(), 2);
 }
 
 TEST_F(TestBaSyxObject, HashMapTest_Object)
@@ -294,43 +267,6 @@
 	ASSERT_EQ(obj.Get<int>(), i);
 }
 
-TEST_F(TestBaSyxObject, ObjectSetTestInt)
-{
-	basyx::object objectSet = basyx::object::make_set<int>();
-
-	ASSERT_TRUE(objectSet.InstanceOf<basyx::object::set_t<int>>());
-	auto & set = objectSet.Get<basyx::object::set_t<int>&>();
-
-	// Insert two elements, same type
-	ASSERT_TRUE(objectSet.insert(2));
-	ASSERT_TRUE(objectSet.insert(3));
-	ASSERT_EQ(set.size(), 2);
-	ASSERT_EQ(set.count(2), 1);
-	ASSERT_EQ(set.count(3), 1);
-
-		// Insert new element, already existing value
-	ASSERT_FALSE(objectSet.insert(2));
-	ASSERT_EQ(set.size(), 2);
-	ASSERT_EQ(set.count(2), 1);
-	ASSERT_EQ(set.count(3), 1);
-
-	// Remove non-existing value
-	ASSERT_FALSE(objectSet.remove(5));
-	ASSERT_EQ(set.size(), 2);
-
-	// Remove existing value
-	ASSERT_TRUE(objectSet.remove(2));
-	ASSERT_EQ(set.size(), 1);
-	ASSERT_EQ(set.count(2), 0);
-	ASSERT_EQ(set.count(3), 1);
-
-	// Insert wrong type
-	ASSERT_FALSE(objectSet.insert(4.0));
-	ASSERT_EQ(set.size(), 1);
-	ASSERT_EQ(set.count(2), 0);
-	ASSERT_EQ(set.count(3), 1);
-}
-
 TEST_F(TestBaSyxObject, ObjectFunctionTest)
 {
 	basyx::object argSingle = 2;
@@ -401,34 +337,4 @@
 
 	ASSERT_NE(hash(map1), hash(map2));
 	ASSERT_NE(hash(map1), hash(objInt));
-}
-
-TEST_F(TestBaSyxObject, ObjectSetTestObject)
-{
-	auto objectSet = basyx::object::make_object_set();
-
-	ASSERT_TRUE(objectSet.InstanceOf<basyx::object::object_set_t>());
-
-	auto & set = objectSet.Get<basyx::object::object_set_t&>();
-
-	basyx::object objInt = 5;
-	auto map1 = basyx::object::make_map();
-	auto map2 = basyx::object::make_map();
-	map1.insertKey("test", 2);
-
-	// Insert new element
-	objectSet.insert(map1);
-	ASSERT_EQ(set.size(), 1);
-
-	// Insert same element, shouldn't insert
-	objectSet.insert(map1);
-	ASSERT_EQ(set.size(), 1);
-
-	// Insert new element
-	objectSet.insert(map2);
-	ASSERT_EQ(set.size(), 2);
-
-	// Insert new element, different type
-	objectSet.insert(objInt);
-	ASSERT_EQ(set.size(), 3);
 }
\ No newline at end of file
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc b/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
index bfa4318..41bd4a6 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
+++ b/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
@@ -14,16 +14,93 @@
 public:
 };
 
-TEST_F(TestBaSyxObjectSerializerJson, PrimitiveTest)
+TEST_F(TestBaSyxObjectSerializerJson, FullTest)
 {
-	json_t jsonInt = basyx::object{ 1 };
-	auto objList = basyx::object::make_list<basyx::object>({ 1,"22" });
+	auto innerMap = basyx::object::make_map();
+	innerMap.insertKey("a", 1);
+	innerMap.insertKey("b", 2);
 
-	json_t jsonList = basyx::serialization::json::serialize(objList);
-	auto dumped = jsonList.dump(4);
+	auto intList = basyx::object::make_list<int>({ 1,2,3 });
+	auto objList = basyx::object::make_object_list();
+	objList.insert(false);
+	objList.insert(4);
+	objList.insert(5.0);
+	objList.insert(std::string("6,0"));
+	objList.insert(innerMap);
+
+	auto emptyList = basyx::object::make_object_list();
+	auto emptyMap = basyx::object::make_map();
+
+	auto objectMap = basyx::object::make_map();
+	objectMap.insertKey("bool", true);
+	objectMap.insertKey("int", 1);
+	objectMap.insertKey("double", 2.0);
+	objectMap.insertKey("string", std::string("test"));
+	objectMap.insertKey("innerMap", innerMap);
+	objectMap.insertKey("intList", intList);
+	objectMap.insertKey("objList", objList);
+	objectMap.insertKey("emptyList", emptyList);
+	objectMap.insertKey("emptyMap", emptyMap);
+
+	json_t jsonMap = basyx::serialization::json::serialize(objectMap);
+	auto dumped = jsonMap.dump(4);
 	
 	auto deserialized = basyx::serialization::json::deserialize(dumped);
 
-	ASSERT_TRUE(deserialized.InstanceOf<basyx::object::object_list_t>());
-	ASSERT_EQ(deserialized.Get<basyx::object::object_list_t&>().size(), 2);
-}
+	ASSERT_TRUE(deserialized.InstanceOf<basyx::object::object_map_t>());
+	ASSERT_EQ(deserialized.size(), objectMap.size());
+
+	// Test primitives
+	auto dBool = deserialized.getProperty("bool");
+	ASSERT_TRUE(dBool.InstanceOf<bool>());
+	ASSERT_EQ(dBool.Get<bool>(), true);
+
+	auto dInt = deserialized.getProperty("int");
+	ASSERT_TRUE(dInt.InstanceOf<int>());
+	ASSERT_EQ(dInt.Get<int>(), 1);
+
+	auto dFloat = deserialized.getProperty("double");
+	ASSERT_TRUE(dFloat.InstanceOf<double>());
+	ASSERT_EQ(dFloat.Get<double>(), 2.0);
+
+	auto dString = deserialized.getProperty("string");
+	ASSERT_TRUE(dString.InstanceOf<std::string>());
+	ASSERT_EQ(dString.Get<std::string&>(), "test");
+
+	// Test empty containers
+	
+	auto dEmptyList = deserialized.getProperty("emptyList");
+	ASSERT_TRUE(dEmptyList.InstanceOf<basyx::object::object_list_t>());
+	ASSERT_EQ(dEmptyList.size(), 0);
+
+	auto dEmptyMap = deserialized.getProperty("emptyMap");
+	ASSERT_TRUE(dEmptyMap.InstanceOf<basyx::object::object_map_t>());
+	ASSERT_EQ(dEmptyMap.size(), 0);
+
+	// Test inner map
+
+	auto dInnerMap = deserialized.getProperty("innerMap");
+	ASSERT_TRUE(dInnerMap.InstanceOf<basyx::object::object_map_t>());
+	ASSERT_EQ(dInnerMap.size(), 2);
+	auto & aInnerMap = dInnerMap.Get<basyx::object::object_map_t&>();
+	auto & bInnerMap = innerMap.Get<basyx::object::object_map_t&>();
+	ASSERT_EQ(aInnerMap, bInnerMap);
+
+	// Test lists
+	
+	auto dIntList = deserialized.getProperty("intList");
+	ASSERT_TRUE(dIntList.InstanceOf<basyx::object::list_t<int>>());
+	ASSERT_EQ(dIntList.size(), 3);
+	auto & aIntList = dIntList.Get<basyx::object::list_t<int>&>();
+	auto & bIntList = intList.Get<basyx::object::list_t<int>&>();
+	ASSERT_EQ(aIntList, bIntList);
+
+	auto dObjList = deserialized.getProperty("objList");
+	ASSERT_TRUE(dObjList.InstanceOf<basyx::object::object_list_t>());
+	ASSERT_EQ(dObjList.size(), 5);
+	auto & aObjList = dObjList.Get<basyx::object::object_list_t&>();
+	auto & bObjList = objList.Get<basyx::object::object_list_t&>();
+	ASSERT_EQ(aObjList, bObjList);
+
+	return;
+}
\ No newline at end of file
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h b/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
index b4a5530..464d628 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
+++ b/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
@@ -52,14 +52,6 @@
 
 	static void testCreateDelete(basyx::vab::core::IModelProvider * modelProvider)
 	{
-		// Create element in Set (no key provided)
-		modelProvider->createValue("/structure/set/", true);
-		auto anySet = modelProvider->getModelPropertyValue("/structure/set/");
-		
-		ASSERT_TRUE(anySet.InstanceOf<basyx::object::set_t<bool>>());
-		
-		auto & objectSet = anySet.Get<basyx::object::set_t<bool>&>();
-
 		// Create elements in List (no key provided)
 		modelProvider->createValue("/structure/list/", 56);
 		auto toTest = modelProvider->getModelPropertyValue("/structure/list/");
@@ -94,13 +86,6 @@
 		toTest = modelProvider->getModelPropertyValue("listInRoot");
 		ASSERT_TRUE(toTest.IsNull());
 
-		// Delete at Set
-		// by value
-		modelProvider->deleteValue("/structure/set/", true);
-		toTest = modelProvider->getModelPropertyValue("/structure/set/");
-		//ASSERT_EQ(toTest.Get<basyx::object::set_t<bool>&>().count(true), 0);
-		ASSERT_TRUE(toTest.empty());
-
 		return;
 	}
 
diff --git a/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp b/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
index 109afd0..16debc0 100644
--- a/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
+++ b/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
@@ -39,7 +39,7 @@
 		// Add structure types
 		vabElement.insertKey("structure", basyx::object::make_map());
 		vabElement.getProperty("structure").insertKey("map", basyx::object::make_map());
-		vabElement.getProperty("structure").insertKey("set", basyx::object::make_set<bool>());
+//		vabElement.getProperty("structure").insertKey("set", basyx::object::make_set<bool>());
 		vabElement.getProperty("structure").insertKey("list", basyx::object::make_list<int>());
 
 		// Add corner cases