diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/GenerateIntEnumInfo.h b/source/RobotAPI/libraries/aron/core/codegenerator/GenerateIntEnumInfo.h
index 832c3e47d08766a565ddb4dc297239da472d1d9a..e382b24225fc051ce7f8b402d73a640ec783b5ab 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/GenerateIntEnumInfo.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/GenerateIntEnumInfo.h
@@ -40,6 +40,9 @@ namespace armarx::aron::codegeneratorhelper
     public:
         std::string typeName;
         std::string definedIn;
+        std::string doc_brief;
+        std::string doc_author;
+        std::map<std::string, std::string> doc_values;
         typenavigator::IntEnumNavigatorPtr correspondingType;
     };
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/GenerateTypeInfo.h b/source/RobotAPI/libraries/aron/core/codegenerator/GenerateTypeInfo.h
index a029bca09d634f3565e89e7ef7d39eaee3af1201..c168b059222c9cbe3811b4c7bf4454647138b89f 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/GenerateTypeInfo.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/GenerateTypeInfo.h
@@ -41,7 +41,11 @@ namespace armarx::aron::codegeneratorhelper
     public:
         std::string typeName;
         std::string definedIn;
+        std::string doc_brief;
+        std::string doc_author;
+        std::map<std::string, std::string> doc_members;
         typenavigator::ObjectNavigatorPtr correspondingType;
+
         std::map<std::string, GenerateObjectInfoPtr> nestedObjects;
         std::map<std::string, GenerateIntEnumInfoPtr> nestedIntEnums;
     };
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h
index 7249a77170fd0f5c5e930d3d41ae465502ad3e96..790bb1e62538da3cdd0c25908118514f9be3cddd 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h
@@ -55,9 +55,9 @@ namespace armarx::aron::cppserializer
         virtual void resetSoft() = 0;
 
         /// Set members according to loaded data in ReaderInterface. If skip_first_readStartDict is true, we skip the first call of r.readStartDict() (It was already called outside. This is important for nested classes)
-        virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool skip_first_readStartDict) = 0;
+        virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool __aronIsMember) = 0;
 
         /// Set the data in WriterInterface to the values of this class. If a maybe type is null or false, this method calls w.writeNull().
-        virtual void write(armarx::aron::dataIO::WriterInterface& w) const = 0;
+        virtual void write(armarx::aron::dataIO::WriterInterface& w, bool __aronExtends) const = 0;
     };
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
index 86dc2874398a8bde89ae9224e4cdb8a6f47a83c7..89815a32fedbbc338c099ff1c56b07fdbf6c27ea 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
@@ -101,12 +101,12 @@ namespace armarx::aron::cppserializer
             auto serializer = std::make_shared<serializer::ObjectClassSerializer>(nav);
 
             CppClassPtr c = setupBasicCppClass(serializer->getFullCppTypename());
-            setupMemberFields(c, serializer);
+            setupMemberFields(c, publicGenerateObjectType->doc_members, serializer);
 
             if (nav->getExtends() != nullptr)
             {
                 auto extendsSerializer = std::make_shared<serializer::ObjectClassSerializer>(nav->getExtends());
-                c->addInherit(extendsSerializer->getFullCppTypename());
+                c->addInherit("public " + extendsSerializer->getFullCppTypename());
             }
             else
             {
@@ -115,9 +115,15 @@ namespace armarx::aron::cppserializer
             }
 
             // Add includes and guard
-            c->addClassDoc("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
-                           "!!!!!!AUTOGENERATED CLASS. Please do NOT edit. Instead, edit the corresponding .xml file!!!!!!\n"
-                           "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            std::string classDoc = "******************************************\n"
+                                   "* AUTOGENERATED CLASS. Please do NOT edit.\n"
+                                   "******************************************\n";
+            if (!publicGenerateObjectType->doc_author.empty() or !publicGenerateObjectType->doc_brief.empty())
+            {
+                classDoc += (publicGenerateObjectType->doc_brief.empty() ? "" : " * @brief " + publicGenerateObjectType->doc_brief + "\n");
+                classDoc += (publicGenerateObjectType->doc_author.empty() ? "" : " * @author " + publicGenerateObjectType->doc_author + "\n");
+            }
+            c->addClassDoc(classDoc);
             c->setPragmaOnceIncludeGuard(true);
             c->addInclude("<memory>");
             c->addInclude("<string>");
@@ -219,12 +225,20 @@ namespace armarx::aron::cppserializer
             auto serializer = std::make_shared<serializer::IntEnumClassSerializer>(nav);
 
             CppClassPtr c = setupBasicCppClass(serializer->getFullCppTypename());
-            setupMemberFields(c, serializer);
+            setupMemberFields(c, publicGenerateIntEnumType->doc_values, serializer);
 
             // Add includes and guard
-            c->addClassDoc("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
-                           "!!!!!!AUTOGENERATED CLASS. Please do NOT edit. Instead, edit the corresponding .xml file!!!!!!\n"
-                           "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            std::string classDoc = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+                                   "!!!!!!AUTOGENERATED CLASS. Please do NOT edit. Instead, edit the corresponding .xml file!!!!!!\n"
+                                   "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
+            if (!publicGenerateIntEnumType->doc_author.empty() or !publicGenerateIntEnumType->doc_brief.empty())
+            {
+                classDoc += "\n/**\n";
+                classDoc += (publicGenerateIntEnumType->doc_brief.empty() ? "" : " * @brief " + publicGenerateIntEnumType->doc_brief + "\n");
+                classDoc += (publicGenerateIntEnumType->doc_author.empty() ? "" : " * @author " + publicGenerateIntEnumType->doc_author + "\n");
+                classDoc += " */";
+            }
+            c->addClassDoc(classDoc);
             c->setPragmaOnceIncludeGuard(true);
             c->addInclude("<memory>");
             c->addInclude("<string>");
@@ -301,17 +315,27 @@ namespace armarx::aron::cppserializer
             auto serializer = std::make_shared<serializer::ObjectClassSerializer>(nav);
 
             CppClassPtr c = setupBasicCppClass(serializer->getFullCppTypename());
-            setupMemberFields(c, serializer);
+            setupMemberFields(c, localGenerateObjectType->doc_members, serializer);
 
             if (nav->getExtends() != nullptr)
             {
                 auto extendsSerializer = std::make_shared<serializer::ObjectClassSerializer>(nav->getExtends());
-                c->addInherit(extendsSerializer->getFullCppTypename());
+                c->addInherit("public " + extendsSerializer->getFullCppTypename());
             }
             else
             {
-                c->addInherit("virtual public armarx::aron::cppserializer::AronCppClass");
+                c->addInherit("public armarx::aron::cppserializer::AronCppClass");
+            }
+
+            std::string classDoc = "";
+            if (!localGenerateObjectType->doc_author.empty() or !localGenerateObjectType->doc_brief.empty())
+            {
+                classDoc += "/**\n";
+                classDoc += (localGenerateObjectType->doc_brief.empty() ? "" : " * @brief " + localGenerateObjectType->doc_brief + "\n");
+                classDoc += (localGenerateObjectType->doc_author.empty() ? "" : " * @author " + localGenerateObjectType->doc_author + "\n");
+                classDoc += " */";
             }
+            c->addClassDoc(classDoc);
 
             CppMethodPtr equals = serializer->toEqualsMethod();
             c->addMethod(equals);
@@ -351,20 +375,28 @@ namespace armarx::aron::cppserializer
         return c;
     }
 
-    void Writer::setupMemberFields(CppClassPtr& c, const serializer::ObjectClassSerializerPtr& o) const
+    void Writer::setupMemberFields(CppClassPtr& c, const std::map<std::string, std::string>& doc_members, const serializer::ObjectClassSerializerPtr& o) const
     {
         auto publicFields = o->getPublicVariableDeclarations("");
         for (const auto& f : publicFields)
         {
+            if (auto it = doc_members.find(f->getName()); it != doc_members.end())
+            {
+                f->setDoc("@brief " + it->second);
+            }
             c->addPublicField(f);
         }
     }
 
-    void Writer::setupMemberFields(CppClassPtr& c, const serializer::IntEnumClassSerializerPtr& o) const
+    void Writer::setupMemberFields(CppClassPtr& c, const std::map<std::string, std::string>& doc_members, const serializer::IntEnumClassSerializerPtr& o) const
     {
         auto publicFields = o->getPublicVariableDeclarations("");
         for (const auto& f : publicFields)
         {
+            if (auto it = doc_members.find(f->getName()); it != doc_members.end())
+            {
+                f->setDoc("@brief " + it->second);
+            }
             c->addPublicField(f);
         }
     }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.h
index d9b27c9fe82987a78724f7d837d9d3343a4af943..0cdc4c226afe5192988f34547abfe64e8687f075 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.h
@@ -64,8 +64,8 @@ namespace armarx::aron::cppserializer
         void generateInnerTypeObjects(CppClassPtr& classToAdd, const std::map<std::string, codegeneratorhelper::GenerateObjectInfoPtr>& localGenerateTypes);
 
         CppClassPtr setupBasicCppClass(const std::string&) const;
-        void setupMemberFields(CppClassPtr&, const serializer::ObjectClassSerializerPtr&) const;
-        void setupMemberFields(CppClassPtr&, const serializer::IntEnumClassSerializerPtr&) const;
+        void setupMemberFields(CppClassPtr&, const std::map<std::string, std::string>& doc_members, const serializer::ObjectClassSerializerPtr&) const;
+        void setupMemberFields(CppClassPtr&, const std::map<std::string, std::string>& doc_members, const serializer::IntEnumClassSerializerPtr&) const;
 
     private:
     };
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp
index 19220470403b00537971203580f336acb6105aa2..5169a4fcc46d3142ce61df9d717cc03942f62781 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.cpp
@@ -130,7 +130,7 @@ namespace armarx::aron::cppserializer
         return b;
     }
 
-    CppBlockPtr Serializer::ResolveMaybeReadBlock(const std::string& accessor, const std::string& readElement, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator)
+    CppBlockPtr Serializer::ResolveMaybeReadBlock(const std::string& accessor, const std::string& readElement, const CppBlockPtr& block_if_data, const typenavigator::NavigatorPtr& typenavigator, bool enforce_return_type)
     {
         std::string escaped_accessor = EscapeAccessor(accessor);
         std::string read_start_result_accessor = escaped_accessor + READ_START_RETURN_TYPE_ACCESSOR;
@@ -148,7 +148,14 @@ namespace armarx::aron::cppserializer
 
         if (!readElement.empty())
         {
-            resolved_block->addLine("auto " + read_start_result_accessor + " = " + readElement + "; // of " + accessor);
+            if (enforce_return_type or typenavigator->getMaybe() != type::Maybe::eNone)
+            {
+                resolved_block->addLine("auto " + read_start_result_accessor + " = " + readElement + "; // of " + accessor);
+            }
+            else
+            {
+                resolved_block->addLine(readElement + "; // of " + accessor);
+            }
         }
 
         if (typenavigator->getMaybe() != type::Maybe::eNone)
@@ -443,7 +450,7 @@ namespace armarx::aron::cppserializer
         doc << "@brief writeType() - This method returns a new type from the class structure using a type writer implementation. This function is static. \n";
         doc << "@return - the result of the writer implementation";
 
-        CppMethodPtr m = CppMethodPtr(new CppMethod("static void writeType(armarx::aron::typeIO::WriterInterface& w, armarx::aron::type::Maybe __aronMaybeType = armarx::aron::type::Maybe::eNone)", doc.str()));
+        CppMethodPtr m = CppMethodPtr(new CppMethod("static void writeType(armarx::aron::typeIO::WriterInterface& w, armarx::aron::type::Maybe __aronMaybeType = armarx::aron::type::Maybe::eNone, bool __aronExtends = false)", doc.str()));
         CppBlockPtr b = this->getWriteTypeBlock("");
         m->setBlock(b);
         return m;
@@ -456,7 +463,7 @@ namespace armarx::aron::cppserializer
         doc << "@param w - The writer implementation\n";
         doc << "@return - the result of the writer implementation";
 
-        CppMethodPtr m = CppMethodPtr(new CppMethod("virtual void write(armarx::aron::dataIO::WriterInterface& w) const override", doc.str()));
+        CppMethodPtr m = CppMethodPtr(new CppMethod("virtual void write(armarx::aron::dataIO::WriterInterface& w, bool __aronExtends = false) const override", doc.str()));
         CppBlockPtr b = this->getWriteBlock("");
         m->setBlock(b);
         return m;
@@ -469,7 +476,7 @@ namespace armarx::aron::cppserializer
         doc << "@param r - The reader implementation\n";
         doc << "@return - nothing";
 
-        CppMethodPtr m = CppMethodPtr(new CppMethod("virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool skip_first_readStartDict = false) override", doc.str()));
+        CppMethodPtr m = CppMethodPtr(new CppMethod("virtual void read(armarx::aron::dataIO::ReaderInterface& r, bool __aronIsMember = false) override", doc.str()));
         CppBlockPtr b = std::make_shared<CppBlock>();
         b->addLine("this->resetSoft();");
         b->appendBlock(this->getReadBlock(""));
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h
index ce4f11e9bc22d06d9d075f69d123127d50b9c70a..e7a544b8fb8342c0b83b0c27e4ecaf35e82ba933 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/Serializer.h
@@ -115,7 +115,7 @@ namespace armarx::aron::cppserializer
 
         static std::string ResolveMaybeAccessor(const std::string&, const typenavigator::NavigatorPtr&);
         static CppBlockPtr ResolveMaybeWriteBlock(const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&);
-        static CppBlockPtr ResolveMaybeReadBlock(const std::string&, const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&);
+        static CppBlockPtr ResolveMaybeReadBlock(const std::string&, const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&, bool enforce_return_type = false);
         static CppBlockPtr ResolveMaybeEqualsBlock(const std::string&, const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&);
         static CppBlockPtr ResolveMaybeResetSoftBlock(const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&);
         static CppBlockPtr ResolveMaybeResetHardBlock(const std::string&, const CppBlockPtr&, const typenavigator::NavigatorPtr&);
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp
index 10b3470db62c07bad810b95099bfab57568674b2..f494c591c7828dbd4435a02336a03d52361620ad 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Dict.cpp
@@ -113,7 +113,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp
index b0fb56473b5f2bb435365c45d9a5040f104bba24..8483320c75efeca4c8cf573358d04d0539fb36d4 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/List.cpp
@@ -103,7 +103,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp
index 1ffbe7db264f0e27a4b74da7c9e5533193003af1..49e06676e286dc773da88d6c12ab50062e2f1eb5 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Object.cpp
@@ -77,7 +77,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp
index 6f78c29962573fb4c617392fa2b48398637e5bef..c465862acc74bac36c8f9f8e1c1cbf3b341890e3 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Pair.cpp
@@ -117,7 +117,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp
index dab5b33a01a7bb3d12817645b60688ab930e8b2b..a6b5e2080e97d0514cbb4bbda9131adb68a3a860 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/container/Tuple.cpp
@@ -115,7 +115,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h
index 67b6c0435617cc7b4fcbebfe6bcadd604850794a..f0af4cfdd143da41629057e68a1291643b079eec 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/NDArraySerializerBase.h
@@ -43,5 +43,19 @@ namespace armarx::aron::cppserializer::detail
         NDArraySerializerBase(const std::string& cppName, const std::string& aronDataTypename, const std::string& aronTypeTypename, const typename TypenavigatorT::PointerType& t) :
             SerializerBase<TypenavigatorT, DerivedT>(cppName, aronDataTypename, aronTypeTypename, t)
         {}
+
+        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override
+        {
+            CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+            block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
+            return this->ResolveMaybeResetHardBlock(accessor, block_if_data, this->typenavigator);
+        }
+
+        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override
+        {
+            CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+            block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
+            return this->ResolveMaybeResetSoftBlock(accessor, block_if_data, this->typenavigator);
+        }
     };
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h
index 171f4defb27cff9a51217805f71d76fb58ca0da5..cf84eec049e341a83318dd3544fca0684e64236a 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/detail/PrimitiveSerializerBase.h
@@ -79,7 +79,7 @@ namespace armarx::aron::cppserializer::detail
         {
             CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
             block_if_data->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-            block_if_data->addLine("\t return false;");
+            block_if_data->addLineAsBlock("return false;");
             return this->ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, this->typenavigator);
         }
     };
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp
index e412f52b59bb3b53397439c7068338131493d60d..2ae444db3f04f48865dc7e9842d5ae521e17cd0b 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/enum/IntEnum.cpp
@@ -83,7 +83,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
         b->addLine("if (not (" + accessor + " == " + otherInstanceAccessor + "))");
-        b->addLine("\t return false;");
+        b->addLineAsBlock("return false;");
         return b;
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp
index 790d6157d4f28a33e983d0394a09448d818c6158..c59e70d713528f0db11d4bf0d2212f3f3b53de77 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.cpp
@@ -47,20 +47,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr EigenMatrixSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr EigenMatrixSerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr EigenMatrixSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
@@ -87,7 +73,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + ResolveMaybeAccessor(otherInstanceAccessor, typenavigator) + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h
index 9c2ecd36e588238923f539ebe364af57c3681f42..13e435bfeed1161f6a349eae2507828b6a39a31c 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenMatrix.h
@@ -46,8 +46,6 @@ namespace armarx::aron::cppserializer::serializer
         EigenMatrixSerializer(const typenavigator::EigenMatrixNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp
index 8e697ab6d64c9e425310b6927842d756ff96cae3..6594fd20bc9d0915cfb95ed45a1fe821f44a58eb 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.cpp
@@ -42,20 +42,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr EigenQuaternionSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr EigenQuaternionSerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr EigenQuaternionSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
@@ -82,7 +68,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h
index 3d756220f32d541d7f01fbadc11d597028322e3f..9a42c8cf67b3c67f9cb5664bd69a8ae2fc8d24dd 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/EigenQuaternion.h
@@ -40,7 +40,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<EigenQuaternionSerializer> EigenQuaternionSerializerPtr;
 
     class EigenQuaternionSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer>
     {
     public:
         using PointerType = EigenQuaternionSerializerPtr;
@@ -50,8 +50,6 @@ namespace armarx::aron::cppserializer::serializer
         EigenQuaternionSerializer(const typenavigator::EigenQuaternionNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp
index e33934d359e63943bea3a194f0a739ae5adf471b..4a986761bd57f9b7b2a2810fab8c19e5ffb43067 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.cpp
@@ -47,13 +47,6 @@ namespace armarx::aron::cppserializer::serializer
         }
     }
 
-    CppBlockPtr IVTCByteImageSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr IVTCByteImageSerializer::getResetSoftBlock(const std::string& accessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
@@ -84,16 +77,16 @@ namespace armarx::aron::cppserializer::serializer
 
         block_if_data->addLine(accessor + nextEl() + "Set(" + read_start_result_accessor + ".dims[0], " + read_start_result_accessor + ".dims[1], static_cast<CByteImage::ImageType>(std::stoi(" + read_start_result_accessor + ".type)));");
         block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "pixels)); // of " + accessor);
-        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
+        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator, true);
     }
 
     CppBlockPtr IVTCByteImageSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "IsCompatible(" + toPointerAccessor(otherInstanceAccessor) + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         block_if_data->addLine("if (not (memcmp(" + accessor + nextEl() + "pixels, " + otherInstanceAccessor + nextEl() + "pixels, " + accessor + nextEl() + "width * " + accessor + nextEl() + "height * " + accessor + nextEl() + "bytesPerPixel) == 0))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h
index 07e61842942c67a10bdef419596ae5580c352dfd..1be69bdef6815d3c09f7d0cf16a06d2dda5cd81e 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/IVTCByteImage.h
@@ -40,7 +40,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<IVTCByteImageSerializer> AronIVTCByteImageTypeCppSerializerPtr;
 
     class IVTCByteImageSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::IVTCByteImageNavigator, IVTCByteImageSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::IVTCByteImageNavigator, IVTCByteImageSerializer>
     {
     public:
         using PointerType = AronIVTCByteImageTypeCppSerializerPtr;
@@ -50,7 +50,6 @@ namespace armarx::aron::cppserializer::serializer
         IVTCByteImageSerializer(const typenavigator::IVTCByteImageNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp
index 67eb03720ef2650e14be2f0b4e0713dca4e2a010..dfd9e90c390c358aa1aba0fa6af2c3f843f6013a 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.cpp
@@ -35,20 +35,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr NDArraySerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr NDArraySerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr NDArraySerializer::getWriteTypeBlock(const std::string&) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.h
index 7785a7b0c30f6c3a34c6708f67b577d4cc27fd26..540b38d930ec9a2911c8bb058b856031cc430683 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/NDArray.h
@@ -39,7 +39,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<NDArraySerializer> AronNDArrayTypeCppSerializerPtr;
 
     class NDArraySerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::NDArrayNavigator, NDArraySerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::NDArrayNavigator, NDArraySerializer>
     {
     public:
         using PointerType = AronNDArrayTypeCppSerializerPtr;
@@ -49,8 +49,6 @@ namespace armarx::aron::cppserializer::serializer
         NDArraySerializer(const typenavigator::NDArrayNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp
index da0e3c01389ef54f1d3afbd97f6767112db70a24..37de66674278dc5a8439a2b06d3e634dab7e42ba 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.cpp
@@ -63,13 +63,6 @@ namespace armarx::aron::cppserializer::serializer
         return {b, accessor_dimensions};
     }
 
-    CppBlockPtr OpenCVMatSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr OpenCVMatSerializer::getResetSoftBlock(const std::string& accessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
@@ -117,14 +110,14 @@ namespace armarx::aron::cppserializer::serializer
         b2->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data)); // of " + accessor);
         block_if_data->addBlock(b2);
 
-        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
+        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator, true);
     }
 
     CppBlockPtr OpenCVMatSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (cv::countNonZero(" + accessor + " != " + otherInstanceAccessor + ") != 0)");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.h
index 4ed162490b73187359eecd5546115a37c0d4b01f..27ec677b25d20dab8d2e966ac6e0065ad1db98dd 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/OpenCVMat.h
@@ -50,7 +50,6 @@ namespace armarx::aron::cppserializer::serializer
         OpenCVMatSerializer(const typenavigator::OpenCVMatNavigatorPtr& n);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp
index c10d1adfb26b3462639d2aed861d0f2d22be2fca..c908a0c44a8b0d1d940b9a64be5e79558b1dc949 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp
@@ -35,20 +35,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr OrientationSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr OrientationSerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr OrientationSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
@@ -75,7 +61,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h
index df2349ca6ccb488131be4524eb17a63cc16874bd..ece7bb620a16d40184518585ed0b0592a8264639 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.h
@@ -39,7 +39,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<OrientationSerializer> AronOrientationTypeCppSerializerPtr;
 
     class OrientationSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::OrientationNavigator, OrientationSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::OrientationNavigator, OrientationSerializer>
     {
     public:
         using PointerType = AronOrientationTypeCppSerializerPtr;
@@ -49,8 +49,6 @@ namespace armarx::aron::cppserializer::serializer
         OrientationSerializer(const typenavigator::OrientationNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp
index 8229554f6542ce0fb91509ed32837df20e076ca4..5a6155b230e3fd5267ef30dcf665ca60df97ab1f 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.cpp
@@ -48,13 +48,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr PCLPointCloudSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr PCLPointCloudSerializer::getResetSoftBlock(const std::string& accessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
@@ -85,16 +78,17 @@ namespace armarx::aron::cppserializer::serializer
 
         block_if_data->addLine(accessor + " = " + getCoreCppTypename() + "(" + read_start_result_accessor + ".dims[0], " + read_start_result_accessor + ".dims[1]);");
         block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "points.data())); // of " + accessor);
-        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
+        return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator, true);
     }
 
     CppBlockPtr PCLPointCloudSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (" + accessor + nextEl() + "width != " + otherInstanceAccessor + nextEl() + "width || " + accessor + nextEl() + "height != " + otherInstanceAccessor + nextEl() + "height)");
-        block_if_data->addLine("\t return false;");
-        //b->addLine("if (" + accessor + "->points != " + otherInstanceAccessor + "->points)");
-        //b->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
+
+        //block_if_data->addLine("if (" + accessor + nextEl() + "points != " + otherInstanceAccessor + nextEl() + "points)");
+        //block_if_data->addLine("\t return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h
index 88d9b337b727e9f421a518e62ed7bc7df0f41284..3f182f4e24f775166a4e64d12f8933fffa771fc6 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/PCLPointCloud.h
@@ -39,7 +39,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<PCLPointCloudSerializer> AronPCLPointCloudTypeCppSerializerPtr;
 
     class PCLPointCloudSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::PCLPointCloudNavigator, PCLPointCloudSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::PCLPointCloudNavigator, PCLPointCloudSerializer>
     {
     public:
         using PointerType = AronPCLPointCloudTypeCppSerializerPtr;
@@ -49,7 +49,6 @@ namespace armarx::aron::cppserializer::serializer
         PCLPointCloudSerializer(const typenavigator::PCLPointCloudNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp
index 93e340f51c049d3cd1d6913ea74c32b1505f1e08..eccbbca04eeeced4c106707d5963222f0250db54 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.cpp
@@ -35,20 +35,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr PoseSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr PoseSerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr PoseSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
@@ -75,7 +61,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h
index 46e7b82a51ff696f2f1b853a2dc4b5deb2e29acd..45b8eb78c64e62a2ea7713ac977c9fb3e675de05 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Pose.h
@@ -39,7 +39,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<PoseSerializer> AronPoseTypeCppSerializerPtr;
 
     class PoseSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::PoseNavigator, PoseSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::PoseNavigator, PoseSerializer>
     {
     public:
         using PointerType = AronPoseTypeCppSerializerPtr;
@@ -49,8 +49,6 @@ namespace armarx::aron::cppserializer::serializer
         PoseSerializer(const typenavigator::PoseNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp
index b4409c2f9f226995c118deb33a8cb298462997cb..199c7e3053af9cc84016d14a320092667ce87c71 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.cpp
@@ -35,20 +35,6 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
-    CppBlockPtr PositionSerializer::getResetHardBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullTypenameGenerator() + "();");
-        return ResolveMaybeResetHardBlock(accessor, block_if_data, typenavigator);
-    }
-
-    CppBlockPtr PositionSerializer::getResetSoftBlock(const std::string& accessor) const
-    {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
-        block_if_data->addLine(accessor + " = " + this->getFullCppTypename() + "();");
-        return ResolveMaybeResetSoftBlock(accessor, block_if_data, typenavigator);
-    }
-
     CppBlockPtr PositionSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
@@ -75,7 +61,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h
index 1c2f17b9028670e8aa87b79aa30a50b55941baaf..acb8f9912f8169b161ccd5b6d80c30e546b7ec75 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Position.h
@@ -39,7 +39,7 @@ namespace armarx::aron::cppserializer::serializer
     typedef std::shared_ptr<PositionSerializer> AronPositionTypeCppSerializerPtr;
 
     class PositionSerializer :
-            virtual public detail::NDArraySerializerBase<typenavigator::PositionNavigator, PositionSerializer>
+        virtual public detail::NDArraySerializerBase<typenavigator::PositionNavigator, PositionSerializer>
     {
     public:
         using PointerType = AronPositionTypeCppSerializerPtr;
@@ -49,8 +49,6 @@ namespace armarx::aron::cppserializer::serializer
         PositionSerializer(const typenavigator::PositionNavigatorPtr&);
 
         // virtual implementations
-        virtual CppBlockPtr getResetHardBlock(const std::string& accessor) const override;
-        virtual CppBlockPtr getResetSoftBlock(const std::string& accessor) const override;
         virtual CppBlockPtr getWriteTypeBlock(const std::string&) const override;
         virtual CppBlockPtr getWriteBlock(const std::string&) const override;
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
index 6998d81b564e532f5f174c8c07db8b4b79b1f703..39f178fd00661fe78478ee3e74fe0872b2e762a5 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
@@ -117,7 +117,7 @@ namespace armarx::aron::cppserializer::serializer
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
         block_if_data->addLine("if (not (value == " + otherInstanceAccessor + ".value))");
-        block_if_data->addLine("\t return false;");
+        block_if_data->addLineAsBlock("return false;");
         return ResolveMaybeEqualsBlock(accessor, otherInstanceAccessor, block_if_data, typenavigator);
     }
 
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp
index e674c2445e24fa91af875bb81fbcd76e1d6d39d6..7653acba47e178b6337f8fbc9602037070b76836 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/ObjectClass.cpp
@@ -100,13 +100,15 @@ namespace armarx::aron::cppserializer::serializer
     CppBlockPtr ObjectClassSerializer::getWriteTypeBlock(const std::string&) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
+        b->addLine("w.writeStartObject({\"" + typenavigator->getObjectName() + "\", __aronMaybeType}); // of top level object " + getCoreCppTypename());
+
         if (typenavigator->getExtends() != nullptr)
         {
             const auto extends_s = FromAronTypeNaviagtorPtr(typenavigator->getExtends());
-            b->addLine(extends_s->getFullCppTypename() + "::writeType(w);");
+            b->addLine(extends_s->getFullCppTypename() + "::writeType(w, armarx::aron::type::Maybe::eNone, true);");
+            b->addLine("w.writeExtends();");
         }
 
-        b->addLine("w.writeStartObject({\"" + typenavigator->getObjectName() + "\", __aronMaybeType}); // of top level object " + getCoreCppTypename());
         for (const auto& [key, child] : typenavigator->getMemberTypes())
         {
             const auto child_s = FromAronTypeNaviagtorPtr(child);
@@ -115,20 +117,25 @@ namespace armarx::aron::cppserializer::serializer
             b->appendBlock(b2);
         }
 
-        b->addLine("w.writeEndObject(); // of top level object " + getCoreCppTypename());
+        b->addLine("if (!__aronExtends)");
+        b->addLineAsBlock("w.writeEndObject(); // of top level object " + getCoreCppTypename());
+
         return b;
     }
 
     CppBlockPtr ObjectClassSerializer::getWriteBlock(const std::string& accessor) const
     {
         CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+
+        block_if_data->addLine("if (!__aronExtends)");
+        block_if_data->addLineAsBlock("w.writeStartDict(); // of top level object " + getCoreCppTypename());
+
         if (typenavigator->getExtends() != nullptr)
         {
             const auto extends_s = FromAronTypeNaviagtorPtr(typenavigator->getExtends());
-            block_if_data->addLine(extends_s->getFullCppTypename() + "::write(w, aron_type);");
+            block_if_data->addLine(extends_s->getFullCppTypename() + "::write(w, true);");
         }
 
-        block_if_data->addLine("w.writeStartDict(); // of top level object " + getCoreCppTypename());
         for (const auto& [key, child] : typenavigator->getMemberTypes())
         {
             const auto child_s = FromAronTypeNaviagtorPtr(child);
@@ -138,7 +145,9 @@ namespace armarx::aron::cppserializer::serializer
             child_b->appendBlock(child_s->getWriteBlock(key));
             block_if_data->appendBlock(child_b);
         }
-        block_if_data->addLine("w.writeEndDict(); // of top level object " + getCoreCppTypename());
+
+        block_if_data->addLine("if (!__aronExtends)");
+        block_if_data->addLineAsBlock("w.writeEndDict(); // of top level object " + getCoreCppTypename());
         return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator);
     }
 
@@ -151,10 +160,8 @@ namespace armarx::aron::cppserializer::serializer
             block_if_data->addLine(extends_s->getFullCppTypename() + "::read(r);");
         }
 
-        block_if_data->addLine("if(!skip_first_readStartDict)");
-        auto readStartDict = std::make_shared<CppBlock>();
-        readStartDict->addLine("r.readStartDict(); // of top level object " + getCoreCppTypename());
-        block_if_data->addBlock(readStartDict);
+        block_if_data->addLine("if(!__aronIsMember)");
+        block_if_data->addLineAsBlock("r.readStartDict(); // of top level object " + getCoreCppTypename());
 
         for (const auto& [key, child] : typenavigator->getMemberTypes())
         {
@@ -173,7 +180,7 @@ namespace armarx::aron::cppserializer::serializer
         {
             const auto extends_s = FromAronTypeNaviagtorPtr(typenavigator->getExtends());
             block_if_data->addLine("if (not (" + extends_s->getFullCppTypename() + "::operator== (" + otherInstanceAccessor + ")))");
-            block_if_data->addLine("\t return false;");
+            block_if_data->addLineAsBlock("return false;");
         }
         for (const auto& [key, child] : typenavigator->getMemberTypes())
         {
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
index 852bf2bbd0217b7fd9452648203c9f64a8665c2c..35ac224587ed6fe83afcd7b3dca4f3f014375f65 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
@@ -77,6 +77,10 @@ namespace armarx::aron::xmltypereader
         static constexpr const char* RAW_PTR_NAME = "raw_ptr";
         static constexpr const char* SHARED_PTR_NAME = "shared_ptr";
         static constexpr const char* UNIQUE_PTR_NAME = "unique_ptr";
+        static constexpr const char* PACKAGE_NAME = "package";
+        static constexpr const char* DOC_BRIEF_NAME = "doc-brief";
+        static constexpr const char* DOC_AUTHOR_NAME = "doc-author";
+        static constexpr const char* DOC_PARAM_NAME = "doc-param";
 
         // Second level tags. Only important if in specific top level tag
         static constexpr const char* OBJECT_CHILD_TAG = "objectchild";
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp
index d37479515ef8b7d1d2a1397d5ae5c5d1b563cb99..7a89bb039550822a81f61e4ee1716f1e9c39688a 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.cpp
@@ -53,20 +53,13 @@ namespace armarx::aron::xmltypereader
     void Reader::parseFile(const std::filesystem::path& _file)
     {
         fs::path file = _file;
-        if (!file.empty() && file.is_relative())
-        {
-            if (std::optional<fs::path> resolved = detail::resolveRelativePackagePath(file))
-            {
-                file = resolved.value();
-            }
-        }
 
         RapidXmlReaderPtr reader = RapidXmlReader::FromFile(file.string());
-        parse(reader);
+        parse(reader, _file);
     }
 
     // private method reading nodes
-    void Reader::parse(const RapidXmlReaderPtr& reader)
+    void Reader::parse(const RapidXmlReaderPtr& reader, const std::filesystem::path& filePath)
     {
         RapidXmlReaderNode root = reader->getRoot();
 
@@ -129,7 +122,7 @@ namespace armarx::aron::xmltypereader
             std::vector<RapidXmlReaderNode> includes = children[cpp_includes_index].nodes();
             for (const auto& include : includes)
             {
-                this->codeIncludes.push_back(readCodeInclude(include));
+                this->codeIncludes.push_back(readCodeInclude(include, filePath));
             }
         }
 
@@ -139,7 +132,7 @@ namespace armarx::aron::xmltypereader
             for (const auto& aronInclude : children[include_aron_file_index].nodes())
             {
                 // right now unused
-                this->aronIncludes.push_back(readAronInclude(aronInclude));
+                this->aronIncludes.push_back(readAronInclude(aronInclude, filePath));
             }
         }
 
@@ -169,7 +162,7 @@ namespace armarx::aron::xmltypereader
         }
     }
 
-    std::string Reader::readCodeInclude(const RapidXmlReaderNode& node)
+    std::string Reader::readCodeInclude(const RapidXmlReaderNode& node, const std::filesystem::path& filePath)
     {
         Data::EnforceTagName(node, Data::INCLUDE_TAG);
         Data::EnforceAttribute(node, Data::INCLUDE_ATTRIBUTE_NAME);
@@ -177,29 +170,52 @@ namespace armarx::aron::xmltypereader
         return include;
     }
 
-    std::string Reader::readAronInclude(const RapidXmlReaderNode& node)
+    std::string Reader::readAronInclude(const RapidXmlReaderNode& node, const std::filesystem::path& filePath)
     {
         Data::EnforceTagName(node, Data::INCLUDE_TAG);
-        const std::string xmlinclude = Data::GetAttribute(node, Data::INCLUDE_ATTRIBUTE_NAME);
+        std::string specifiedPath = Data::GetAttribute(node, Data::INCLUDE_ATTRIBUTE_NAME);
+        specifiedPath = simox::alg::replace_all(specifiedPath, "<", "");
+        specifiedPath = simox::alg::replace_all(specifiedPath, ">", "");
+        const std::filesystem::path xmlincludepath(specifiedPath);
 
         // add logic to allow relative paths:
-        std::string xml_path = xmlinclude;
-        if (simox::alg::starts_with(xmlinclude, "Package: "))
+        std::filesystem::path resolved_absolute_path(xmlincludepath);
+        std::filesystem::path resolved_relative_path(xmlincludepath);
+
+        if (!xmlincludepath.empty() && xmlincludepath.is_relative())
         {
-            // TODO CMakePackageFinder:
+            if (std::optional<fs::path> resolvedPackagePath = resolveRelativePackagePath(xmlincludepath); resolvedPackagePath.has_value())
+            {
+                // check if relative path belongs to a package
+                resolved_absolute_path = resolvedPackagePath.value();
+                resolved_relative_path = xmlincludepath;
+            }
+            else
+            {
+                // perhaps the relative path is relative from file position?
+                // TODO: FixMe
+                resolved_absolute_path = filePath.parent_path() / xmlincludepath;
+                resolved_relative_path = filePath.parent_path() / xmlincludepath;
+
+                if (!fs::is_regular_file(resolved_absolute_path))
+                {
+                    throw error::AronException("Reader", "readAronInclude", "Could not find an aron XML file. Last path tried was: " + resolved_absolute_path.string());
+                }
+            }
         }
+        // else path is absolute
 
         // parse parent xml file and add objects to alreday known
         Reader anotherReader;
-        anotherReader.parseFile(xmlinclude);
+        anotherReader.parseFile(resolved_absolute_path);
 
         if (Data::HasAttribute(node, Data::AUTO_CODE_INCLUDE))
         {
-            std::string codeinclude = simox::alg::replace_last(xmlinclude, ".xml", ".aron.generated.h");
-            this->codeIncludes.push_back(codeinclude);
+            std::string codeinclude = simox::alg::replace_last(resolved_relative_path, ".xml", ".aron.generated.h");
+            this->codeIncludes.push_back("<" + codeinclude + ">");
         }
 
-        return xmlinclude;
+        return resolved_absolute_path.string();
     }
 
     typenavigator::ObjectNavigatorPtr Reader::readGenerateObject(const RapidXmlReaderNode& node) const
@@ -215,7 +231,7 @@ namespace armarx::aron::xmltypereader
     }
 
 
-    std::optional<fs::path> detail::resolveRelativePackagePath(const fs::path& path)
+    std::optional<fs::path> Reader::resolveRelativePackagePath(const fs::path& path)
     {
         const std::string package = *path.begin();
         armarx::CMakePackageFinder finder(package);
@@ -226,6 +242,7 @@ namespace armarx::aron::xmltypereader
                 fs::path absPath = includePath / path;
                 if (fs::is_regular_file(absPath))
                 {
+                    // path is valid
                     return absPath;
                 }
             }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h
index 387b2888dc23a44f3efebe832163a9888be249bc..c44f7d629fff62d5fb284dfe28445f4f7c4b9f5d 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Reader.h
@@ -54,21 +54,17 @@ namespace armarx::aron::xmltypereader
         virtual void parseFile(const std::filesystem::path&) override;
 
     private:
-        void parse(const RapidXmlReaderPtr& node);
+        void parse(const RapidXmlReaderPtr& node, const std::filesystem::path& filePath);
 
-        std::string readCodeInclude(const RapidXmlReaderNode& node);
-        std::string readAronInclude(const RapidXmlReaderNode& node);
+        std::string readCodeInclude(const RapidXmlReaderNode& node, const std::filesystem::path& filePath);
+        std::string readAronInclude(const RapidXmlReaderNode& node, const std::filesystem::path& filePath);
 
         typenavigator::ObjectNavigatorPtr readGenerateObject(const RapidXmlReaderNode& node) const;
         typenavigator::IntEnumNavigatorPtr readGenerateIntEnum(const RapidXmlReaderNode& node) const;
 
+        std::optional<std::filesystem::path> resolveRelativePackagePath(const std::filesystem::path& path);
+
     private:
         ReaderFactory factory;
     };
-
-
-    namespace detail
-    {
-        std::optional<std::filesystem::path> resolveRelativePackagePath(const std::filesystem::path& path);
-    }
 }
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp
index 6bc140e98a8d8ae555490e9c2b07b3360ac176cc..42c4ae9eea4efcd7dc3688164aec22bb49507959 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/ReaderFactory.cpp
@@ -135,6 +135,8 @@ namespace armarx::aron::xmltypereader
         auto newObject = std::make_shared<codegeneratorhelper::GenerateObjectInfo>();
         newObject->typeName = name;
         newObject->correspondingType = aronObjectType;
+        newObject->doc_brief = Data::GetAttributeWithDefault(node, Data::DOC_BRIEF_NAME, "");
+        newObject->doc_author = Data::GetAttributeWithDefault(node, Data::DOC_AUTHOR_NAME, "");
 
         if (extends != "")
         {
@@ -151,6 +153,11 @@ namespace armarx::aron::xmltypereader
             Data::EnforceAttribute(objectChild, Data::KEY_ATTRIBUTE_NAME);
             const std::string key = objectChild.attribute_value(Data::KEY_ATTRIBUTE_NAME);
 
+            if (Data::HasAttribute(objectChild, Data::DOC_BRIEF_NAME))
+            {
+                newObject->doc_members.insert({key, Data::GetAttribute(objectChild, Data::DOC_BRIEF_NAME)});
+            }
+
             std::vector<RapidXmlReaderNode> children = objectChild.nodes();
 
             auto maybe = GetMaybe(children[0]);
@@ -394,16 +401,21 @@ namespace armarx::aron::xmltypereader
         newEnumInfo->typeName = name;
         newEnumInfo->correspondingType = aronIntEnumType;
 
-        for (const RapidXmlReaderNode& objectChild : node.nodes())
+        for (const RapidXmlReaderNode& valueChild : node.nodes())
         {
-            Data::EnforceTagName(objectChild, Data::ENUM_VALUE_TAG);
-            Data::EnforceChildSize(objectChild, 0);
+            Data::EnforceTagName(valueChild, Data::ENUM_VALUE_TAG);
+            Data::EnforceChildSize(valueChild, 0);
 
-            Data::EnforceAttribute(objectChild, Data::KEY_ATTRIBUTE_NAME);
-            const std::string key = objectChild.attribute_value(Data::KEY_ATTRIBUTE_NAME);
+            Data::EnforceAttribute(valueChild, Data::KEY_ATTRIBUTE_NAME);
+            const std::string key = valueChild.attribute_value(Data::KEY_ATTRIBUTE_NAME);
+
+            if (Data::HasAttribute(valueChild, Data::DOC_BRIEF_NAME))
+            {
+                newEnumInfo->doc_values.insert({key, Data::GetAttribute(valueChild, Data::DOC_BRIEF_NAME)});
+            }
 
-            Data::EnforceAttribute(objectChild, Data::VALUE_ATTRIBUTE_NAME);
-            const std::string value = objectChild.attribute_value(Data::VALUE_ATTRIBUTE_NAME);
+            Data::EnforceAttribute(valueChild, Data::VALUE_ATTRIBUTE_NAME);
+            const std::string value = valueChild.attribute_value(Data::VALUE_ATTRIBUTE_NAME);
 
             aronIntEnumType->addAcceptedValue(key, std::stoi(value));
         }
diff --git a/source/RobotAPI/libraries/aron/core/io/Data.h b/source/RobotAPI/libraries/aron/core/io/Data.h
index 6f9fe8ca878a6f7a8f697af1295fd6f0ccbe581b..e1c3cfcf026ba5019d5147e9c00cc2335c717065 100644
--- a/source/RobotAPI/libraries/aron/core/io/Data.h
+++ b/source/RobotAPI/libraries/aron/core/io/Data.h
@@ -46,6 +46,7 @@ namespace armarx::aron::io
         static constexpr const char* READER_WRITER_VALUE_SLUG = "__ARON_VALUE";
 
         static constexpr const char* READER_WRITER_OBJECT_NAME_SLUG = "__ARON_OBJECT_NAME";
+        static constexpr const char* READER_WRITER_OBJECT_EXTENDS_SLUG = "__ARON_OBJECT_EXTENDS";
 
         static constexpr const char* READER_WRITER_DICT_ACCEPTED_TYPE_SLUG = "__ARON_DICT_ACCEPTED_TYPE";
         static constexpr const char* READER_WRITER_LIST_ACCEPTED_TYPE_SLUG = "__ARON_LIST_ACCEPTED_TYPE";
diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/Writer.h b/source/RobotAPI/libraries/aron/core/io/typeIO/Writer.h
index 7dc762492105af180e30773518b3b8ef1eaae963..db7b4ed1adc62ea9962bd14ce9993be51bb0cbec 100644
--- a/source/RobotAPI/libraries/aron/core/io/typeIO/Writer.h
+++ b/source/RobotAPI/libraries/aron/core/io/typeIO/Writer.h
@@ -141,5 +141,6 @@ namespace armarx::aron::typeIO
         virtual void writeTime(const WritePrimitiveInput&) = 0;
 
         virtual void writeKey(const std::string&) = 0;
+        virtual void writeExtends() = 0;
     };
 }
diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.cpp b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.cpp
index 9693eb6851131add3d419b8ecb55c15cc43518db..6a23d549a4ea915cfecc8e7645c88c7945355797 100644
--- a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.cpp
+++ b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.cpp
@@ -299,4 +299,20 @@ namespace armarx::aron::typeIO::writer
         auto token = stack.top();
         token->setCurrentKey(k);
     }
+
+    void NavigatorWriter::writeExtends()
+    {
+        if (stack.size() < 2)
+        {
+            throw error::SizeNotValidException("NavigatorWriter", "writeExtends", "The stacksize must at least be 2 (one for base, one for derived)", stack.size(), 2);
+        }
+
+        auto base = stack.top();
+        stack.pop();
+        auto derived = stack.top();
+
+        auto base_obj = typenavigator::ObjectNavigator::DynamicCastAndCheck(base->getElement());
+        auto derived_obj = typenavigator::ObjectNavigator::DynamicCastAndCheck(derived->getElement());
+        derived_obj->setExtends(base_obj);
+    }
 }
diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.h b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.h
index b15ab9e9b35fb140869017c2399f4e7345eda226..2586935e519799b7f7dd9c3f971a45bc4ab45d8f 100644
--- a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.h
+++ b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/navigator/NavigatorWriter.h
@@ -72,6 +72,7 @@ namespace armarx::aron::typeIO::writer
         virtual void writeTime(const WritePrimitiveInput&) override;
 
         virtual void writeKey(const std::string&) override;
+        virtual void writeExtends() override;
 
         typenavigator::NavigatorPtr getResult() const
         {
diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.cpp b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.cpp
index 1ce3afe2394a3a20aa89948db49f97493d45865f..7a4359559aaf5169ef1bdac195937d540e8b3646 100644
--- a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.cpp
+++ b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.cpp
@@ -271,4 +271,28 @@ namespace armarx::aron::typeIO::writer
         auto token = stack.top();
         token->setCurrentKey(k);
     }
+
+    void NlohmannJSONWriter::writeExtends()
+    {
+        if (stack.size() < 2)
+        {
+            throw error::SizeNotValidException("NavigatorWriter", "writeExtends", "The stacksize must at least be 2 (one for base, one for derived)", stack.size(), 2);
+        }
+
+        auto base = stack.top();
+        stack.pop();
+        auto derived = stack.top();
+
+        if (!base->getElement().is_object())
+        {
+            throw error::AronException("NlohmannJSONWriter", "writeExtends", "Could not inherit from a non-object.");
+        }
+
+        if (!derived->getElement().is_object())
+        {
+            throw error::AronException("NlohmannJSONWriter", "writeExtends", "Could not inherit a non-object.");
+        }
+
+        derived->getElement()[io::Data::READER_WRITER_OBJECT_EXTENDS_SLUG] = base->getElement();
+    }
 }
diff --git a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.h b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.h
index 3be0f4a1329aca74ad3c19710736a86f1c542582..055a493c878fbb76b4fed7dc41d08e680a71d976 100644
--- a/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.h
+++ b/source/RobotAPI/libraries/aron/core/io/typeIO/writer/nlohmannJSON/NlohmannJSONWriter.h
@@ -69,6 +69,7 @@ namespace armarx::aron::typeIO::writer
         virtual void writeTime(const WritePrimitiveInput&) override;
 
         virtual void writeKey(const std::string&) override;
+        virtual void writeExtends() override;
 
         nlohmann::json getResult() const
         {
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
index 269ec6e20d39a25eefad600651dd9e7e19009062..05a47b98a4fd2b406ed59a058b30635a1bd29abd 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
@@ -74,6 +74,19 @@ namespace armarx::aron::typenavigator
     }
 
     // public member functions
+    std::map<std::string, NavigatorPtr> ObjectNavigator::getAllMemberTypes() const
+    {
+        std::map<std::string, NavigatorPtr> ret = memberTypes;
+        if (extends)
+        {
+            for (const auto& [key, t] : extends->getMemberTypes())
+            {
+                ret.insert({key, t});
+            }
+        }
+        return ret;
+    }
+
     std::map<std::string, NavigatorPtr> ObjectNavigator::getMemberTypes() const
     {
         return memberTypes;
@@ -81,10 +94,14 @@ namespace armarx::aron::typenavigator
 
     NavigatorPtr ObjectNavigator::getMemberType(const std::string& s) const
     {
-        if (memberTypes.find(s) == memberTypes.end())
+        if (memberTypes.find(s) == memberTypes.end() and !extends->hasMemberType(s))
         {
             throw error::StringNotValidException("ObjectNavigator", "getMemberType", "Member not set. The list of all members is: " + simox::alg::to_string(simox::alg::get_keys(memberTypes)), s);
         }
+        if (memberTypes.find(s) == memberTypes.end())
+        {
+            return extends->getMemberType(s);
+        }
         return memberTypes.at(s);
     }
 
@@ -117,7 +134,7 @@ namespace armarx::aron::typenavigator
 
     bool ObjectNavigator::hasMemberType(const std::string& k) const
     {
-        return memberTypes.count(k) > 0;
+        return memberTypes.count(k) > 0 or (extends && extends->hasMemberType(k));
     }
 
     std::string ObjectNavigator::getObjectName() const
@@ -137,6 +154,13 @@ namespace armarx::aron::typenavigator
         {
             ret.push_back(k);
         }
+        if (extends)
+        {
+            for (const auto& s : extends->getAllKeys())
+            {
+                ret.push_back(s);
+            }
+        }
         return ret;
     }
 
@@ -158,6 +182,13 @@ namespace armarx::aron::typenavigator
         {
             ret.push_back(t);
         }
+        if (extends)
+        {
+            for (const auto& t : extends->getChildren())
+            {
+                ret.push_back(t);
+            }
+        }
         return ret;
     }
 
@@ -168,7 +199,7 @@ namespace armarx::aron::typenavigator
 
     std::string ObjectNavigator::getName() const
     {
-        return "AronObjectType<" + this->aron->objectName + ">";
+        return "AronObjectType<" + this->aron->objectName + (extends ? (" : " + extends->getName()) : "") + ">";
     }
 }
 
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.h b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.h
index f3f9255646e22b826909ecc460a920a0b6071f97..71268a91ebf928b13a1347c778f758c43e756ace 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.h
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.h
@@ -37,7 +37,7 @@ namespace armarx::aron::typenavigator
     typedef std::shared_ptr<ObjectNavigator> ObjectNavigatorPtr;
 
     class ObjectNavigator :
-            virtual public detail::ContainerNavigatorBase<type::AronObject, ObjectNavigator>
+        virtual public detail::ContainerNavigatorBase<type::AronObject, ObjectNavigator>
     {
     public:
         // constructors
@@ -51,6 +51,7 @@ namespace armarx::aron::typenavigator
         // public member functions
         bool checkObjectName(const std::string&) const;
 
+        std::map<std::string, NavigatorPtr> getAllMemberTypes() const;
         std::map<std::string, NavigatorPtr> getMemberTypes() const;
         NavigatorPtr getMemberType(const std::string&) const;
         std::string getObjectName() const;
diff --git a/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt b/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt
index 239c92ecff42e75ea7be37b5e43c8d442983f678..9ea4438bbe3381ee9c92ae3cd4d6c656606e916c 100644
--- a/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt
+++ b/source/RobotAPI/libraries/aron/core/test/CMakeLists.txt
@@ -44,22 +44,22 @@ armarx_add_test(
     ARON_FILES
         # xmls/BaseClass.xml
         # xmls/DerivedClassTest.xml
-        xmls/DictTest.xml
-        xmls/EigenMatrixTest.xml
-        xmls/EigenQuaternionTest.xml
-        xmls/EnumTest.xml
-        xmls/HumanPoseTest.xml
-        xmls/IVTCByteImageTest.xml
-        xmls/ListTest.xml
-        xmls/NaturalIKTest.xml
-        xmls/ObjectTest.xml
-        xmls/OpenCVMatTest.xml
-        xmls/OrientationTest.xml
-        xmls/PCLPointCloudTest.xml
-        xmls/PoseTest.xml
-        xmls/PositionTest.xml
-        xmls/PrimitiveTest.xml
-        xmls/OptionalTest.xml
+        aron/DictTest.xml
+        aron/EigenMatrixTest.xml
+        aron/EigenQuaternionTest.xml
+        aron/EnumTest.xml
+        aron/HumanPoseTest.xml
+        aron/IVTCByteImageTest.xml
+        aron/ListTest.xml
+        aron/NaturalIKTest.xml
+        aron/ObjectTest.xml
+        aron/OpenCVMatTest.xml
+        aron/OrientationTest.xml
+        aron/PCLPointCloudTest.xml
+        aron/PoseTest.xml
+        aron/PositionTest.xml
+        aron/PrimitiveTest.xml
+        aron/OptionalTest.xml
     INCLUDE_DIRECTORIES
         ${Simox_INCLUDE_DIR}
         ${Eigen3_INCLUDE_DIR}
@@ -81,11 +81,29 @@ armarx_add_test(
         ArmarXCore
         RobotAPI::aron
     ARON_FILES
-        xmls/NaturalIKTest.xml
+        aron/NaturalIKTest.xml
     INCLUDE_DIRECTORIES
         ${Simox_INCLUDE_DIR}
 )
 
+######################
+# ARON EXTENDS TEST  #
+######################
+armarx_add_test(
+    TEST_NAME
+        aronExtendsTest
+    TEST_FILE
+        aronExtendsTest.cpp
+    LIBS
+        Simox::SimoxUtility
+        ArmarXCore
+        RobotAPI::aron
+    ARON_FILES
+        aron/BaseClassTest.xml
+        aron/DerivedClassTest.xml
+    INCLUDE_DIRECTORIES
+        ${Simox_INCLUDE_DIR}
+)
 
 ########################
 # ARON RANDOMIZED TEST #
@@ -103,24 +121,22 @@ armarx_add_test(
         ivtopencv
         ${PCL_COMMON_LIBRARIES}
     ARON_FILES
-        # xmls/BaseClass.xml
-        # xmls/DerivedClassTest.xml
-        xmls/DictTest.xml
-        xmls/EigenMatrixTest.xml
-        xmls/EigenQuaternionTest.xml
-        xmls/EnumTest.xml
-        xmls/HumanPoseTest.xml
-        xmls/IVTCByteImageTest.xml
-        xmls/ListTest.xml
-        xmls/NaturalIKTest.xml
-        xmls/ObjectTest.xml
-        xmls/OpenCVMatTest.xml
-        xmls/OrientationTest.xml
-        xmls/PCLPointCloudTest.xml
-        xmls/PoseTest.xml
-        xmls/PositionTest.xml
-        xmls/PrimitiveTest.xml
-        xmls/OptionalTest.xml
+        aron/DictTest.xml
+        aron/EigenMatrixTest.xml
+        aron/EigenQuaternionTest.xml
+        aron/EnumTest.xml
+        aron/HumanPoseTest.xml
+        aron/IVTCByteImageTest.xml
+        aron/ListTest.xml
+        aron/NaturalIKTest.xml
+        aron/ObjectTest.xml
+        aron/OpenCVMatTest.xml
+        aron/OrientationTest.xml
+        aron/PCLPointCloudTest.xml
+        aron/PoseTest.xml
+        aron/PositionTest.xml
+        aron/PrimitiveTest.xml
+        aron/OptionalTest.xml
     INCLUDE_DIRECTORIES
         ${Simox_INCLUDE_DIR}
         ${Eigen3_INCLUDE_DIR}
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/BaseClass.xml b/source/RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml
similarity index 66%
rename from source/RobotAPI/libraries/aron/core/test/xmls/BaseClass.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml
index 57d4e6951e98ccb690b8e2c61e6730c067cf01e0..089b6fdfe8b56088c2b74ce2afd7717933cd7fc8 100644
--- a/source/RobotAPI/libraries/aron/core/test/xmls/BaseClass.xml
+++ b/source/RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml
@@ -2,28 +2,25 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <AronTypeDefinition>
     <GenerateTypes>
-        <GenerateObject name='armarx::BaseClassTest'>
-
-            <ObjectChild key='base_class_member1'>
+        <Object name='armarx::BaseClassTest' doc-brief="A base class for the tests" doc-author="fabian.peller-konrad@kit.edu">
+            <ObjectChild key='base_class_member1' doc-brief="This is a a fancy bool. Only set this if needed...">
                 <Bool />
             </ObjectChild>
 
             <ObjectChild key='base_class_member2'>
                 <List>
-                    <Type>
-                        <Float />
-                    </Type>
+                    <Float />
                 </List>
             </ObjectChild>
- 
+
             <ObjectChild key='base_class_member3'>
                 <Object name="InnerClass">
                     <ObjectChild key="inner_class_member">
                         <Bool />
                     </ObjectChild>
-                </List>
+                </Object>
             </ObjectChild>
 
-        </GenerateObject>
+        </Object>
     </GenerateTypes>
 </AronTypeDefinition>
diff --git a/source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fba1b8461bb41ffe9af7b62d044f6adf5aaea130
--- /dev/null
+++ b/source/RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.xml
@@ -0,0 +1,16 @@
+<!--This class contains the data structure for NaturalIKResults -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<AronTypeDefinition>
+    <AronIncludes>
+        <Include include="<RobotAPI/libraries/aron/core/test/aron/BaseClassTest.xml>" autoinclude="true" />
+    </AronIncludes>
+    <GenerateTypes>
+        <Object name='armarx::DerivedClassTest' extends="armarx::BaseClassTest" doc-brief="This is a brief doc" doc-author="Itse me, Mario!">
+
+            <ObjectChild key='derived_class_member1' doc-brief="This is a member doc string">
+                <Int />
+            </ObjectChild>
+
+        </Object>
+    </GenerateTypes>
+</AronTypeDefinition>
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/DictTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/DictTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/DictTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/DictTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/EigenMatrixTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/EigenMatrixTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/EigenMatrixTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/EigenMatrixTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/EigenQuaternionTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/EigenQuaternionTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/EigenQuaternionTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/EigenQuaternionTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/EnumTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/EnumTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/EnumTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/EnumTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/HumanPoseTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/HumanPoseTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/HumanPoseTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/HumanPoseTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/aron/IKResult.xml b/source/RobotAPI/libraries/aron/core/test/aron/IKResult.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b382f9e9369e6833c88b10da32734f67bf5ccb7e
--- /dev/null
+++ b/source/RobotAPI/libraries/aron/core/test/aron/IKResult.xml
@@ -0,0 +1,17 @@
+<!--This class contains the data structure for NaturalIKResults -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<AronTypeDefinition>
+    <GenerateTypes>
+        <Object name='armarx::IKResult'>
+
+            <ObjectChild key='name'>
+                <String />
+            </ObjectChild>
+
+        </Object>
+    </GenerateTypes>
+</AronTypeDefinition>
+
+
+
+
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/IVTCByteImageTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/IVTCByteImageTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/IVTCByteImageTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/ListTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/ListTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/ListTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/ListTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/NaturalIKTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.xml
similarity index 57%
rename from source/RobotAPI/libraries/aron/core/test/xmls/NaturalIKTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.xml
index 06dc659d12d955b30b2113ffe7125e2320d96127..769a899a51e82d2c25e533b96bd1054f66565eef 100644
--- a/source/RobotAPI/libraries/aron/core/test/xmls/NaturalIKTest.xml
+++ b/source/RobotAPI/libraries/aron/core/test/aron/NaturalIKTest.xml
@@ -2,7 +2,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <AronTypeDefinition>
     <GenerateTypes>
+        <IntEnum name="armarx::NaturalIKControlMode">
+            <EnumValue key="CONTROL_MODE_0" value="0" />
+            <EnumValue key="CONTROL_MODE_1" value="1" />
+            <EnumValue key="CONTROL_MODE_2" value="2" />
+        </IntEnum>
+
         <Object name='armarx::NaturalIKResult'>
+            <ObjectChild key='control_mode'>
+                <armarx::NaturalIKControlMode />
+            </ObjectChild>
 
             <ObjectChild key='reached'>
                 <Bool />
@@ -13,7 +22,10 @@
                     <Float />
                 </List>
             </ObjectChild>
-
         </Object>
     </GenerateTypes>
 </AronTypeDefinition>
+
+
+
+
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/ObjectTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/ObjectTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/ObjectTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/ObjectTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/OpenCVMatTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/OpenCVMatTest.xml
similarity index 95%
rename from source/RobotAPI/libraries/aron/core/test/xmls/OpenCVMatTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/OpenCVMatTest.xml
index c5cfb1e95c41d72790a7a6a65b5d028adbeb0576..f4179798c6ed36ee9f48373ebe57c921bfcf448d 100644
--- a/source/RobotAPI/libraries/aron/core/test/xmls/OpenCVMatTest.xml
+++ b/source/RobotAPI/libraries/aron/core/test/aron/OpenCVMatTest.xml
@@ -4,8 +4,6 @@
     <CodeIncludes>
         <Include include="<opencv2/core/core.hpp>" />
     </CodeIncludes>
-    <AronIncludes>
-    </AronIncludes>
     <GenerateTypes>
         <Object name='armarx::OpenCVMatTest'>
             <ObjectChild key='the_2d_opencv_matrix'>
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/OptionalTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/OptionalTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/OptionalTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/OrientationTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/OrientationTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/OrientationTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/OrientationTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/PCLPointCloudTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/PCLPointCloudTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/PCLPointCloudTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/PCLPointCloudTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/PoseTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/PoseTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/PoseTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/PoseTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/PositionTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/PositionTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/PositionTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/PositionTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/PrimitiveTest.xml b/source/RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.xml
similarity index 100%
rename from source/RobotAPI/libraries/aron/core/test/xmls/PrimitiveTest.xml
rename to source/RobotAPI/libraries/aron/core/test/aron/PrimitiveTest.xml
diff --git a/source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp b/source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c9feaee398008091d3ef9e97161fec750e0b95ac
--- /dev/null
+++ b/source/RobotAPI/libraries/aron/core/test/aronExtendsTest.cpp
@@ -0,0 +1,85 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * ArmarX 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::aron
+ * @author     Simon Ottenhaus ( simon dot ottenhaus at kit dot edu )
+ * @date       2019
+ * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
+ *             GNU General Public License
+ */
+
+#define BOOST_TEST_MODULE RobotAPI::ArmarXLibraries::aron
+
+#define ARMARX_BOOST_TEST
+
+// STD/STL
+#include <iostream>
+#include <cstdlib>
+#include <ctime>
+#include <numeric>
+
+// Boost
+#include <boost/algorithm/string.hpp>
+
+// Test
+#include <RobotAPI/Test.h>
+
+// ArmarX
+#include <ArmarXCore/libraries/cppgen/CppMethod.h>
+#include <ArmarXCore/libraries/cppgen/CppClass.h>
+#include <RobotAPI/libraries/aron/core/Exception.h>
+
+// Aron
+#include <RobotAPI/libraries/aron/core/Debug.h>
+#include <RobotAPI/libraries/aron/core/navigator/data/AllNavigators.h>
+
+// Generated File
+#include <RobotAPI/libraries/aron/core/test/aron/BaseClassTest.aron.generated.h>
+#include <RobotAPI/libraries/aron/core/test/aron/DerivedClassTest.aron.generated.h>
+
+using namespace armarx;
+using namespace aron;
+
+BOOST_AUTO_TEST_CASE(AronExtendsTest)
+{
+    std::cout << "Aron extends test" << std::endl;
+    BaseClassTest base;
+    auto baseType = base.toAronType();
+
+    DerivedClassTest derived;
+    auto derivedType = derived.toAronType();
+
+    for (const auto& [key, value] : baseType->getMemberTypes())
+    {
+        BOOST_CHECK_EQUAL(derivedType->hasMemberType(key), true);
+        //BOOST_CHECK_EQUAL(value == derivedType->getMemberType(key), true);
+    }
+
+    derived.base_class_member1 = false;
+    derived.base_class_member2 = {1.0, 2.5, 3.8};
+    derived.base_class_member3.inner_class_member = true;
+
+    auto derivedAron = derived.toAron();
+    //BOOST_CHECK_EQUAL(derivedAron->fullfillsType(baseType), true);
+
+    BaseClassTest& casted = static_cast<BaseClassTest&>(derived);
+    BOOST_CHECK_EQUAL(casted.base_class_member1 == derived.base_class_member1, true);
+    BOOST_CHECK_EQUAL(casted.base_class_member2 == derived.base_class_member2, true);
+    BOOST_CHECK_EQUAL(casted.base_class_member3.inner_class_member == derived.base_class_member3.inner_class_member, true);
+
+    DerivedClassTest& casted_back = dynamic_cast<DerivedClassTest&>(casted);
+    BOOST_CHECK_EQUAL(casted_back == derived, true);
+}
+
diff --git a/source/RobotAPI/libraries/aron/core/test/xmls/DerivedClassTest.xml b/source/RobotAPI/libraries/aron/core/test/xmls/DerivedClassTest.xml
deleted file mode 100644
index de4be250d23c90f27d8198d890e7ef0576d672cb..0000000000000000000000000000000000000000
--- a/source/RobotAPI/libraries/aron/core/test/xmls/DerivedClassTest.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--This class contains the data structure for NaturalIKResults -->
-<?xml version="1.0" encoding="UTF-8" ?>
-<AronTypeDefinition>
-    <CodeIncludes>
-        <Include include="<RobotAPI/libraries/aron/test/aron/BaseClass.aron.generated.h>" />
-    </CodeIncludes>
-    <AronIncludes>
-        <Include include="/home/fabian/Software/ArmarX/RobotAPI/source/RobotAPI/libraries/aron/test/xmls/BaseClass.xml" />
-    </AronIncludes>
-    <GenerateTypes>
-        <GenerateObject name='armarx::DerivedClass' extends="armarx::BaseClassTest">
-
-            <ObjectChild key='derived_class_member1'>
-                <Bool />
-            </ObjectChild>
-
-        </GenerateObject>
-    </GenerateTypes>
-</AronTypeDefinition>