diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
index 9b84c82045ae7ca1393a3c06861a3431a2c4fc8d..41efdfdf126f743d41874df53acafa2e3cab6ed7 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
@@ -44,7 +44,7 @@ namespace armarx::aron::codegenerator::cpp::generator
             "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">",
             "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">",
             simox::meta::get_type_name<data::dto::NDArray>(),
-            simox::meta::get_type_name<type::dto::Matrix>(), n), matrixType(n)
+            simox::meta::get_type_name<type::dto::Matrix>(), n)
     {
     }
 
@@ -101,14 +101,25 @@ namespace armarx::aron::codegenerator::cpp::generator
         block_if_data->addLine("std::string " + type + ";");
         block_if_data->addLine("std::vector<int> " + dims + ";");
         block_if_data->addLine("std::vector<unsigned char> " + data + ";");
+
         block_if_data->addLine("" + ARON_READER_ACCESSOR + ".readNDArray("+variantAccessor+", "+dims+", "+type+", "+data+"); // of " + cppAccessor);
-        
-        if(matrixType.getRows() == Eigen::Dynamic or matrixType.getCols() == Eigen::Dynamic)
+
+        if((this->type.getRows() == -1 or this->type.getRows() == Eigen::Dynamic) and this->type.getCols() != -1)
+        {
+            block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(0));");
+        }
+
+        if(this->type.getRows() != -1 and (this->type.getCols() == -1 or this->type.getCols() == Eigen::Dynamic))
+        {
+            block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(1));");
+        }
+
+        if((this->type.getRows() == -1 or this->type.getRows() == Eigen::Dynamic) and (this->type.getCols() == -1 or this->type.getCols() == Eigen::Dynamic))
         {
-            // TODO  assert(aron_variant_kpImpedance_shape.size() == 2);
             block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(0), " + dims + ".at(1));");
         }
 
+        block_if_data->addLine("assert(" + cppAccessor + nextEl() + "rows() == " + dims + ".at(0) && " + cppAccessor + nextEl() + "cols() == " + dims + ".at(1) && \"Dimensions of member '"+cppAccessor+"' do not match (simox::alg::to_string(dims, ',')). Got (" + cppAccessor + nextEl() + "rows(), " + cppAccessor + nextEl() + "cols()) instead.\");");
         block_if_data->addLine("std::memcpy(reinterpret_cast<unsigned char*>(" + cppAccessor + nextEl() + "data()), "+data+".data(), "+data+".size());");
         return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor);
     }
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
index 8c8c246067941510770cbf07e440b514bffd6437..9f56f2b986f199af4e662e342b5f7dc7040d778b 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
@@ -47,8 +47,5 @@ namespace armarx::aron::codegenerator::cpp::generator
         CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final;
         CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final;
         CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final;
-
-    private:
-        const type::Matrix matrixType;
     };
 }
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp
index 0d54dc8bf173b1262ecbc938a6c1678fb1dff8b2..6fef11afdd2490524ad8738748ffb0b35b9c99fd 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/ObjectClass.cpp
@@ -213,8 +213,10 @@ namespace armarx::aron::codegenerator::cpp::generator
         for (const auto& [key, child] : type.getMemberTypes())
         {
             const auto child_s = FromAronType(*child);
-            const std::string child_variant_accessor = OBJECT_MEMBERS_ACCESSOR + ".at(\"" + key + "\")";
-            block_if_data->appendBlock(child_s->getReadBlock(key, child_variant_accessor));
+            std::string child_accessor = OBJECT_MEMBERS_ACCESSOR + "_" + key + "_iterator";
+            block_if_data->addLine("auto " + child_accessor + " = " + OBJECT_MEMBERS_ACCESSOR + ".find(\"" + key + "\");");
+            block_if_data->addLine("assert(" + child_accessor + " != " + OBJECT_MEMBERS_ACCESSOR + ".end() && \"Missing member '" + key + "' in aron object '" + getFullClassCppTypename() + "'.\");");
+            block_if_data->appendBlock(child_s->getReadBlock(key, child_accessor + "->second"));
         }
         return block_if_data;
     }
diff --git a/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h b/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h
index 552c653a9bb983f1066a7ef87737fa69377c8a8a..a076cdc16d31c312ca9b16b3735a9f0bf2c25474 100644
--- a/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h
+++ b/source/RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h
@@ -28,6 +28,7 @@
 #include <string>
 #include <vector>
 #include <map>
+#include <cassert>
 
 // ArmarX
 #include <RobotAPI/libraries/aron/core/Exception.h>
diff --git a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp
index adebe071119ad34b1c64e7d6446b316a02cbbefc..994663799977145156b7b9b99f18d2ef820825f3 100644
--- a/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp
+++ b/source/RobotAPI/libraries/aron/core/data/rw/reader/nlohmannJSON/NlohmannJSONReaderWithoutTypeCheck.cpp
@@ -104,8 +104,9 @@ namespace armarx::aron::data::reader
     {
         i = input;
     }
+
     bool
-    NlohmannJSONReaderWithoutTypeCheck::readNull(InputType& input) // defaulted implementation
+    NlohmannJSONReaderWithoutTypeCheck::readNull(InputType& input)
     {
         try
         {