diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
index a7083b662e54b0a0c02ad847c3e0f197bce74d58..cc1e89e592642c8adbd137c071023a472284e4ec 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
@@ -33,6 +33,44 @@
 
 namespace armarx::RobotUnitModule
 {
+
+    RobotDataPropertyDefinitions::RobotDataPropertyDefinitions(std::string prefix) :
+        ModuleBasePropertyDefinitions(prefix)
+    {
+        defineRequiredProperty<std::string>("RobotFileName",
+                                            "Robot file name, e.g. robot_model.xml");
+        defineOptionalProperty<std::string>("RobotFileNameProject",
+                                            "",
+                                            "Project in which the robot filename is located "
+                                            "(if robot is loaded from an external project)");
+
+        defineOptionalProperty<std::string>(
+            "RobotName",
+            "",
+            "Override robot name if you want to load multiple robots of the same type");
+        defineOptionalProperty<std::string>(
+            "RobotNodeSetName",
+            "Robot",
+            "Robot node set name as defined in robot xml file, e.g. 'LeftArm'");
+        defineOptionalProperty<std::string>(
+            "PlatformName",
+            "Platform",
+            "Name of the platform needs to correspond to a node in the virtual robot.");
+        defineOptionalProperty<bool>("PlatformAndLocalizationUnitsEnabled",
+                                     true,
+                                     "Enable or disable the platform and localization units.");
+        defineOptionalProperty<std::string>("PlatformInstanceName",
+                                            "Platform",
+                                            "Name of the platform instance (will publish "
+                                            "values on PlatformInstanceName + 'State')");
+    }
+
+    bool
+    RobotData::arePlatformAndLocalizationUnitsEnabled() const
+    {
+        return _arePlatformAndLocalizationUnitsEnabled;
+    }
+
     const std::string&
     RobotData::getRobotPlatformName() const
     {
@@ -112,6 +150,8 @@ namespace armarx::RobotUnitModule
         robotProjectName = getProperty<std::string>("RobotFileNameProject").getValue();
         robotFileName = getProperty<std::string>("RobotFileName").getValue();
         robotPlatformName = getProperty<std::string>("PlatformName").getValue();
+        _arePlatformAndLocalizationUnitsEnabled =
+            getProperty<bool>("PlatformAndLocalizationUnitsEnabled").getValue();
         robotPlatformInstanceName = getProperty<std::string>("PlatformInstanceName").getValue();
 
         //load robot
@@ -160,4 +200,5 @@ namespace armarx::RobotUnitModule
             robotPool.reset(new RobotPool(robot, 10));
         }
     }
+
 } // namespace armarx::RobotUnitModule
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
index 7b5defcbfbec169a83e7185f688a5016851c24ab..c6e94bd515bea5a6f88597c935eb277c234a33d2 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
@@ -40,32 +40,7 @@ namespace armarx::RobotUnitModule
     class RobotDataPropertyDefinitions : public ModuleBasePropertyDefinitions
     {
     public:
-        RobotDataPropertyDefinitions(std::string prefix) : ModuleBasePropertyDefinitions(prefix)
-        {
-            defineRequiredProperty<std::string>("RobotFileName",
-                                                "Robot file name, e.g. robot_model.xml");
-            defineOptionalProperty<std::string>("RobotFileNameProject",
-                                                "",
-                                                "Project in which the robot filename is located "
-                                                "(if robot is loaded from an external project)");
-
-            defineOptionalProperty<std::string>(
-                "RobotName",
-                "",
-                "Override robot name if you want to load multiple robots of the same type");
-            defineOptionalProperty<std::string>(
-                "RobotNodeSetName",
-                "Robot",
-                "Robot node set name as defined in robot xml file, e.g. 'LeftArm'");
-            defineOptionalProperty<std::string>(
-                "PlatformName",
-                "Platform",
-                "Name of the platform needs to correspond to a node in the virtual robot.");
-            defineOptionalProperty<std::string>("PlatformInstanceName",
-                                                "Platform",
-                                                "Name of the platform instance (will publish "
-                                                "values on PlatformInstanceName + 'State')");
-        }
+        RobotDataPropertyDefinitions(std::string prefix);
     };
 
     /**
@@ -99,21 +74,26 @@ namespace armarx::RobotUnitModule
         // /////////////////////////////////// Module interface /////////////////////////////////// //
         // //////////////////////////////////////////////////////////////////////////////////////// //
     public:
+        bool arePlatformAndLocalizationUnitsEnabled() const;
+
         /**
          * @brief Returns the name of the robot's platform
          * @return The name of the robot's platform
          */
         const std::string& getRobotPlatformName() const;
+
         /**
          * @brief Returns the name of the robot's RobotNodeSet
          * @return The name of the robot's RobotNodeSet
          */
         const std::string& getRobotNodetSeName() const;
+
         /**
          * @brief Returns the name of the project containing the robot's model
          * @return The name of the project containing the robot's model
          */
         const std::string& getRobotProjectName() const;
+
         /**
          * @brief Returns the file name of the robot's model
          * @return The file name of the robot's model
@@ -150,6 +130,8 @@ namespace armarx::RobotUnitModule
         std::string robotFileName;
         /// @brief The name of the robot's platform
         std::string robotPlatformName;
+        /// @brief Indicates whether the robot platform unit is enabled.
+        bool _arePlatformAndLocalizationUnitsEnabled = false;
         /// @brief The name of the robot's platform instance
         std::string robotPlatformInstanceName;
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
index ad3cc0f97680eabc2519b58598823294c770733f..bd92c93f31a9007c338b9ae4bcd52d9ebe1c4d50 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp
@@ -163,29 +163,54 @@ namespace armarx::RobotUnitModule
     void
     Units::initializeDefaultUnits()
     {
+        ARMARX_TRACE;
         throwIfInControlThread(BOOST_CURRENT_FUNCTION);
         auto beg = TimeUtil::GetTime(true);
         {
+            ARMARX_TRACE;
             auto guard = getGuard();
+
+            ARMARX_TRACE;
             throwIfStateIsNot(RobotUnitState::InitializingUnits, __FUNCTION__);
             ARMARX_INFO << "initializing default units";
+
+            ARMARX_TRACE;
             initializeKinematicUnit();
             ARMARX_DEBUG << "KinematicUnit initialized";
 
-            ARMARX_DEBUG << "initializing LocalizationUnit";
-            initializeLocalizationUnit();
-            ARMARX_DEBUG << "LocalizationUnit initialized";
+            ARMARX_TRACE;
+            if (_module<RobotData>().arePlatformAndLocalizationUnitsEnabled())
+            {
+                ARMARX_DEBUG << "initializing LocalizationUnit";
+                initializeLocalizationUnit();
+                ARMARX_DEBUG << "LocalizationUnit initialized";
+            }
+            ARMARX_TRACE;
+
+            if (_module<RobotData>().arePlatformAndLocalizationUnitsEnabled())
+            {
+                ARMARX_DEBUG << "initializing PlatformUnit";
+                initializePlatformUnit();
+                ARMARX_DEBUG << "PlatformUnit initialized";
+            }
 
-            initializePlatformUnit();
-            ARMARX_DEBUG << "PlatformUnit initialized";
+            ARMARX_TRACE;
             initializeForceTorqueUnit();
             ARMARX_DEBUG << "ForceTorqueUnit initialized";
+
+            ARMARX_TRACE;
             initializeInertialMeasurementUnit();
             ARMARX_DEBUG << "InertialMeasurementUnit initialized";
+
+            ARMARX_TRACE;
             initializeTrajectoryControllerUnit();
             ARMARX_DEBUG << "TrajectoryControllerUnit initialized";
+
+            ARMARX_TRACE;
             initializeTcpControllerUnit();
             ARMARX_DEBUG << "TcpControllerUnit initialized";
+
+            ARMARX_TRACE;
         }
         ARMARX_INFO << "initializing default units...done! "
                     << (TimeUtil::GetTime(true) - beg).toMicroSeconds() << " us";
@@ -371,6 +396,8 @@ namespace armarx::RobotUnitModule
         using UnitT = PlatformSubUnit;
         using IfaceT = PlatformUnitInterface;
 
+        ARMARX_TRACE;
+
         auto guard = getGuard();
         throwIfStateIsNot(RobotUnitState::InitializingUnits, __FUNCTION__);
         //check if unit is already added
@@ -378,12 +405,14 @@ namespace armarx::RobotUnitModule
         {
             return;
         }
+        ARMARX_TRACE;
         //is there a platform dev?
         if (_module<RobotData>().getRobotPlatformName().empty())
         {
             ARMARX_INFO << "no platform unit created since no platform name was given";
             return;
         }
+        ARMARX_TRACE;
         if (!_module<Devices>().getControlDevices().has(
                 _module<RobotData>().getRobotPlatformName()))
         {
@@ -392,16 +421,19 @@ namespace armarx::RobotUnitModule
                 << _module<RobotData>().getRobotPlatformName() << "' was not found";
             return;
         }
+        ARMARX_TRACE;
         const ControlDevicePtr& controlDevice =
             _module<Devices>().getControlDevices().at(_module<RobotData>().getRobotPlatformName());
         const SensorDevicePtr& sensorDevice =
             _module<Devices>().getSensorDevices().at(_module<RobotData>().getRobotPlatformName());
         JointController* jointVel =
             controlDevice->getJointController(ControlModes::HolonomicPlatformVelocity);
+        ARMARX_TRACE;
         ARMARX_CHECK_EXPRESSION(jointVel);
         ARMARX_CHECK_EXPRESSION(
             sensorDevice->getSensorValue()->asA<SensorValueHolonomicPlatform>());
         //add it
+        ARMARX_TRACE;
         const std::string configName = getProperty<std::string>("PlatformUnitName");
         const std::string confPre = getConfigDomain() + "." + configName + ".";
         Ice::PropertiesPtr properties = getIceProperties()->clone();
@@ -411,9 +443,11 @@ namespace armarx::RobotUnitModule
                                 _module<RobotData>().getRobotPlatformInstanceName());
         ARMARX_DEBUG << "creating unit " << configName
                      << " using these properties: " << properties->getPropertiesForPrefix("");
+        ARMARX_TRACE;
         IceInternal::Handle<UnitT> unit =
             Component::create<UnitT>(properties, configName, getConfigDomain());
         //config
+        ARMARX_TRACE;
         NJointHolonomicPlatformUnitVelocityPassThroughControllerConfigPtr config =
             new NJointHolonomicPlatformUnitVelocityPassThroughControllerConfig;
         config->initialVelocityX = 0;
@@ -427,8 +461,10 @@ namespace armarx::RobotUnitModule
                 config,
                 false,
                 true));
+        ARMARX_TRACE;
         ARMARX_CHECK_EXPRESSION(ctrl);
         unit->pt = ctrl;
+        ARMARX_TRACE;
 
         NJointHolonomicPlatformRelativePositionControllerConfigPtr configRelativePositionCtrlCfg =
             new NJointHolonomicPlatformRelativePositionControllerConfig;
@@ -457,9 +493,11 @@ namespace armarx::RobotUnitModule
                 configGlobalPositionCtrlCfg,
                 false,
                 true));
+        ARMARX_TRACE;
         ARMARX_CHECK_EXPRESSION(ctrlGlobalPosition);
         unit->pt = ctrl;
         unit->globalPosCtrl = ctrlGlobalPosition;
+        ARMARX_TRACE;
 
         unit->platformSensorIndex = _module<Devices>().getSensorDevices().index(
             _module<RobotData>().getRobotPlatformName());
@@ -470,12 +508,14 @@ namespace armarx::RobotUnitModule
     void
     Units::initializeLocalizationUnit()
     {
+        ARMARX_TRACE;
         ARMARX_DEBUG << "initializeLocalizationUnit";
 
         throwIfInControlThread(BOOST_CURRENT_FUNCTION);
         using UnitT = LocalizationSubUnit;
         using IfaceT = LocalizationUnitInterface;
 
+        ARMARX_TRACE;
         auto guard = getGuard();
         throwIfStateIsNot(RobotUnitState::InitializingUnits, __FUNCTION__);
         //check if unit is already added
@@ -483,13 +523,18 @@ namespace armarx::RobotUnitModule
         {
             return;
         }
+        ARMARX_TRACE;
 
         ARMARX_DEBUG << "Getting device SensorValueHolonomicPlatformRelativePosition";
+        ARMARX_CHECK(
+            _module<Devices>().getSensorDevices().has(_module<RobotData>().getRobotPlatformName()))
+            << _module<RobotData>().getRobotPlatformName();
         const SensorDevicePtr& sensorDeviceRelativePosition =
             _module<Devices>().getSensorDevices().at(_module<RobotData>().getRobotPlatformName());
         ARMARX_CHECK_EXPRESSION(sensorDeviceRelativePosition->getSensorValue()
                                     ->asA<SensorValueHolonomicPlatformRelativePosition>());
 
+        ARMARX_TRACE;
         // const SensorDevicePtr& sensorDevicePoseCorrection = _module<Devices>().getSensorDevices().at(GlobalRobotPoseCorrectionSensorDevice::DeviceName());
         // ARMARX_CHECK_EXPRESSION(sensorDeviceRelativePosition->getSensorValue()->asA<SensorValueGlobalPoseCorrection>());