diff --git a/source/RobotAPI/libraries/armem_robot/types.h b/source/RobotAPI/libraries/armem_robot/types.h
index 4fed4d1cb277ab316a318cbc13b4f32222fd8939..4ae48e00f0755b8a24b7baab6f48df14e5f70632 100644
--- a/source/RobotAPI/libraries/armem_robot/types.h
+++ b/source/RobotAPI/libraries/armem_robot/types.h
@@ -10,6 +10,7 @@
 
 #include <ArmarXCore/core/PackagePath.h>
 
+
 namespace armarx::armem::robot
 {
     struct RobotDescription
@@ -45,4 +46,4 @@ namespace armarx::armem::robot
     using RobotDescriptions = std::vector<RobotDescription>;
     using RobotStates = std::vector<RobotState>;
 
-}  // namespace armarx::armem::robot
\ No newline at end of file
+}  // namespace armarx::armem::robot
diff --git a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
index a2e87f027e868fdc33689eee860577c4083c04d5..2d1842b463cde600e019a49d0d1ed96d46a79920 100644
--- a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
@@ -36,6 +36,8 @@ armarx_add_library(
         client/localization/TransformReader.h
         client/localization/TransformWriter.h
 
+        server/forward_declarations.h
+
         server/common/Visu.h
 
         server/localization/Segment.h
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
index d6dcddd7d3fd568216a63657bfe6ae5ca1f10f9c..0bcccee6c8566b8e2be59aff365d9a9003549ed3 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
@@ -6,8 +6,6 @@
 
 #include <Eigen/Geometry>
 
-#include <IceUtil/Time.h>
-
 #include <SimoxUtility/algorithm/get_map_keys_values.h>
 #include <SimoxUtility/math/pose.h>
 
@@ -15,13 +13,14 @@
 #include <ArmarXCore/core/time/CycleUtil.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 
-#include <RobotAPI/components/ArViz/Client/Elements.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
-#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
 
-#include "../description/Segment.h"
-#include "../localization/Segment.h"
-#include "../proprioception/Segment.h"
+#include <RobotAPI/components/ArViz/Client/Elements.h>
+
+#include <RobotAPI/libraries/armem_robot_state/server/description/Segment.h>
+#include <RobotAPI/libraries/armem_robot_state/server/localization/Segment.h>
+#include <RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.h>
+
 
 
 namespace armarx::armem::server::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.h b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.h
index 95efae41963c63669e4e4bb11b202ba9ef948ec9..e407abc0dc818de089f75572730c6266d0230a1a 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.h
+++ b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.h
@@ -31,27 +31,11 @@
 
 #include <RobotAPI/libraries/armem_objects/types.h>
 
+#include <RobotAPI/libraries/armem_robot_state/server/forward_declarations.h>
 
-namespace armarx
-{
-    class ObjectFinder;
-}
 
 namespace armarx::armem::server::robot_state
 {
-    namespace localization
-    {
-        class Segment;
-    }
-    namespace proprioception
-    {
-        class Segment;
-    }
-    namespace description
-    {
-        class Segment;
-    }
-
 
     /**
      * @brief Models decay of object localizations by decreasing the confidence
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
index 9925ab30ff83b84d1e8927c51c16fddc6536b185..7ca3f370184163d06419d84bfee6e7f4fd2876ff 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
@@ -96,7 +96,8 @@ namespace armarx::armem::server::robot_state::description
     }
 
 
-    Segment::RobotDescriptionMap Segment::getRobotDescriptionsLocking(const armem::Time& timestamp) const
+    RobotDescriptionMap
+    Segment::getRobotDescriptionsLocking(const armem::Time& timestamp) const
     {
         return doLocked([this, &timestamp]()
         {
@@ -105,7 +106,8 @@ namespace armarx::armem::server::robot_state::description
     }
 
 
-    Segment::RobotDescriptionMap Segment::getRobotDescriptions(const armem::Time& timestamp) const
+    RobotDescriptionMap
+    Segment::getRobotDescriptions(const armem::Time& timestamp) const
     {
         ARMARX_CHECK_NOT_NULL(segment);
         (void) timestamp;  // Unused
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.h b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.h
index c62821c4afacbf6caa87b5540a4c05c778254f25..40eac57706b1cfc14d2cd823cda222d673f958c2 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.h
+++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.h
@@ -28,12 +28,9 @@
 #include <unordered_map>
 
 // ArmarX
-#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
-
 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
-#include <RobotAPI/libraries/armem/core/MemoryID.h>
 #include <RobotAPI/libraries/armem/server/segment/Segment.h>
-#include <RobotAPI/libraries/armem_objects/types.h>
+#include <RobotAPI/libraries/armem_robot_state/server/forward_declarations.h>
 
 // Aron
 #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h>
@@ -41,6 +38,7 @@
 
 namespace armarx::armem::server::robot_state::description
 {
+
     class Segment : public segment::wm::AronTypedCoreSegmentBase<arondto::RobotDescription>
     {
         using Base = segment::wm::AronTypedCoreSegmentBase<arondto::RobotDescription>;
@@ -54,9 +52,6 @@ namespace armarx::armem::server::robot_state::description
         void onConnect(const RobotUnitInterfacePrx& robotUnitPrx);
 
 
-        /// mapping "robot name" -> "robot description"
-        using RobotDescriptionMap = std::unordered_map<std::string, robot::RobotDescription>;
-
         RobotDescriptionMap getRobotDescriptions(const armem::Time& timestamp) const;
         RobotDescriptionMap getRobotDescriptionsLocking(const armem::Time& timestamp) const;
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/forward_declarations.h b/source/RobotAPI/libraries/armem_robot_state/server/forward_declarations.h
new file mode 100644
index 0000000000000000000000000000000000000000..e730e29f1d5c8e83f38701a2e26cfc7a55b23039
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_robot_state/server/forward_declarations.h
@@ -0,0 +1,80 @@
+/*
+ * 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/>.
+ *
+ * @author     Rainer Kartmann ( rainer dot kartmann at kit dot edu )
+ * @date       2021
+ * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
+ *             GNU General Public License
+ */
+
+#pragma once
+
+#include <map>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#include <Eigen/Geometry>
+
+
+
+namespace armarx::armem::arondto
+{
+    struct Transform;
+    struct TransformHeader;
+
+    struct JointState;
+
+    class RobotDescription;
+}
+
+namespace armarx::armem::robot
+{
+    struct RobotDescription;
+    struct RobotState;
+    struct Robot;
+
+    using Robots = std::vector<Robot>;
+    using RobotDescriptions = std::vector<RobotDescription>;
+    using RobotStates = std::vector<RobotState>;
+}
+
+namespace armarx::armem::robot_state
+{
+    struct JointState;
+
+    struct Transform;
+    struct TransformHeader;
+}
+
+namespace armarx::armem::server::robot_state::description
+{
+    using RobotDescriptionMap = std::unordered_map<std::string, robot::RobotDescription>;
+    class Segment;
+}
+
+namespace armarx::armem::server::robot_state::localization
+{
+    using RobotPoseMap = std::unordered_map<std::string, Eigen::Affine3f>;
+    using RobotFramePoseMap = std::unordered_map<std::string, std::vector<Eigen::Affine3f>>;
+    class Segment;
+}
+
+namespace armarx::armem::server::robot_state::proprioception
+{
+    using RobotJointPositionMap = std::unordered_map<std::string, std::map<std::string, float>>;
+    class Segment;
+}
+
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp
index 9ff3415366c210784ae4669db08f0c2964393226..1a73d571d47912809e8f5eb63b20cff5e9678020 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp
@@ -2,27 +2,12 @@
 
 // STL
 #include <iterator>
-#include <sstream>
 
-// Ice
-#include <IceUtil/Time.h>
-
-// Eigen
-#include <Eigen/Core>
-#include <Eigen/Geometry>
-
-#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
-#include <ArmarXCore/core/application/properties/PluginAll.h>
 #include <ArmarXCore/core/logging/Logging.h>
-#include <ArmarXCore/core/time/TimeUtil.h>
 
 #include <RobotAPI/libraries/core/FramedPose.h>
-
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 
-#include <RobotAPI/libraries/armem/client/Writer.h>
-#include <RobotAPI/libraries/armem/client/query/Builder.h>
-#include <RobotAPI/libraries/armem/client/query/query_fns.h>
 #include <RobotAPI/libraries/armem/core/MemoryID.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
 #include <RobotAPI/libraries/armem/core/aron_conversions.h>
@@ -32,6 +17,7 @@
 #include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 
 #include <RobotAPI/libraries/armem_robot_state/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot_state/types.h>
 #include <RobotAPI/libraries/armem_robot_state/common/localization/TransformHelper.h>
 #include <RobotAPI/libraries/armem_robot_state/common/localization/types.h>
 
@@ -45,14 +31,17 @@ namespace armarx::armem::server::robot_state::localization
     }
 
 
-    Segment::~Segment() = default;
+    Segment::~Segment()
+    {
+    }
+
 
     void Segment::onConnect()
     {
     }
 
 
-    Segment::RobotFramePoseMap
+    RobotFramePoseMap
     Segment::getRobotFramePosesLocking(const armem::Time& timestamp) const
     {
         return this->doLocked([this, &timestamp]()
@@ -62,7 +51,7 @@ namespace armarx::armem::server::robot_state::localization
     }
 
 
-    Segment::RobotFramePoseMap
+    RobotFramePoseMap
     Segment::getRobotFramePoses(const armem::Time& timestamp) const
     {
         using common::robot_state::localization::TransformHelper;
@@ -74,7 +63,7 @@ namespace armarx::armem::server::robot_state::localization
             TransformQuery query
             {
                 .header = {
-                    .parentFrame = GlobalFrame,
+                    .parentFrame = armarx::GlobalFrame,
                     .frame       = "root", // TODO, FIXME
                     .agent       = robotName,
                     .timestamp   = timestamp
@@ -98,7 +87,7 @@ namespace armarx::armem::server::robot_state::localization
     }
 
 
-    Segment::RobotPoseMap
+    RobotPoseMap
     Segment::getRobotGlobalPosesLocking(const armem::Time& timestamp) const
     {
         return this->doLocked([this, &timestamp]()
@@ -108,7 +97,7 @@ namespace armarx::armem::server::robot_state::localization
     }
 
 
-    Segment::RobotPoseMap
+    RobotPoseMap
     Segment::getRobotGlobalPoses(const armem::Time& timestamp) const
     {
         using common::robot_state::localization::TransformHelper;
@@ -128,8 +117,7 @@ namespace armarx::armem::server::robot_state::localization
                 }
             };
 
-            const auto result = TransformHelper::lookupTransform(*segment, query);
-            if (result)
+            if (const auto result = TransformHelper::lookupTransform(*segment, query))
             {
                 robotGlobalPoses.emplace(robotName, result.transform.transform);
             }
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.h b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.h
index 31fffb4207e7bfe40a0d3f6ed23b554069076a6a..f0b228800b66426da38391ebf60c57d290926959 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.h
+++ b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.h
@@ -30,52 +30,41 @@
 #include <Eigen/Geometry>
 
 // ArmarX
-#include <RobotAPI/libraries/armem/core/MemoryID.h>
+#include <RobotAPI/libraries/armem/core/forward_declarations.h>
 #include <RobotAPI/libraries/armem/server/segment/Segment.h>
-#include <RobotAPI/libraries/armem_objects/types.h>
-#include <RobotAPI/libraries/armem_robot_state/types.h>
 
-// Aron
 #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
+#include <RobotAPI/libraries/armem_robot_state/server/forward_declarations.h>
 
 
-namespace armarx::armem
-{
-    struct EntityUpdate;
-}  // namespace armarx::armem
-
 namespace armarx::armem::server::robot_state::localization
 {
     class Segment : public segment::wm::AronTypedCoreSegmentBase<arondto::Transform>
     {
         using Base = segment::wm::AronTypedCoreSegmentBase<arondto::Transform>;
 
-    public:
-
-        using RobotPoseMap = std::unordered_map<std::string, Eigen::Affine3f>;
-        using RobotFramePoseMap = std::unordered_map<std::string, std::vector<Eigen::Affine3f>>;
-
-
     public:
 
         Segment(server::MemoryToIceAdapter& iceMemory);
         virtual ~Segment() override;
 
+
         void onConnect();
 
+
         RobotPoseMap getRobotGlobalPoses(const armem::Time& timestamp) const;
         RobotPoseMap getRobotGlobalPosesLocking(const armem::Time& timestamp) const;
 
         RobotFramePoseMap getRobotFramePoses(const armem::Time& timestamp) const;
         RobotFramePoseMap getRobotFramePosesLocking(const armem::Time& timestamp) const;
 
-        bool commitTransform(const armarx::armem::robot_state::Transform& transform);
-        bool commitTransformLocking(const armarx::armem::robot_state::Transform& transform);
+        bool commitTransform(const armem::robot_state::Transform& transform);
+        bool commitTransformLocking(const armem::robot_state::Transform& transform);
 
 
     private:
 
-        EntityUpdate makeUpdate(const armarx::armem::robot_state::Transform& transform) const;
+        EntityUpdate makeUpdate(const armem::robot_state::Transform& transform) const;
 
 
     };
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
index 5290d004c211371563490bf78bdfc84aa76e066b..3f6f24f45a4705e6f421652e32ce31ae39b3c2ef 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.cpp
@@ -43,7 +43,7 @@ namespace armarx::armem::server::robot_state::proprioception
 
 
 
-    Segment::RobotJointPositionMap Segment::getRobotJointPositionsLocking(
+    RobotJointPositionMap Segment::getRobotJointPositionsLocking(
         const armem::Time& timestamp,
         DebugObserverHelper* debugObserver) const
     {
@@ -66,7 +66,7 @@ namespace armarx::armem::server::robot_state::proprioception
     }
 
 
-    Segment::RobotJointPositionMap
+    RobotJointPositionMap
     Segment::getRobotJointPositions(
         const armem::Time& timestamp,
         DebugObserverHelper* debugObserver) const
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.h b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.h
index 3beeeacc241e9270d6d7d1f901d936039a01eb5b..e27984bba26136defa5e2ef2b940790abe44f3f7 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.h
+++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/Segment.h
@@ -26,7 +26,6 @@
 #include <map>
 #include <optional>
 #include <string>
-#include <unordered_map>
 
 // ArmarX
 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
@@ -34,6 +33,7 @@
 // RobotAPI
 #include <RobotAPI/libraries/armem/core/MemoryID.h>
 #include <RobotAPI/libraries/armem/server/segment/Segment.h>
+#include <RobotAPI/libraries/armem_robot_state/server/forward_declarations.h>
 
 
 namespace armarx
@@ -46,10 +46,6 @@ namespace armarx::armem::server::robot_state::proprioception
     {
         using Base = segment::wm::CoreSegmentBase;
 
-    public:
-
-        using RobotJointPositionMap = std::unordered_map<std::string, std::map<std::string, float>>;
-
     public:
 
         Segment(server::MemoryToIceAdapter& iceMemory);
diff --git a/source/RobotAPI/libraries/armem_robot_state/types.h b/source/RobotAPI/libraries/armem_robot_state/types.h
index 39daba5d2d7db0148cb9df264d8da2acac54d036..b6d2b67dec2b28425e7b3dd4b0630fc39df02017 100644
--- a/source/RobotAPI/libraries/armem_robot_state/types.h
+++ b/source/RobotAPI/libraries/armem_robot_state/types.h
@@ -23,7 +23,8 @@
 
 #include <Eigen/Geometry>
 
-#include "RobotAPI/libraries/armem/core/Time.h"
+#include <RobotAPI/libraries/armem/core/Time.h>
+
 
 namespace armarx::armem::robot_state
 {
@@ -34,7 +35,7 @@ namespace armarx::armem::robot_state
 
         std::string agent;
 
-        armem::Time timestamp; 
+        armem::Time timestamp;
     };
 
     struct Transform