diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
index 354d1638df57ac5d16d44fa414eeed036c51084f..94036a4dcb7918c7e2069ec4cfbec1f7cd37080f 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
@@ -116,6 +116,7 @@ namespace armarx
             auto guard = getGuard();
             throwIfStateIsNot(RobotUnitState::InitializingComponent, __FUNCTION__);
 
+            cast_to_and_call(::armarx::RobotUnitModule::RobotData, _initVirtualRobot(), true);
 
 #define call_module_hook(Type) cast_to_and_call(::armarx::RobotUnitModule::Type, _preOnInitRobotUnit(), true)
             for_each_module(call_module_hook)
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
index 7434e8d6106a7e78a0bb967dda713225bc3c48ef..08816b35aa02412acfa416d69f10916834f54152 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
@@ -506,7 +506,7 @@ namespace armarx
             controlThreadId = std::this_thread::get_id();
         }
 
-        void ControlThread::_postOnInitRobotUnit()
+        void ControlThread::_preOnInitRobotUnit()
         {
             try
             {
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h
index c732eb4828cb51a158f5b4a20027af1f958e710d..665f17f1c0416622cad7b412133b648acd35833e 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h
@@ -61,8 +61,8 @@ namespace armarx
         private:
             ///@see \ref ModuleBase::_preFinishControlThreadInitialization
             void _preFinishControlThreadInitialization();
-            ///@see \ref ModuleBase::_postOnInitRobotUnit
-            void _postOnInitRobotUnit();
+            ///@see \ref ModuleBase::_preOnInitRobotUnit
+            void _preOnInitRobotUnit();
             // //////////////////////////////////////////////////////////////////////////////////////// //
             // ///////////////////////////////////// ice interface //////////////////////////////////// //
             // //////////////////////////////////////////////////////////////////////////////////////// //
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
index 6d5e841a5aa9befa7835f3110872e80c15894312..3b5e3bb28512b5d242a074db32cc6bcf84b97eb4 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
@@ -677,7 +677,7 @@ namespace armarx
             nJointControllers.clear();
         }
 
-        void ControllerManagement::_postOnInitRobotUnit()
+        void ControllerManagement::_preOnInitRobotUnit()
         {
             controllerCreateRobot = _module<RobotData>().cloneRobot();
         }
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h
index 91300315ab9586e675a1535a1c79fa6ac8fe0ca0..08d197d027d251d6df530cf2ba1d44f8c3367d5f 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h
@@ -53,8 +53,8 @@ namespace armarx
             // ///////////////////////////////// RobotUnitModule hooks //////////////////////////////// //
             // //////////////////////////////////////////////////////////////////////////////////////// //
         private:
-            /// @see ModuleBase::_postOnInitRobotUnit
-            void _postOnInitRobotUnit();
+            /// @see ModuleBase::_preOnInitRobotUnit
+            void _preOnInitRobotUnit();
             /// @see ModuleBase::_preFinishRunning
             void _preFinishRunning();
             /// @see ModuleBase::_postFinishRunning
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
index dc91877a6b095c9abb245cc3702e518bf72c079a..ab976c3e49eedc7e6c8ba5aebe6594b73f28609d 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
@@ -74,8 +74,10 @@ namespace armarx
             return clone;
         }
 
-        void armarx::RobotUnitModule::RobotData::_preOnInitRobotUnit()
+        void armarx::RobotUnitModule::RobotData::_initVirtualRobot()
         {
+            std::lock_guard<std::mutex> guard {robotMutex};
+            ARMARX_CHECK_IS_NULL(robot);
             robotNodeSetName    = getProperty<std::string>("RobotNodeSetName").getValue();
             robotProjectName    = getProperty<std::string>("RobotFileNameProject").getValue();
             robotFileName       = getProperty<std::string>("RobotFileName").getValue();
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
index 35a474f1e93736b456f516f017af4a0af204fc4f..ad3f31798bd6f05e57f42681a0145eec23ee0798 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
@@ -76,7 +76,7 @@ namespace armarx
             // //////////////////////////////////////////////////////////////////////////////////////// //
         private:
             /// @see ModuleBase::_preOnInitRobotUnit
-            void _preOnInitRobotUnit();
+            void _initVirtualRobot();
             // //////////////////////////////////////////////////////////////////////////////////////// //
             // /////////////////////////////////// Module interface /////////////////////////////////// //
             // //////////////////////////////////////////////////////////////////////////////////////// //
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
index 017015656ac4801422a8483058c0bee45f693bc1..4c345629add68e52cccad9b56b2b2db13167309d 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
@@ -111,10 +111,6 @@ namespace armarx
                 }
             }
             setSelfCollisionAvoidanceFrequency(getProperty<float>("SelfCollisionCheckFrequency").getValue());
-        }
-
-        void SelfCollisionChecker::_postOnInitRobotUnit()
-        {
             setSelfCollisionAvoidanceDistance(getProperty<float>("MinSelfDistance").getValue());
         }
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
index 7645cf87e3297e9e3087d44c44e52c2b187fd2bd..2ac3d7d1d07892403ada0a0d83320312109f2aa8 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
@@ -82,8 +82,6 @@ namespace armarx
         private:
             /// @see ModuleBase::_preOnInitRobotUnit
             void _preOnInitRobotUnit();
-            /// @see ModuleBase::_postOnInitRobotUnit
-            void _postOnInitRobotUnit();
             /// @see ModuleBase::_postFinishControlThreadInitialization
             void _postFinishControlThreadInitialization();
             /// @see ModuleBase::_preFinishRunning
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
index 9a963cd85985ab1533810ef145b254898809584a..8dd4ea34bbde1b5c3385b53f9b367792381410b4 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
@@ -485,6 +485,7 @@ namespace armarx
 
         void Units::_preOnInitRobotUnit()
         {
+            unitCreateRobot = _module<RobotData>().cloneRobot();
             ARMARX_DEBUG << "add emergency stop master";
             {
                 emergencyStopMaster = new RobotUnitEmergencyStopMaster {&_module<ControlThread>(),  getProperty<std::string>("EmergencyStopTopic").getValue()};
@@ -508,11 +509,6 @@ namespace armarx
             ARMARX_DEBUG << "add emergency stop master...done!";
         }
 
-        void Units::_postOnInitRobotUnit()
-        {
-            unitCreateRobot = _module<RobotData>().cloneRobot();
-        }
-
         void Units::_postOnExitRobotUnit()
         {
             ARMARX_DEBUG << "remove EmergencyStopMaster";
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h
index 692f2aa43a240686076e09a2b823f7b13a41edfb..f6667acfd771da85d6597307dba7f7a77399b1cb 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h
@@ -109,8 +109,6 @@ namespace armarx
         private:
             /// @see ModuleBase::_preOnInitRobotUnit
             void _preOnInitRobotUnit();
-            /// @see ModuleBase::_postOnInitRobotUnit
-            void _postOnInitRobotUnit();
             /// @see ModuleBase::_icePropertiesInitialized
             void _icePropertiesInitialized();
             /// @see ModuleBase::_preFinishRunning