diff --git a/source/RobotAPI/components/ObjectPoseProviderExample/CMakeLists.txt b/source/RobotAPI/components/ObjectPoseProviderExample/CMakeLists.txt
index 1395fc02f564792a7ffe7e0963264f5c0ac6fb9e..97c324a68ebea6122dd6e06cfe12f9cb2ab60510 100644
--- a/source/RobotAPI/components/ObjectPoseProviderExample/CMakeLists.txt
+++ b/source/RobotAPI/components/ObjectPoseProviderExample/CMakeLists.txt
@@ -3,7 +3,8 @@ armarx_component_set_name("ObjectPoseProviderExample")
 
 set(COMPONENT_LIBS
     # ArmarXCore
-    ArmarXCore ArmarXCoreInterfaces
+    ArmarXCore 
+    ArmarXCoreInterfaces
     # RobotAPI
     RobotAPI::ArmarXObjects
 )
@@ -21,3 +22,34 @@ armarx_add_component("${SOURCES}" "${HEADERS}")
 
 #generate the application
 armarx_generate_and_add_component_executable()
+
+
+
+
+
+
+
+armarx_component_set_name("ArticulatedObjectStateProviderExample")
+
+
+set(COMPONENT_LIBS
+    # ArmarXCore
+    ArmarXCore 
+    ArmarXCoreInterfaces
+    # RobotAPI
+    RobotAPI::ArmarXObjects
+)
+
+set(SOURCES
+    ArticulatedObjectStateProviderExample.cpp
+)
+set(HEADERS
+    ArticulatedObjectStateProviderExample.h
+)
+
+
+armarx_add_component("${SOURCES}" "${HEADERS}")
+
+
+#generate the application
+armarx_generate_and_add_component_executable(COMPONENT_NAMESPACE "armarx::articulated_object")
\ No newline at end of file
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
index 18ccb6875d1611e05cf20a8fa714dd293df995e6..cc296ea48e6f06437060c7e1cb41f7cd06678e8b 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
@@ -22,6 +22,8 @@
 
 #include "ObjectMemory.h"
 
+#include <RobotAPI/interface/core/articulated_object/topic.h>
+
 
 namespace armarx::armem::server::obj
 {
@@ -38,6 +40,7 @@ namespace armarx::armem::server::obj
 
         // Subscribe
         defs->topic<objpose::ObjectPoseTopic>(); // "ObjectPoseTopic", "ObjectPoseTopicName", "Name of the Object Pose Topic.");
+        defs->topic<articulated_object::ArticulatedObjectTopic>(); // "ObjectPoseTopic", "ObjectPoseTopicName", "Name of the Object Pose Topic.");
 
         // Use
         // defs->component(kinematicUnitObserver);  // Optional dependency.
@@ -107,7 +110,8 @@ namespace armarx::armem::server::obj
         getProxyFromProperty(kinematicUnitObserver, "cmp.KinematicUnitObserverName", false, "", false);
 
         instance::SegmentAdapter::connect(
-            robotStateComponent, robot,
+            robotStateComponent,
+            robot,
             kinematicUnitObserver,
             ArVizComponentPluginUser::arviz,
             debugObserver
diff --git a/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice b/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
index 3097f6c7596fd3fdf82aedd9d974712081cf503c..adc6063bc185f179af57f1b83dc07bba9a6f868c 100644
--- a/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
+++ b/source/RobotAPI/interface/objectpose/ObjectPoseStorageInterface.ice
@@ -32,6 +32,8 @@
 #include <RobotAPI/interface/objectpose/object_pose_types.ice>
 #include <RobotAPI/interface/objectpose/ObjectPoseProvider.ice>
 
+#include <RobotAPI/interface/core/articulated_object/topic.ice>
+
 
 module armarx
 {
@@ -153,7 +155,8 @@ module armarx
         };
 
         interface ObjectPoseStorageInterface extends
-                ObjectPoseTopic
+                ObjectPoseTopic, 
+                armarx::articulated_object::ArticulatedObjectTopic
         {
             // Object poses
 
diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index be30284443c02aa0c4a90225855df5b2d753f6aa..03f509ce8d6cd2ddcce5c2800e14a8cafb25dfa1 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -65,6 +65,7 @@ set(LIB_FILES
     client/ReaderComponentPlugin.cpp
     client/Writer.cpp
     client/WriterComponentPlugin.cpp
+    client/MemoryConnector.cpp
 
     client/Query.cpp
     client/query/Builder.cpp
@@ -162,6 +163,7 @@ set(LIB_HEADERS
     client/ReaderComponentPlugin.h
     client/Writer.h
     client/WriterComponentPlugin.h
+    client/MemoryConnector.h
 
     client/Query.h
     client/query/Builder.h
diff --git a/source/RobotAPI/libraries/armem_robot_localization/MemoryConnector.cpp b/source/RobotAPI/libraries/armem/client/MemoryConnector.cpp
similarity index 100%
rename from source/RobotAPI/libraries/armem_robot_localization/MemoryConnector.cpp
rename to source/RobotAPI/libraries/armem/client/MemoryConnector.cpp
diff --git a/source/RobotAPI/libraries/armem_robot_localization/MemoryConnector.h b/source/RobotAPI/libraries/armem/client/MemoryConnector.h
similarity index 100%
rename from source/RobotAPI/libraries/armem_robot_localization/MemoryConnector.h
rename to source/RobotAPI/libraries/armem/client/MemoryConnector.h
diff --git a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
index 4c1e05dcc6bb83171c9c48ebe7e6c867059ed48a..6e11e66194887d0304f34b9bd2cbaf58da4732fc 100644
--- a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
@@ -19,6 +19,8 @@ armarx_add_library(
         aron_conversions.h
         aron_forward_declarations.h
 
+        ice_conversions.h
+
         server/class/FloorVis.h
         server/class/Segment.h
 
@@ -28,13 +30,14 @@ armarx_add_library(
         server/instance/RobotHeadMovement.h
         server/instance/Visu.h
 
-        server/articulated_object/Segment.h
+        # server/articulated_object/Segment.h
         # server/articulated_object/SegmentAdapter.h
         # server/articulated_object/Visu.h
 
 
     SOURCES
         aron_conversions.cpp
+        ice_conversions.cpp
 
         server/class/FloorVis.cpp
         server/class/Segment.cpp
@@ -45,7 +48,7 @@ armarx_add_library(
         server/instance/RobotHeadMovement.cpp
         server/instance/Visu.cpp
 
-        server/articulated_object/Segment.cpp
+        # server/articulated_object/Segment.cpp
         # server/articulated_object/SegmentAdapter.cpp
         # server/articulated_object/Visu.cpp
 )
@@ -56,6 +59,12 @@ armarx_enable_aron_file_generation_for_target(
     ARON_FILES
         aron/ObjectClass.xml
         aron/ObjectInstance.xml
+
+        # aron/Attachment.xml
+        aron/RobotDescription.xml
+        aron/RobotState.xml
+        aron/Robot.xml
+        aron/Constraint.xml
 )
 
 add_library(${PROJECT_NAME}::armem_objects ALIAS armem_objects)
diff --git a/source/RobotAPI/libraries/armem_objects/aron/Attachment.xml b/source/RobotAPI/libraries/armem_objects/aron/Attachment.xml
index de63863695864b2c436b329be60f06f4d9da58bb..6b0227772cb6c40b0b449dcd3e931e5314ad1548 100644
--- a/source/RobotAPI/libraries/armem_objects/aron/Attachment.xml
+++ b/source/RobotAPI/libraries/armem_objects/aron/Attachment.xml
@@ -6,7 +6,7 @@
     </CodeIncludes>
     <GenerateTypes>
 
-        <Object name="armarx::arondto::Attachment">
+        <Object name="armarx::armem::arondto::Attachment">
 
             <ObjectChild key="constraintType">
 
diff --git a/source/RobotAPI/libraries/armem_objects/aron/Constraint.xml b/source/RobotAPI/libraries/armem_objects/aron/Constraint.xml
index b1360fc5b024bdf431c5bf3e35922b340d2f146f..534df98a19ce5caa5ed59c6601993c2d598017d9 100644
--- a/source/RobotAPI/libraries/armem_objects/aron/Constraint.xml
+++ b/source/RobotAPI/libraries/armem_objects/aron/Constraint.xml
@@ -11,7 +11,7 @@
     </AronIncludes>
     <GenerateTypes>
 
-        <Object name="armarx::arondto::RobotID">
+        <Object name="armarx::armem::arondto::RobotID">
             <ObjectChild key="name">
                 <string/>
             </ObjectChild>
@@ -20,15 +20,15 @@
             </ObjectChild>
         </Object>
 
-        <IntEnum name="armarx::arondto::SceneEntityType">
+        <IntEnum name="armarx::armem::arondto::SceneEntityType">
             <EnumValue key="Robot" value="0" />
             <EnumValue key="ArticulatedObject" value="1" />
             <EnumValue key="Object" value="2" />
         </IntEnum>
 
-        <Object name="armarx::arondto::SceneEntity">
+        <Object name="armarx::armem::arondto::SceneEntity">
             <ObjectChild key="type">
-                <armarx::arondto::SceneEntityType />
+                <armarx::armem::arondto::SceneEntityType />
             </ObjectChild>
 
             <!-- could be a variant -->
@@ -40,9 +40,9 @@
             </ObjectChild>  -->
         </Object>
 
-        <Object name="armarx::arondto::BodyLinkDescription">
+        <Object name="armarx::armem::arondto::BodyLinkDescription">
             <ObjectChild key="entity">
-                <armarx::arondto::SceneEntity />
+                <armarx::armem::arondto::SceneEntity />
             </ObjectChild>
 
             <ObjectChild key="node">
@@ -55,7 +55,7 @@
         </Object>
 
         <!-- http://www.cs.kent.edu/~ruttan/GameEngines/lectures/Bullet_User_Manual -->
-        <IntEnum name="armarx::arondto::ConstraintType">
+        <IntEnum name="armarx::armem::arondto::ConstraintType">
             <EnumValue key="Fixed" value="0" />
             <!-- <EnumValue key="Prismatic" value="1" /> -->
             <!-- <EnumValue key="Revolute" value="2" /> -->
@@ -66,10 +66,10 @@
             <!-- <EnumValue key="Spring" value="7" /> -->
         </IntEnum>
 
-        <Object name="armarx::arondto::Constraint">
+        <Object name="armarx::armem::arondto::Constraint">
 
             <ObjectChild key="type">
-                <armarx::arondto::ConstraintType />
+                <armarx::armem::arondto::ConstraintType />
             </ObjectChild>
 
             <!-- <ObjectChild key="transformation">
@@ -78,11 +78,11 @@
 
 
             <ObjectChild key="bodyA">
-                <armarx::arondto::BodyLinkDescription/>
+                <armarx::armem::arondto::BodyLinkDescription/>
             </ObjectChild>
 
             <ObjectChild key="bodyB">
-                <armarx::arondto::BodyLinkDescription/>
+                <armarx::armem::arondto::BodyLinkDescription/>
             </ObjectChild>
 
 
diff --git a/source/RobotAPI/libraries/armem_objects/aron/Robot.xml b/source/RobotAPI/libraries/armem_objects/aron/Robot.xml
index dc92382a77b6819435ddf6f746ceb067e2ffe0b9..2b2f0ba387457c856003a0528ac0e4c223c4b175 100644
--- a/source/RobotAPI/libraries/armem_objects/aron/Robot.xml
+++ b/source/RobotAPI/libraries/armem_objects/aron/Robot.xml
@@ -2,23 +2,23 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <AronTypeDefinition>
     <CodeIncludes>
-        <Include include="<RobotAPI/libraries/aron/common/aron/RobotDescription.aron.generated.h>" />
-        <Include include="<RobotAPI/libraries/aron/common/aron/RobotState.aron.generated.h>" />
+        <Include include="<RobotAPI/libraries/armem_objects/aron/RobotDescription.aron.generated.h>" />
+        <Include include="<RobotAPI/libraries/armem_objects/aron/RobotState.aron.generated.h>" />
     </CodeIncludes>
      <AronIncludes>
-        <Include include="<RobotAPI/libraries/aron/common/aron/RobotDescription.xml>" />
-        <Include include="<RobotAPI/libraries/aron/common/aron/RobotState.xml>" />
+        <Include include="<RobotAPI/libraries/armem_objects/aron/RobotDescription.xml>" />
+        <Include include="<RobotAPI/libraries/armem_objects/aron/RobotState.xml>" />
     </AronIncludes>
     <GenerateTypes>
 
-        <Object name="armarx::arondto::Robot">
+        <Object name="armarx::armem::arondto::Robot">
 
             <ObjectChild key='description'>
-                <armarx::arondto::RobotDescription />
+                <armarx::armem::arondto::RobotDescription />
             </ObjectChild>
 
             <ObjectChild key='state'>
-                <armarx::arondto::RobotState />
+                <armarx::armem::arondto::RobotState />
             </ObjectChild>
 
             <ObjectChild key='timestamp'>
diff --git a/source/RobotAPI/libraries/armem_objects/aron/RobotDescription.xml b/source/RobotAPI/libraries/armem_objects/aron/RobotDescription.xml
index bc6f8f2a0257fd0d23bfdf792f4aa91ea0266227..84ab00dc170c94880205ce0f9d1327eaf98b0aac 100644
--- a/source/RobotAPI/libraries/armem_objects/aron/RobotDescription.xml
+++ b/source/RobotAPI/libraries/armem_objects/aron/RobotDescription.xml
@@ -4,10 +4,13 @@
     <AronIncludes>
         <Include include="<RobotAPI/libraries/aron/common/aron/PackagePath.xml>" />
     </AronIncludes>
+    <CodeIncludes>
+        <Include include="<RobotAPI/libraries/aron/common/aron/PackagePath.aron.generated.h>" />
+    </CodeIncludes>
 
     <GenerateTypes>
 
-        <Object name='armarx::arondto::RobotDescription'>
+        <Object name='armarx::armem::arondto::RobotDescription'>
 
             <ObjectChild key='name'>
                 <string />
diff --git a/source/RobotAPI/libraries/armem_objects/aron/RobotState.xml b/source/RobotAPI/libraries/armem_objects/aron/RobotState.xml
index 1579bf790fce6b1248866a42c3cae467ee583ace..eaf9b41a75f58cfe9b5a9cedbbdfcb5bd6774499 100644
--- a/source/RobotAPI/libraries/armem_objects/aron/RobotState.xml
+++ b/source/RobotAPI/libraries/armem_objects/aron/RobotState.xml
@@ -6,7 +6,7 @@
     </CodeIncludes>
     <GenerateTypes>
 
-        <Object name="armarx::arondto::RobotState">
+        <Object name="armarx::armem::arondto::RobotState">
 
             <ObjectChild key='timestamp'>
                 <Time />
diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp
index 859f3d601024ba97dd0e59e938afaba2718a95a1..a1a7605310574f5eb5592a8b243da603a9c261ee 100644
--- a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp
@@ -2,26 +2,89 @@
 
 #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h>
 
+#include <RobotAPI/libraries/aron/common/aron_conversions/core.h>
+#include <RobotAPI/libraries/aron/common/aron_conversions/stl.h>
+#include <RobotAPI/libraries/aron/common/aron_conversions/armarx.h>
 
-void armarx::armem::fromAron(const arondto::ObjectInstance& dto, objpose::arondto::ObjectPose& bo)
+namespace armarx::armem
 {
-    bo = dto.pose;
-}
 
-void armarx::armem::toAron(arondto::ObjectInstance& dto, const objpose::arondto::ObjectPose& bo)
-{
-    dto.pose = bo;
-}
+    void fromAron(const arondto::ObjectInstance& dto,
+                  objpose::arondto::ObjectPose& bo)
+    {
+        bo = dto.pose;
+    }
 
+    void toAron(arondto::ObjectInstance& dto, const objpose::arondto::ObjectPose& bo)
+    {
+        dto.pose = bo;
+    }
 
-void armarx::armem::fromAron(const arondto::ObjectInstance& dto, objpose::ObjectPose& bo)
-{
-    objpose::fromAron(dto.pose, bo);
-}
+    void fromAron(const arondto::ObjectInstance& dto, objpose::ObjectPose& bo)
+    {
+        objpose::fromAron(dto.pose, bo);
+    }
 
-void armarx::armem::toAron(arondto::ObjectInstance& dto, const objpose::ObjectPose& bo)
-{
-    objpose::toAron(dto.pose, bo);
-}
+    void toAron(arondto::ObjectInstance& dto, const objpose::ObjectPose& bo)
+    {
+        objpose::toAron(dto.pose, bo);
+    }
+
+
+    /* to be moved */
+    void fromAron(const long& dto, IceUtil::Time& time)
+    {
+        time = IceUtil::Time::microSeconds(dto);
+    }
+
+    void toAron(long& dto, const IceUtil::Time& time)
+    {
+        dto = time.toMicroSeconds();
+    }
+
+
+    /* Robot */
+
+    void fromAron(const arondto::Robot& dto, Robot& bo)
+    {
+        fromAron(dto.description, bo.description);
+        fromAron(dto.state, bo.config);
+    }
+
+    void toAron(arondto::Robot& dto, const Robot& bo)
+    {
+        toAron(dto.description, bo.description);
+        toAron(dto.state, bo.config);
+    }
+
+    /* RobotDescription */
+
+    void fromAron(const arondto::RobotDescription& dto, RobotDescription& bo)
+    {
+        aron::fromAron(dto.name, bo.name);
+        fromAron(dto.xml, bo.xml);
+    }
+
+    void toAron(arondto::RobotDescription& dto, const RobotDescription& bo)
+    {
+        aron::toAron(dto.name, bo.name);
+        toAron(dto.xml, bo.xml);
+    }
+
+    /* RobotState */
+
+    void fromAron(const arondto::RobotState& dto, RobotState& bo)
+    {
+        fromAron(dto.timestamp, bo.timestamp);
+        bo.globalPose.matrix() = dto.globalPose;
+        bo.jointMap            = dto.jointMap;
+    }
 
+    void toAron(arondto::RobotState& dto, const RobotState& bo)
+    {
+        toAron(dto.timestamp, bo.timestamp);
+        dto.globalPose = bo.globalPose.matrix();
+        dto.jointMap   = bo.jointMap;
+    }
 
+}  // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.h b/source/RobotAPI/libraries/armem_objects/aron_conversions.h
index 7ea733e99c75895ff7aba463f36a0f53d0c4bd38..995c249f9f39e92d3ef889df7dbe8277190b3351 100644
--- a/source/RobotAPI/libraries/armem_objects/aron_conversions.h
+++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.h
@@ -5,6 +5,12 @@
 #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h>
 
 
+#include <RobotAPI/libraries/armem_objects/types.h>
+
+#include <RobotAPI/libraries/armem_objects/aron/RobotDescription.aron.generated.h>
+#include <RobotAPI/libraries/armem_objects/aron/RobotState.aron.generated.h>
+#include <RobotAPI/libraries/armem_objects/aron/Robot.aron.generated.h>
+
 namespace armarx::armem
 {
     void fromAron(const arondto::ObjectInstance& dto, objpose::arondto::ObjectPose& bo);
@@ -12,4 +18,21 @@ namespace armarx::armem
 
     void fromAron(const arondto::ObjectInstance& dto, objpose::ObjectPose& bo);
     void toAron(arondto::ObjectInstance& dto, const objpose::ObjectPose& bo);
+
+
+    // TODO move the following
+    void fromAron(const long& dto, IceUtil::Time& time);
+    void toAron(long& dto, const IceUtil::Time& time);
+    // end TODO
+
+
+    void fromAron(const arondto::Robot& dto, Robot& bo);
+    void toAron(arondto::Robot& dto, const Robot& bo);
+
+    void fromAron(const arondto::RobotDescription& dto, RobotDescription& bo);
+    void toAron(arondto::RobotDescription& dto, const RobotDescription& bo);
+
+    void fromAron(const arondto::RobotState& dto, RobotState& bo);
+    void toAron(arondto::RobotState& dto, const RobotState& bo);
+
 }
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..556284d2cc8961c96b5545acfdd5a1855c5f2fcf 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "interfaces.h"
+
+
+namespace armarx::armem::articulated_object
+{
+    class Reader:
+        virtual public ReaderInterface,
+        virtual public ::armarx::armem::MemoryConnector
+    {
+    public:
+        virtual ~Reader() = default;
+
+        void synchronize(ArticulatedObject& obj, const armem::Time& timestamp) override;
+        ArticulatedObject get(const ArticulatedObjectDescription& description, const armem::Time& timestamp) override;
+    };
+
+
+}  // namespace armarx::armem::articulated_object
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9afe430b8e7241b09f21e2745f93bb9e56f2e33c 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "interfaces.h"
+
+
+namespace armarx::armem::articulated_object
+{
+
+    class Writer: public WriterInterface
+    {
+    public:
+        virtual ~WriterInterface() = default;
+
+        void store(const ArticulatedObject& obj) override;
+    };
+
+
+}  // namespace armarx::armem::articulated_object
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/interfaces.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/interfaces.h
new file mode 100644
index 0000000000000000000000000000000000000000..9ffb994aee690080a8254d11ab8f5d4f7eba14d5
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/interfaces.h
@@ -0,0 +1,27 @@
+#pragma once
+
+
+#include <RobotAPI/libraries/armem/core/Time.h>
+#include <RobotAPI/libraries/armem_objects/types.h>
+
+namespace armarx::armem::articulated_object
+{
+    class ReaderInterface
+    {
+    public:
+        virtual ~ReaderInterface() = default;
+
+        virtual void synchronize(ArticulatedObject& obj, const armem::Time& timestamp) = 0;
+        virtual ArticulatedObject get(const ArticulatedObjectDescription& description, const armem::Time& timestamp) = 0;
+    };
+
+
+    class WriterInterface
+    {
+    public:
+        virtual ~WriterInterface() = default;
+
+        virtual void store(const ArticulatedObject& obj) = 0;
+    };
+
+}  // namespace armarx::armem::articulated_object
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/armem_objects/ice_conversions.cpp b/source/RobotAPI/libraries/armem_objects/ice_conversions.cpp
index 3356868612aa3ee5a2973604925c30620ce65475..bbfecee5baaf971d7783122771db1510f61c2157 100644
--- a/source/RobotAPI/libraries/armem_objects/ice_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_objects/ice_conversions.cpp
@@ -1,32 +1,41 @@
-#include "ice_conversions.cpp"
+#include "ice_conversions.h"
 
-#include <RobotAPI/libraries/aron/common/aron/new_types.h>
 #include <RobotAPI/interface/core/articulated_object/types.h>
 
+#include <RobotAPI/libraries/armem/core/ice_conversions.h>
+#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h>
+
 namespace armarx
 {
-    void fromIce(const ::armarx::articulated_object::data::RobotState& ice, ::armarx::RobotState& bo)
+    void toIce(::armarx::articulated_object::data::Config& ice, const ::armarx::armem::RobotState& bo)
     {
-        fromIce(ice.config, bo.config);
-        fromIce(ice.id, bo.description);
+        // toIce(ice.timestamp, bo.timestamp);
+        // toIce(ice.globalPose, bo.globalPose);
+        // toIce(ice.jointMap, bo.jointMap);
     }
 
-    void toIce(::armarx::articulated_object::data::ArticulatedObject& ice, const ::armarx::articulated_object::ArticulatedObject& bo)
-    {
 
+    void fromIce(const ::armarx::articulated_object::data::Config& ice, ::armarx::armem::RobotState& bo)
+    {
+        fromIce(ice.timestamp, bo.timestamp);
+        // fromIce(ice.globalPose, bo.globalPose);
+        // fromIce(ice.jointMap, bo.jointMap);
     }
 
 
-    void fromIce(const ::armarx::articulated_object::data::ArticulatedObject& ice, ::armarx::articulated_object::ArticulatedObject& bo)
+    void toIce(::armarx::articulated_object::data::ArticulatedObject& ice, const ::armarx::armem::articulated_object::ArticulatedObject& bo)
     {
-        fromIce(ice.config, bo.config);
-        fromIce(ice.id, bo.description);
+        // toIce(ice.config, bo.config);
+        //? toIce(ice.id, bo.description);
     }
 
-    void toIce(::armarx::articulated_object::data::ArticulatedObject& ice, const ::armarx::articulated_object::ArticulatedObject& bo)
-    {
 
+    void fromIce(const ::armarx::articulated_object::data::ArticulatedObject& ice, ::armarx::armem::articulated_object::ArticulatedObject& bo)
+    {
+        // fromIce(ice.config, bo.config);
+        // fromIce(ice.id, bo.description);
     }
 
 
+
 } // namespace armarx
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/armem_objects/ice_conversions.h b/source/RobotAPI/libraries/armem_objects/ice_conversions.h
index 00aa04afdf7748c2e3224c918f6a0b4cf5c74173..fbbe3006970f8ca4180e5ae2860764a29456b004 100644
--- a/source/RobotAPI/libraries/armem_objects/ice_conversions.h
+++ b/source/RobotAPI/libraries/armem_objects/ice_conversions.h
@@ -1,12 +1,17 @@
 #pragma once
 
-#include <RobotAPI/libraries/aron/common/aron/new_types.h>
+#include <RobotAPI/libraries/armem_objects/types.h>
+
 #include <RobotAPI/interface/core/articulated_object/types.h>
 
-namespace armarx
+namespace armarx::armem
 {
-    void fromIce(const ::armarx::articulated_object::data::ArticulatedObject& ice, ::armarx::articulated_object::ArticulatedObject& bo);
-    void toIce(::armarx::articulated_object::data::ArticulatedObject& ice, const ::armarx::articulated_object::ArticulatedObject& bo);
+    void fromIce(const ::armarx::articulated_object::data::Config& ice, ::armarx::armem::RobotState& bo);
+    void toIce(::armarx::articulated_object::data::Config& ice, const ::armarx::armem::RobotState& bo);
+
+
+    void fromIce(const ::armarx::articulated_object::data::ArticulatedObject& ice, ::armarx::armem::articulated_object::ArticulatedObject& bo);
+    void toIce(::armarx::articulated_object::data::ArticulatedObject& ice, const ::armarx::armem::articulated_object::ArticulatedObject& bo);
 
 } // namespace armarx
 
diff --git a/source/RobotAPI/libraries/armem_objects/types.h b/source/RobotAPI/libraries/armem_objects/types.h
index 60fa683ae66fc983475bd550604c2759adc64c01..c772840db4e270470bce8efa2535af5c81e92094 100644
--- a/source/RobotAPI/libraries/armem_objects/types.h
+++ b/source/RobotAPI/libraries/armem_objects/types.h
@@ -11,7 +11,7 @@
 
 #include <ArmarXCore/core/PackagePath.h>
 
-namespace armarx
+namespace armarx::armem
 {
 
     struct RobotDescription
@@ -41,8 +41,10 @@ namespace armarx
 
     namespace articulated_object
     {
+        using ArticulatedObjectDescription = RobotDescription;
+
         using ArticulatedObject = Robot;
         using ArticulatedObjects = std::vector<ArticulatedObject>;
     }
 
-}  // namespace armarx
\ No newline at end of file
+}  // namespace armarx::armem
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/armem_robot_localization/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_localization/CMakeLists.txt
index 19a7f00199d06462123d94d345f54fec030672cc..24caa9df3f797dc1e259f2709a995d50e1a584a7 100644
--- a/source/RobotAPI/libraries/armem_robot_localization/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_robot_localization/CMakeLists.txt
@@ -22,12 +22,10 @@ armarx_add_library(
         ./TransformInterfaces.h
         ./TransformReader.h
         ./TransformWriter.h
-        ./MemoryConnector.h
         ./aron_conversions.h
     SOURCES
         ./TransformReader.cpp
         ./TransformWriter.cpp
-        ./MemoryConnector.cpp
         ./aron_conversions.cpp
 )
 
@@ -36,6 +34,7 @@ armarx_enable_aron_file_generation_for_target(
     TARGET_NAME
         "${LIB_NAME}"
     ARON_FILES
+        aron/TransformHeader.xml
         aron/Transform.xml
 )
 
diff --git a/source/RobotAPI/libraries/armem_robot_localization/TransformReader.h b/source/RobotAPI/libraries/armem_robot_localization/TransformReader.h
index 9b04899545e78bdad1b3d0dbcca03c0ba61b4dcd..4107ed61fcc108737049f6fb063929012575a898 100644
--- a/source/RobotAPI/libraries/armem_robot_localization/TransformReader.h
+++ b/source/RobotAPI/libraries/armem_robot_localization/TransformReader.h
@@ -23,8 +23,8 @@
 #pragma once
 
 #include <RobotAPI/libraries/armem/client/Reader.h>
+#include <RobotAPI/libraries/armem/client/MemoryConnector.h>
 
-#include "MemoryConnector.h"
 #include "TransformInterfaces.h"
 
 namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.cpp b/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.cpp
index 1ac8ea58b31d24e14d7f2ee14eb9c34d61178e44..7a9bcd1f4825c6d775201fb862e5a21f0af70cbf 100644
--- a/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.cpp
@@ -113,7 +113,6 @@ namespace armarx::armem
 
         armem::EntityUpdate update;
         update.entityID    = entityID;
-        update.timeCreated = armem::Time::now();
 
         aron::Transform aronTransform;
         toAron(transform, aronTransform);
diff --git a/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.h b/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.h
index 2804fbc53e7a0f61c937dc0a1b6c65d558196e1c..7d1ee2acbac7739ea73f92ca2a5205068cf0e5fa 100644
--- a/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_localization/TransformWriter.h
@@ -25,8 +25,8 @@
 #include <mutex>
 
 #include <RobotAPI/libraries/armem/client/Writer.h>
+#include <RobotAPI/libraries/armem/client/MemoryConnector.h>
 
-#include "MemoryConnector.h"
 #include "TransformInterfaces.h"
 
 namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_localization/aron/Transform.xml b/source/RobotAPI/libraries/armem_robot_localization/aron/Transform.xml
index 1e4e4c7d61c14d70a94499f8491254a20d336c89..afdd4fafdbd74b08c19bbb98cbc1dd326ee6244e 100644
--- a/source/RobotAPI/libraries/armem_robot_localization/aron/Transform.xml
+++ b/source/RobotAPI/libraries/armem_robot_localization/aron/Transform.xml
@@ -3,24 +3,12 @@
 <AronTypeDefinition>
     <CodeIncludes>
         <Include include="<Eigen/Core>" />
+        <Include include="<RobotAPI/libraries/armem_robot_localization/aron/TransformHeader.aron.generated.h>" />
     </CodeIncludes>
+    <AronIncludes>
+        <Include include="<RobotAPI/libraries/armem_robot_localization/aron/TransformHeader.xml>" />
+    </AronIncludes>
     <GenerateTypes>
-
-        <Object name="armarx::aron::TransformHeader">
-            <ObjectChild key='parentFrame'>
-                <string />
-            </ObjectChild>
-            <ObjectChild key='frame'>
-                <string />
-            </ObjectChild>
-            <ObjectChild key='agent'>
-                <string />
-            </ObjectChild>
-            <ObjectChild key='timestamp'>
-                <Time />
-            </ObjectChild>
-        </Object>
-
         <Object name="armarx::aron::Transform">
             <ObjectChild key='header'>
                 <armarx::aron::TransformHeader />
@@ -29,6 +17,5 @@
                 <Pose />
             </ObjectChild>
         </Object>
-
     </GenerateTypes>
 </AronTypeDefinition>
diff --git a/source/RobotAPI/libraries/armem_robot_localization/aron/TransformHeader.xml b/source/RobotAPI/libraries/armem_robot_localization/aron/TransformHeader.xml
new file mode 100644
index 0000000000000000000000000000000000000000..85add64bec4441b3e203a2d798322629521ea4fe
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_robot_localization/aron/TransformHeader.xml
@@ -0,0 +1,23 @@
+<!--This class contains the data structure for ObjectPose -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<AronTypeDefinition>
+    <CodeIncludes>
+        <Include include="<Eigen/Core>" />
+    </CodeIncludes>
+    <GenerateTypes>
+        <Object name="armarx::aron::TransformHeader">
+            <ObjectChild key='parentFrame'>
+                <string />
+            </ObjectChild>
+            <ObjectChild key='frame'>
+                <string />
+            </ObjectChild>
+            <ObjectChild key='agent'>
+                <string />
+            </ObjectChild>
+            <ObjectChild key='timestamp'>
+                <Time />
+            </ObjectChild>
+        </Object>
+    </GenerateTypes>
+</AronTypeDefinition>
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_mapping/CMakeLists.txt
index 5712d4c15f338783ac913f3416d6b8fcdb900003..28e32f85f987b88246265ae4fc165c7bd68968de 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_robot_mapping/CMakeLists.txt
@@ -10,8 +10,6 @@ armarx_add_library(
         # This package
         RobotAPICore 
         RobotAPI::libraries::armem
-        # TODO(fabian.reister): remove this dependency!
-        RobotAPI::armem_robot_localization
         # System / External
         Eigen3::Eigen
     HEADERS
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
index d035b2b7926376c0e16e38bcfd6d8182f4609d87..ec4fa02074ffa65ed9bcb13e1d5212ebb0c3cfd1 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
@@ -33,7 +33,7 @@
 #include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h>
 #include <RobotAPI/interface/armem/mns/MemoryNameSystemInterface.h>
 #include <RobotAPI/libraries/armem/util/util.h>
-#include <RobotAPI/libraries/armem_robot_localization/MemoryConnector.h>
+#include <RobotAPI/libraries/armem/client/MemoryConnector.h>
 #include <RobotAPI/libraries/armem_robot_mapping/aron/LaserScan.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_mapping/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot_mapping/types.h>
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
index 359b88fe8550d9b64f066fe942a5c6fda7dce172..5135d41b89c14380d85b5af4f1e90323cf9feb70 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
@@ -28,8 +28,7 @@
 #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
 
 #include <RobotAPI/libraries/armem/client/Reader.h>
-// TODO(fabian.reister): move MemoryConnector to armem library
-#include <RobotAPI/libraries/armem_robot_localization/MemoryConnector.h>
+#include <RobotAPI/libraries/armem/client/MemoryConnector.h>
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem_robot_mapping/types.h>
 
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
index dd0299ece229eaac2fb4f44758fae23f763f612d..2216b159f0f18d336834e80f16b9c58c7d05948c 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
@@ -71,7 +71,6 @@ namespace armarx::armem
 
         armem::EntityUpdate update;
         update.entityID = entityID;
-        update.timeCreated = armem::Time::now();
 
         arondto::LaserScanStamped aronSensorData;
         // currently only sets the header
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
index 5d5f21185ba6bfad4cb319bef81853ef3bd551f5..4eddff56c3dfa7b314fc844fff6a18c60bd45003 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
@@ -22,13 +22,12 @@
 
 #pragma once
 
-#include <RobotAPI/interface/units/LaserScannerUnit.h>
 #include <mutex>
 
-#include <RobotAPI/libraries/armem/client/Writer.h>
+#include <RobotAPI/interface/units/LaserScannerUnit.h>
 
-// TODO(fabian.reister): move MemoryConnector to armem lib
-#include "RobotAPI/libraries/armem_robot_localization/MemoryConnector.h"
+#include <RobotAPI/libraries/armem/client/Writer.h>
+#include <RobotAPI/libraries/armem/client/MemoryConnector.h>
 
 
 namespace armarx::armem
diff --git a/source/RobotAPI/libraries/aron/common/CMakeLists.txt b/source/RobotAPI/libraries/aron/common/CMakeLists.txt
index a64ff5e710dd9d1cce55cceb5140324ceb081024..6fc9fa463f3f037c38f6e0142c934678775d9aaa 100644
--- a/source/RobotAPI/libraries/aron/common/CMakeLists.txt
+++ b/source/RobotAPI/libraries/aron/common/CMakeLists.txt
@@ -23,9 +23,6 @@ armarx_add_library(
         aron_conversions/armarx.cpp
         aron_conversions/simox.cpp
         aron_conversions/stl.cpp
-
-        # TODO move
-        aron/ice_conversions.cpp
 )
 
 
@@ -37,11 +34,6 @@ armarx_enable_aron_file_generation_for_target(
         aron/OrientedBox.xml
         aron/PackagePath.xml
 
-        # aron/Attachment.xml
-        aron/RobotDescription.xml
-        aron/RobotState.xml
-        aron/Robot.xml
-        aron/Constraint.xml
 )
 
 
diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.cpp
index 0aa43a2b2b999317d8258ebd452e6997045c6cae..ea25e01e3517602df7cf7871cd393d5639de8d50 100644
--- a/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.cpp
+++ b/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.cpp
@@ -7,17 +7,6 @@
 namespace armarx
 {
 
-    /* to be moved */
-    void fromAron(const long& dto, IceUtil::Time& time)
-    {
-        time = IceUtil::Time::microSeconds(dto);
-    }
-
-    void toAron(long& dto, const IceUtil::Time& time)
-    {
-        dto = time.toMicroSeconds();
-    }
-
     /* PackagePath */
 
     void fromAron(const arondto::PackagePath& dto, PackagePath& bo)
@@ -33,51 +22,4 @@ namespace armarx
     }
 
 
-    /* Robot */
-
-    void fromAron(const arondto::Robot& dto, Robot& bo)
-    {
-        fromAron(dto.description, bo.description);
-        fromAron(dto.state, bo.config);
-    }
-
-    void toAron(arondto::Robot& dto, const Robot& bo)
-    {
-        toAron(dto.description, bo.description);
-        toAron(dto.state, bo.config);
-    }
-
-
-    /* RobotDescription */
-
-    void fromAron(const arondto::RobotDescription& dto, RobotDescription& bo)
-    {
-        aron::fromAron(dto.name, bo.name);
-        fromAron(dto.xml, bo.xml);
-    }
-
-    void toAron(arondto::RobotDescription& dto, const RobotDescription& bo)
-    {
-        aron::toAron(dto.name, bo.name);
-        toAron(dto.xml, bo.xml);
-    }
-
-
-    /* RobotState */
-
-    void fromAron(const arondto::RobotState& dto, RobotState& bo)
-    {
-        fromAron(dto.timestamp, bo.timestamp);
-        bo.globalPose.matrix() = dto.globalPose;
-        bo.jointMap = dto.jointMap;
-    }
-
-    void toAron(arondto::RobotState& dto, const RobotState& bo)
-    {
-        toAron(dto.timestamp, bo.timestamp);
-        dto.globalPose = bo.globalPose.matrix();
-        dto.jointMap = bo.jointMap;
-    }
-
-
 } // namespace armarx
diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.h b/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.h
index fafb4c33af5748c162ced73dc22c70baa9d971b5..985409745af2576b980de11b169809efd91118b2 100644
--- a/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.h
+++ b/source/RobotAPI/libraries/aron/common/aron_conversions/armarx.h
@@ -6,32 +6,9 @@
 
 #include <RobotAPI/libraries/aron/common/aron/PackagePath.aron.generated.h>
 
-#include <RobotAPI/libraries/aron/common/aron/new_types.h>
-#include <RobotAPI/libraries/aron/common/aron/RobotDescription.aron.generated.h>
-#include <RobotAPI/libraries/aron/common/aron/RobotState.aron.generated.h>
-#include <RobotAPI/libraries/aron/common/aron/Robot.aron.generated.h>
-
 namespace armarx
 {
-
-    // TODO move the following
-    void fromAron(const long& dto, IceUtil::Time& time);
-    void toAron(long& dto, const IceUtil::Time& time);
-
-    // end TODO
-
-
     void fromAron(const arondto::PackagePath& dto, PackagePath& bo);
     void toAron(arondto::PackagePath& dto, const PackagePath& bo);
 
-
-    void fromAron(const arondto::Robot& dto, Robot& bo);
-    void toAron(arondto::Robot& dto, const Robot& bo);
-
-    void fromAron(const arondto::RobotDescription& dto, RobotDescription& bo);
-    void toAron(arondto::RobotDescription& dto, const RobotDescription& bo);
-
-    void fromAron(const arondto::RobotState& dto, RobotState& bo);
-    void toAron(arondto::RobotState& dto, const RobotState& bo);
-
 }  // namespace armarx