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 32576d212cc9fe5832a177c301d4120c73e182ae..54a4668819869c3305d79a98531cd8cdd348bf14 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
@@ -52,6 +52,18 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
+    CppBlockPtr EigenMatrixSerializer::getResetHardBlock(const std::string& accessor) const
+    {
+        CppBlockPtr block = std::make_shared<CppBlock>();
+        block->addLine(accessor + ".setZero();");
+        return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator);
+    }
+
+    CppBlockPtr EigenMatrixSerializer::getResetSoftBlock(const std::string& accessor) const
+    {
+        return getResetHardBlock(accessor);
+    }
+
     CppBlockPtr EigenMatrixSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
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 51b74e6515969c85f0d822f6e35aace596a7dc95..1885efb76b1b53ab533d83fd4b071592fa040aeb 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
@@ -31,8 +31,6 @@
 
 namespace armarx::aron::cppserializer::serializer
 {
-    class EigenMatrixSerializer;
-    typedef std::shared_ptr<EigenMatrixSerializer> EigenMatrixSerializerPtr;
 
     class EigenMatrixSerializer :
         virtual public detail::NDArraySerializerBase<typenavigator::EigenMatrixNavigator, EigenMatrixSerializer>
@@ -42,6 +40,8 @@ namespace armarx::aron::cppserializer::serializer
         EigenMatrixSerializer(const typenavigator::EigenMatrixNavigatorPtr&);
 
         // virtual implementations
+        virtual CppBlockPtr getResetHardBlock(const std::string&) const override;
+        virtual CppBlockPtr getResetSoftBlock(const std::string&) 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 e8457f0aa5e45eba2bae253e1bc5b6277cf9d29b..41e3faf1bd3797cc721b27bfa49e0b70740c76b2 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
@@ -47,6 +47,18 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
+    CppBlockPtr EigenQuaternionSerializer::getResetHardBlock(const std::string& accessor) const
+    {
+        CppBlockPtr block = std::make_shared<CppBlock>();
+        block->addLine(accessor + ".setIdentity();");
+        return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator);
+    }
+
+    CppBlockPtr EigenQuaternionSerializer::getResetSoftBlock(const std::string& accessor) const
+    {
+        return getResetHardBlock(accessor);
+    }
+
     CppBlockPtr EigenQuaternionSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
         CppBlockPtr b = CppBlockPtr(new CppBlock());
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 039d20faca55b4856fcaca9337da0d1806a04cc9..8f471d8f3e2570d51fac512d14b1b06bbbed692d 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
@@ -33,20 +33,19 @@
 namespace armarx::aron::cppserializer::serializer
 {
 
-    class EigenQuaternionSerializer;
-    typedef std::shared_ptr<EigenQuaternionSerializer> EigenQuaternionSerializerPtr;
-
     class EigenQuaternionSerializer :
         virtual public detail::NDArraySerializerBase<typenavigator::EigenQuaternionNavigator, EigenQuaternionSerializer>
     {
     public:
-        using PointerType = EigenQuaternionSerializerPtr;
+        using PointerType = std::shared_ptr<EigenQuaternionSerializer>;
 
     public:
         // constructors
         EigenQuaternionSerializer(const typenavigator::EigenQuaternionNavigatorPtr&);
 
         // virtual implementations
+        virtual CppBlockPtr getResetHardBlock(const std::string&) const override;
+        virtual CppBlockPtr getResetSoftBlock(const std::string&) 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/Orientation.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/ndarray/Orientation.cpp
index c2c1a5aaaddd5ceca4074144024cc62287a9a6d6..1bd39c73c977b6cf4da7a7de01b3346083c7c742 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
@@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
+    CppBlockPtr OrientationSerializer::getResetHardBlock(const std::string& accessor) const
+    {
+        CppBlockPtr block = std::make_shared<CppBlock>();
+        block->addLine(accessor + ".setIdentity();");
+        return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator);
+    }
+
+    CppBlockPtr OrientationSerializer::getResetSoftBlock(const std::string& accessor) const
+    {
+        return getResetHardBlock(accessor);
+    }
+
     CppBlockPtr OrientationSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
-        CppBlockPtr b = CppBlockPtr(new CppBlock());
+        CppBlockPtr b = std::make_shared<CppBlock>();
         b->addLine("w.writeOrientation({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor);
         return b;
     }
 
     CppBlockPtr OrientationSerializer::getWriteBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "coeffs().data())); // of " + accessor);
 
         return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator);
@@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer
 
     CppBlockPtr OrientationSerializer::getReadBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "coeffs().data())); // of " + accessor);
         return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
     }
 
     CppBlockPtr OrientationSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
         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 088b4d1c4262a2f34c6542543aa9cfb56bb0ded7..b4851e4bc6806fc60b157302a7bfc53adc6a110a 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
@@ -29,14 +29,12 @@
 
 namespace armarx::aron::cppserializer::serializer
 {
-    class OrientationSerializer;
-    typedef std::shared_ptr<OrientationSerializer> AronOrientationTypeCppSerializerPtr;
 
     class OrientationSerializer :
         virtual public detail::NDArraySerializerBase<typenavigator::OrientationNavigator, OrientationSerializer>
     {
     public:
-        using PointerType = AronOrientationTypeCppSerializerPtr;
+        using PointerType = std::shared_ptr<class OrientationSerializer>;
 
     public:
 
@@ -44,10 +42,13 @@ namespace armarx::aron::cppserializer::serializer
         OrientationSerializer(const typenavigator::OrientationNavigatorPtr&);
 
         // virtual implementations
+        virtual CppBlockPtr getResetHardBlock(const std::string&) const override;
+        virtual CppBlockPtr getResetSoftBlock(const std::string&) 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;
         virtual CppBlockPtr getEqualsBlock(const std::string&, 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 9bf5f307437473abd5fc9e004a21c1db6767c087..b6be09e9f94b972f23e226a6dc8cbd64e11c6040 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
@@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
+    CppBlockPtr PoseSerializer::getResetHardBlock(const std::string& accessor) const
+    {
+        CppBlockPtr block = std::make_shared<CppBlock>();
+        block->addLine(accessor + ".setIdentity();");
+        return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator);
+    }
+
+    CppBlockPtr PoseSerializer::getResetSoftBlock(const std::string& accessor) const
+    {
+        return getResetHardBlock(accessor);
+    }
+
     CppBlockPtr PoseSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
-        CppBlockPtr b = CppBlockPtr(new CppBlock());
+        CppBlockPtr b = std::make_shared<CppBlock>();
         b->addLine("w.writePose({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor);
         return b;
     }
 
     CppBlockPtr PoseSerializer::getWriteBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor);
 
         return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator);
@@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer
 
     CppBlockPtr PoseSerializer::getReadBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor);
         return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
     }
 
     CppBlockPtr PoseSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
         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 131a73e728ac36eede0c2a7012179032867c91dd..195a04015ea58ae14b419dcda0bf163981cecff6 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
@@ -29,20 +29,19 @@
 
 namespace armarx::aron::cppserializer::serializer
 {
-    class PoseSerializer;
-    typedef std::shared_ptr<PoseSerializer> AronPoseTypeCppSerializerPtr;
-
     class PoseSerializer :
         virtual public detail::NDArraySerializerBase<typenavigator::PoseNavigator, PoseSerializer>
     {
     public:
-        using PointerType = AronPoseTypeCppSerializerPtr;
+        using PointerType = std::shared_ptr<PoseSerializer>;
 
     public:
         // constructors
         PoseSerializer(const typenavigator::PoseNavigatorPtr&);
 
         // virtual implementations
+        virtual CppBlockPtr getResetHardBlock(const std::string&) const override;
+        virtual CppBlockPtr getResetSoftBlock(const std::string&) 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 60089f7c7568435f943318dece3c4e083f87d0fd..6c9e54ecd0a074cc1c56a63f090fc56c06152004 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
@@ -40,16 +40,28 @@ namespace armarx::aron::cppserializer::serializer
         ARMARX_CHECK_NOT_NULL(typenavigator);
     }
 
+    CppBlockPtr PositionSerializer::getResetHardBlock(const std::string& accessor) const
+    {
+        CppBlockPtr block = std::make_shared<CppBlock>();
+        block->addLine(accessor + ".setZero();");
+        return this->ResolveMaybeResetHardBlock(accessor, block, this->typenavigator);
+    }
+
+    CppBlockPtr PositionSerializer::getResetSoftBlock(const std::string& accessor) const
+    {
+        return getResetHardBlock(accessor);
+    }
+
     CppBlockPtr PositionSerializer::getWriteTypeBlock(const std::string& accessor) const
     {
-        CppBlockPtr b = CppBlockPtr(new CppBlock());
+        CppBlockPtr b = std::make_shared<CppBlock>();
         b->addLine("w.writePosition({" + MAYBE_TO_STRING(typenavigator->getMaybe()) + "}); // of " + accessor);
         return b;
     }
 
     CppBlockPtr PositionSerializer::getWriteBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("w.writeNDArray({" + simox::alg::to_string(typenavigator->ACCEPTED_DIMENSION, ", ") + ", 4}, \"" + typenavigator->ACCEPTED_TYPE + "\", reinterpret_cast<const unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor);
 
         return ResolveMaybeWriteBlock(accessor, block_if_data, typenavigator);
@@ -57,14 +69,14 @@ namespace armarx::aron::cppserializer::serializer
 
     CppBlockPtr PositionSerializer::getReadBlock(const std::string& accessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("r.readEndNDArray(reinterpret_cast<unsigned char*>(" + accessor + nextEl() + "data())); // of " + accessor);
         return ResolveMaybeReadBlock(accessor, "r.readStartNDArray()", block_if_data, typenavigator);
     }
 
     CppBlockPtr PositionSerializer::getEqualsBlock(const std::string& accessor, const std::string& otherInstanceAccessor) const
     {
-        CppBlockPtr block_if_data = CppBlockPtr(new CppBlock());
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
         block_if_data->addLine("if (not (" + accessor + nextEl() + "isApprox(" + otherInstanceAccessor + ")))");
         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 7a234106d331f109a0a75e0f15a0f629189d2191..61026f4617401bdc64393c4e813c3fd535dce301 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
@@ -29,20 +29,20 @@
 
 namespace armarx::aron::cppserializer::serializer
 {
-    class PositionSerializer;
-    typedef std::shared_ptr<PositionSerializer> AronPositionTypeCppSerializerPtr;
 
     class PositionSerializer :
         virtual public detail::NDArraySerializerBase<typenavigator::PositionNavigator, PositionSerializer>
     {
     public:
-        using PointerType = AronPositionTypeCppSerializerPtr;
+        using PointerType = std::shared_ptr<PositionSerializer>;
 
     public:
         // constructors
         PositionSerializer(const typenavigator::PositionNavigatorPtr&);
 
         // virtual implementations
+        virtual CppBlockPtr getResetHardBlock(const std::string&) const override;
+        virtual CppBlockPtr getResetSoftBlock(const std::string&) 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;