diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
index f4766748fc26e7e98dff2d3854e5679d9af3232d..2bb10f999e6cf7c9a0a873ce1316e5148550732f 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
@@ -26,7 +26,6 @@
 
 #include "NJointControllerWithTripleBuffer.h"
 #include <VirtualRobot/Robot.h>
-#include "../RobotUnit.h"
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
 #include <VirtualRobot/IK/DifferentialIK.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
index be78c455cc14016f9a11f4413d10f5b931ad2b79..81394ce916138417457267ec2ac4ef73fb294f22 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
@@ -26,7 +26,6 @@
 
 #include "NJointControllerWithTripleBuffer.h"
 #include <VirtualRobot/Robot.h>
-#include "../RobotUnit.h"
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
 #include <VirtualRobot/IK/DifferentialIK.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
index 6e76d90c346caecfeee3adefa47783696ecbb327..37a362c9b5215db5367938b136fcb85e9f665622 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
@@ -26,7 +26,6 @@
 
 #include "NJointControllerWithTripleBuffer.h"
 #include <VirtualRobot/Robot.h>
-#include "../RobotUnit.h"
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
 #include <VirtualRobot/IK/DifferentialIK.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
index a818eb3cb75fdd301e8e753767b171a05c7a9fb3..b722dbf67a909db336252ce8ef735e6629977526 100755
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
@@ -31,7 +31,6 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include "NJointControllerWithTripleBuffer.h"
-#include "../RobotUnit.h"
 #include "../SensorValues/SensorValueHolonomicPlatform.h"
 
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
index 2f7e85d5a2e408d6df56e16709029854fb71e822..788a45607361a8fd3f8a36aeb54cbf9042416236 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
@@ -31,7 +31,6 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include "NJointControllerWithTripleBuffer.h"
-#include "../RobotUnit.h"
 #include "../SensorValues/SensorValueHolonomicPlatform.h"
 
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
index f85806eda4386d35940f9f850055241c7dd4bab3..0d8b30e6b30fc0ab29a6183de6f55a73e01b30c3 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
@@ -29,7 +29,7 @@ namespace armarx
     NJointControllerRegistration<NJointKinematicUnitPassThroughController> registrationControllerNJointKinematicUnitPassThroughController("NJointKinematicUnitPassThroughController");
 
     NJointKinematicUnitPassThroughController::NJointKinematicUnitPassThroughController(
-        RobotUnitPtr prov,
+        RobotUnit* prov,
         const NJointKinematicUnitPassThroughControllerConfigPtr& cfg,
         const VirtualRobot::RobotPtr&)
     {
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
index 43f520fae9d83e81ff82172ba7b66af956bbb446..cbbb83f65750f6aa9e9d1de7d0f7c2e1abe3fdf4 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
@@ -29,7 +29,6 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include "NJointControllerBase.h"
-#include "../RobotUnit.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
 
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
@@ -57,7 +56,7 @@ namespace armarx
         using ConfigPtrT = NJointKinematicUnitPassThroughControllerConfigPtr;
 
         inline NJointKinematicUnitPassThroughController(
-            RobotUnitPtr prov,
+            RobotUnit* prov,
             const NJointKinematicUnitPassThroughControllerConfigPtr& cfg,
             const VirtualRobot::RobotPtr&);
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
index 2f8fdd4341220145814a5af671061e59175e83e1..fcedf27a6a87d533ce5cd67a23cd7c9d36e7774b 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
@@ -158,7 +158,7 @@ namespace armarx
         return new NJointTCPControllerConfig {values.at("nodeSetName")->getString(), values.at("tcpName")->getString()};
     }
 
-    NJointTCPController::NJointTCPController(RobotUnitPtr robotUnit, NJointTCPControllerConfigPtr config, const VirtualRobot::RobotPtr& r)
+    NJointTCPController::NJointTCPController(RobotUnit* robotUnit, const NJointTCPControllerConfigPtr& config, const VirtualRobot::RobotPtr& r)
     {
         ARMARX_CHECK_EXPRESSION(robotUnit);
         ARMARX_CHECK_EXPRESSION(!config->nodeSetName.empty());
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
index 43f4246c5a0280e8aa4f5f29d7be1572bab080c2..41a93a0c368288536ca2eca179b8532fe1d6e01a 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
@@ -26,7 +26,6 @@
 
 #include "NJointControllerWithTripleBuffer.h"
 #include <VirtualRobot/Robot.h>
-#include "../RobotUnit.h"
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
 #include <VirtualRobot/IK/DifferentialIK.h>
@@ -72,7 +71,7 @@ namespace armarx
     {
     public:
         using ConfigPtrT = NJointTCPControllerConfigPtr;
-        NJointTCPController(RobotUnitPtr prov, const NJointControllerConfigPtr& config, const VirtualRobot::RobotPtr&);
+        NJointTCPController(RobotUnit* prov, const NJointTCPControllerConfigPtr& config, const VirtualRobot::RobotPtr& r);
 
         // NJointControllerInterface interface
         std::string getClassName(const Ice::Current&) const override;
@@ -87,10 +86,6 @@ namespace armarx
             const std::map<std::string, ConstSensorDevicePtr>&);
 
         static NJointTCPControllerConfigPtr GenerateConfigFromVariants(const StringVariantBaseMap& values);
-        NJointTCPController(
-            RobotUnitPtr prov,
-            NJointTCPControllerConfigPtr config,
-            const VirtualRobot::RobotPtr& r);
 
         // for TCPControlUnit
         void setVelocities(float xVel, float yVel, float zVel, float rollVel, float pitchVel, float yawVel, VirtualRobot::IKSolver::CartesianSelection mode);
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.cpp
index 086eabf15c900b80d4fd713e6c70ec22a4838fdb..74a360222f9cb4d11ee68667b1beb0f38c5f9598 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.cpp
@@ -22,6 +22,7 @@
 #include "KinematicSubUnit.h"
 #include <VirtualRobot/RobotNodeSet.h>
 #include <RobotAPI/libraries/RobotStatechartHelpers/KinematicUnitHelper.h>
+#include <RobotAPI/components/units/RobotUnit/RobotUnit.h>
 
 armarx::KinematicSubUnit::KinematicSubUnit() :
     reportSkipper(20.0f)
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp
index 4f320f59ce2d0181473fe7231ed56a5f6ad0a67d..67b7eec6c4b3aa1dec80caa3efc7108adbaef84c 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp
@@ -25,6 +25,7 @@
 #include <RobotAPI/libraries/core/FramedPose.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h>
+#include <RobotAPI/components/units/RobotUnit/RobotUnit.h>
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityControllerWithRamp.h>
 
 
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.h
index cb7f6603057bdf2219d3f2aa92506bc6d76d2d53..b952748176b9940a8c5529775faaadb22ce574ab 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.h
@@ -28,6 +28,8 @@
 #include "../NJointControllers/NJointTCPController.h"
 #include "../util.h"
 
+#include <ArmarXCore/core/Component.h>
+
 #include <mutex>
 
 namespace armarx