diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp
index 2a3d01143be737e9afb7ce5c27253e2cb6d4891e..da477a238532c316ed729e833ebcc0a07f86cc2e 100644
--- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp
+++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp
@@ -130,6 +130,10 @@ namespace armarx::armem::server::robot_state
 
     void RobotStateMemory::onConnectComponent()
     {
+        waitUntilRobotUnitIsRunning();
+
+        ARMARX_CHECK_NOT_NULL(getRobotUnit()->getKinematicUnit());
+
         descriptionSegment.connect(getArvizClient(), getRobotUnit());
 
         proprioceptionSegment.connect(getArvizClient(), getRobotUnit());
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
index 7c120b3cc4db3aabbf6b184e5d747d3014ae0a61..7d32ae794b427f07dc27e38edd8178460ec9fbd4 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
@@ -1,4 +1,6 @@
 #include "RobotUnitComponentPlugin.h"
+#include "ArmarXCore/util/CPPUtility/Pointer.h"
+#include <thread>
 
 namespace armarx::plugins
 {
@@ -112,7 +114,11 @@ namespace armarx::plugins
     {
         _deactivated = true;
     }
-}
+
+
+
+
+}  // namespace armarx::plugins
 
 namespace armarx
 {
@@ -130,6 +136,18 @@ namespace armarx
     {
         return *plugin;
     }
+
+    void RobotUnitComponentPluginUser::waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond) const
+    {
+        ARMARX_INFO << "Waiting until robot unit is running ...";
+
+        while ((not termCond()) and ((isNullptr(getRobotUnit()) or (not getRobotUnit()->isRunning()))))
+        {
+            std::this_thread::sleep_for(std::chrono::milliseconds(100));
+        }
+
+        ARMARX_INFO << "Robot unit is up and running.";
+    }
 }
 
 
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
index 18616020e0683a70e6fcb0f95c7e7a09939db357..63d78de7da9033399b92497a7bccf89161337588 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
@@ -78,7 +78,20 @@ namespace armarx
     {
     public:
         RobotUnitComponentPluginUser();
+
         RobotUnitInterfacePrx getRobotUnit() const;
+
+        /**
+         * @brief Waits until the robot unit is running.
+         * 
+         * Although the robot unit proxy might be initialized (\see getRobotUnit()), the robot unit might
+         * not be fully initialized. 
+         * 
+         * @param termCond Termination condition. If it evaluates to true, waitUntilRobotUnitIsRunning returns without waiting 
+        *                  for the robot unit to become available.
+         */
+        void waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond = [] {return false;}) const;
+
         plugins::RobotUnitComponentPlugin& getRobotUnitComponentPlugin();
     private:
         armarx::plugins::RobotUnitComponentPlugin* plugin = nullptr;
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
index aa9e295bf19b34229697ad43725884469c9d1172..0402d8188e52b9a967805a7ddb9ca5df9c14320c 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
@@ -47,7 +47,6 @@ namespace armarx::armem::client::robot_state::localization
     */
     class TransformWriter :
         virtual public TransformWriterInterface
-    // virtual public ::armarx::armem::MemoryConnector
     {
     public:
         TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient);
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 826c5b484768686e2edb8cee409df4136bcc85ab..c4dc03c66eadfa840923bf32c5fc03533749f55b 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp
@@ -99,25 +99,8 @@ namespace armarx::armem::server::robot_state::description
     void Segment::updateRobotDescription()
     {
         ARMARX_CHECK_NOT_NULL(robotUnit);
+        auto kinematicUnit = robotUnit->getKinematicUnit();
 
-        const auto waitForKinematicUnit = [&]()
-        {
-            while (true)
-            {
-                auto kinematicUnit = robotUnit->getKinematicUnit();
-
-                if (kinematicUnit)
-                {
-                    ARMARX_INFO << "Kinematic unit is now available.";
-                    return kinematicUnit;
-                }
-
-                ARMARX_INFO << "Waiting for kinematic unit ...";
-                std::this_thread::sleep_for(std::chrono::seconds(1));
-            }
-        };
-
-        auto kinematicUnit = waitForKinematicUnit();
         ARMARX_CHECK_NOT_NULL(kinematicUnit);
 
         const auto robotName = kinematicUnit->getRobotName();