From ce3ef77c3c538940db322fc11c93d8910c81ecee Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Tue, 10 Dec 2024 14:36:00 +0100
Subject: [PATCH 1/4] optimizing includes

---
 .../RobotAPI/components/ArViz/CMakeLists.txt  |   3 +
 .../ArViz/Coin/VisualizationCylindroid.cpp    |  63 ++++++++++
 .../ArViz/Coin/VisualizationCylindroid.h      |  39 +-----
 .../ArViz/Coin/VisualizationEllipsoid.cpp     |  31 +++++
 .../ArViz/Coin/VisualizationEllipsoid.h       |  30 +----
 .../ArViz/Coin/VisualizationMesh.cpp          | 113 ++++++++++++++++++
 .../components/ArViz/Coin/VisualizationMesh.h | 109 +----------------
 .../ArViz/Coin/VisualizationObject.cpp        |   3 +
 .../ArViz/Coin/VisualizationPointCloud.h      |   2 +
 .../ArViz/Coin/VisualizationPolygon.h         |   1 +
 .../components/ArViz/Coin/VisualizationPose.h |   1 +
 .../ArViz/Coin/VisualizationRobot.cpp         |   2 +
 .../DebugDrawer/DebugDrawerComponent.cpp      |   2 +
 .../DebugDrawer/DebugDrawerComponent.h        |   1 -
 .../DebugDrawer/DebugDrawerHelper.cpp         |   2 +
 .../DebugDrawer/DebugDrawerHelper.h           |   2 +-
 .../DebugDrawer/DebugDrawerUtils.cpp          |  49 ++++++++
 .../components/DebugDrawer/DebugDrawerUtils.h |  50 +-------
 .../NaturalIKTest/NaturalIKTest.cpp           |   1 +
 .../components/ObjectMemoryEditor/Editor.h    |   1 +
 .../ObjectInstanceToIndex.h                   |   2 +
 .../armem/server/GraspMemory/GraspMemory.h    |   2 +-
 source/RobotAPI/components/ik_demo/IkDemo.cpp |   1 +
 source/RobotAPI/components/units/HandUnit.cpp |   1 +
 .../components/units/KinematicUnit.cpp        |   1 +
 .../RobotAPI/components/units/KinematicUnit.h |   4 +-
 .../ObstacleAwarePlatformUnit.cpp             |   3 +-
 .../ObstacleAwarePlatformUnit.h               |   4 +-
 .../CartesianImpedanceController.cpp          |   9 ++
 .../CartesianImpedanceController.h            |  11 +-
 .../RobotUnit/DefaultWidgetDescriptions.cpp   |  32 +++++
 .../RobotUnit/DefaultWidgetDescriptions.h     |  41 ++-----
 ...ointCartesianNaturalPositionController.cpp |   1 +
 .../NJointCartesianTorqueController.cpp       |   2 +
 .../NJointCartesianTorqueController.h         |   3 +-
 .../NJointCartesianVelocityController.cpp     |   4 +
 .../NJointCartesianVelocityController.h       |   8 +-
 ...intCartesianVelocityControllerWithRamp.cpp |   2 +
 ...JointCartesianVelocityControllerWithRamp.h |   4 +-
 .../NJointCartesianWaypointController.cpp     |   2 +
 .../NJointControllers/NJointControllerBase.h  |   5 +-
 ...onomicPlatformGlobalPositionController.cpp |   1 +
 ...olonomicPlatformGlobalPositionController.h |   3 +-
 ...omicPlatformRelativePositionController.cpp |   2 +
 ...onomicPlatformRelativePositionController.h |   2 +-
 ...tformUnitVelocityPassThroughController.cpp |   2 +
 ...latformUnitVelocityPassThroughController.h |   3 +-
 ...omicPlatformVelocityControllerWithRamp.cpp |   5 +
 ...onomicPlatformVelocityControllerWithRamp.h |   7 +-
 ...ointKinematicUnitPassThroughController.cpp |   2 +
 ...NJointKinematicUnitPassThroughController.h |   2 +-
 .../NJointControllers/NJointTCPController.cpp |   2 +
 .../NJointControllers/NJointTCPController.h   |   5 +-
 .../NJointTaskSpaceImpedanceController.cpp    |   4 +
 .../NJointTaskSpaceImpedanceController.h      |   3 +-
 .../NJointTrajectoryController.cpp            |   2 +
 .../NJointTrajectoryController.h              |   2 +-
 .../components/units/RobotUnit/RobotUnit.cpp  |   5 +
 .../components/units/RobotUnit/RobotUnit.h    |   6 +-
 .../RobotUnitModules/RobotUnitModuleBase.cpp  |   2 +
 .../RobotUnitModules/RobotUnitModuleBase.h    |   2 +-
 .../RobotUnitModuleControlThread.cpp          |   1 +
 ...RobotUnitModuleControlThreadDataBuffer.cpp |   2 +
 .../RobotUnitModuleControlThreadDataBuffer.h  |   3 +-
 .../RobotUnitModules/RobotUnitModuleDevices.h |   6 +
 .../RobotUnitModuleRobotData.cpp              |   2 +
 .../RobotUnitModuleRobotData.h                |   2 +-
 .../RobotUnitModuleSelfCollisionChecker.cpp   |   3 +
 .../RobotUnitModuleSelfCollisionChecker.h     |   2 +-
 .../RobotUnit/Units/LocalizationSubUnit.cpp   |   1 +
 .../RobotUnit/Units/LocalizationSubUnit.h     |   1 -
 .../units/RobotUnit/Units/PlatformSubUnit.cpp |   1 +
 .../units/RobotUnit/Units/PlatformSubUnit.h   |   2 -
 .../units/RobotUnit/util/DynamicsHelper.cpp   |   4 +
 .../units/RobotUnit/util/DynamicsHelper.h     |   2 +-
 .../components/units/TCPControlUnit.cpp       |   2 +
 .../components/units/TCPControlUnit.h         |   3 +-
 ...FTSensorCalibrationGuiWidgetController.cpp |   1 +
 .../KinematicUnitGuiPlugin.cpp                |   9 +-
 .../KinematicUnitGuiPlugin.h                  |   8 +-
 .../RobotViewerGuiPlugin.cpp                  |   8 +-
 .../RobotViewerPlugin/RobotViewerGuiPlugin.h  |   8 +-
 .../ArmarXTCPMover/TCPMover.cpp               |   5 +-
 .../ArmarXTCPMover/TCPMover.h                 |   8 +-
 .../libraries/ArmarXObjects/ObjectPose.cpp    |   1 +
 .../BimanualGraspCandidateHelper.cpp          |   1 +
 .../BimanualGraspCandidateHelper.h            |   2 +-
 .../GraspingUtility/GraspCandidateHelper.cpp  |   1 +
 .../GraspingUtility/GraspCandidateHelper.h    |   2 +-
 .../GraspingUtility/GraspTrajectory.cpp       |   1 +
 .../box_to_grasp_candidates.cpp               |   2 +
 .../grasp_candidate_drawer.cpp                |   1 +
 .../RobotStateComponentPlugin.cpp             |   4 +
 .../RobotStateComponentPlugin.h               |   2 +-
 .../ObstacleAvoidingPlatformUnitHelper.cpp    |   1 +
 .../ObstacleAvoidingPlatformUnitHelper.h      |   2 +-
 .../PositionControllerHelper.cpp              |   3 +
 .../PositionControllerHelper.h                |   3 +-
 .../RobotNameHelper.cpp                       |   5 +
 .../RobotStatechartHelpers/RobotNameHelper.h  |   2 -
 .../server/KnownGraspProviderSegment.cpp      |   2 +
 .../ArticulatedObjectWriter.cpp               |   1 +
 .../client/common/VirtualRobotReader.cpp      |   1 +
 .../client/common/VirtualRobotReader.h        |   1 -
 .../client/common/VirtualRobotWriter.h        |   2 -
 .../client/localization/TransformReader.h     |   2 +
 .../armem_robot_state/server/common/Visu.cpp  |   1 +
 .../RobotAPI/libraries/armem_vision/types.h   |   4 +-
 ...CartesianFeedForwardPositionController.cpp |   6 +
 .../CartesianFeedForwardPositionController.h  |   8 +-
 .../CartesianNaturalPositionController.cpp    |   2 +
 .../core/CartesianPositionController.cpp      |   6 +
 .../core/CartesianPositionController.h        |   7 +-
 .../core/CartesianVelocityController.cpp      |   5 +-
 .../core/CartesianVelocityController.h        |   3 +-
 .../CartesianVelocityControllerWithRamp.cpp   |   4 +
 .../CartesianVelocityControllerWithRamp.h     |   3 +-
 .../libraries/core/CartesianVelocityRamp.cpp  |   4 +-
 .../libraries/core/CartesianVelocityRamp.h    |   5 +-
 .../core/CartesianWaypointController.cpp      |   1 +
 .../core/CartesianWaypointController.h        |   2 +-
 .../libraries/core/FramedOrientedPoint.cpp    |   1 -
 .../libraries/core/FramedOrientedPoint.h      |   4 -
 source/RobotAPI/libraries/core/RobotPool.cpp  |   1 +
 source/RobotAPI/libraries/core/RobotPool.h    |   5 +-
 .../core/remoterobot/RemoteRobot.cpp          |   9 +-
 .../libraries/core/remoterobot/RemoteRobot.h  |  13 +-
 .../core/remoterobot/RemoteRobotNode.cpp      |   1 +
 .../libraries/diffik/CompositeDiffIK.cpp      |  22 ++++
 .../libraries/diffik/CompositeDiffIK.h        |  21 +---
 .../libraries/diffik/GraspTrajectory.cpp      |   3 +
 .../libraries/diffik/GraspTrajectory.h        |   3 -
 .../libraries/diffik/NaturalDiffIK.cpp        |   5 +
 .../RobotAPI/libraries/diffik/NaturalDiffIK.h |   6 +-
 .../libraries/diffik/SimpleDiffIK.cpp         |  22 +++-
 .../RobotAPI/libraries/diffik/SimpleDiffIK.h  |  20 +---
 ...artesianNaturalPositionControllerProxy.cpp |   4 +-
 source/RobotAPI/libraries/natik/NaturalIK.cpp |   6 +-
 source/RobotAPI/libraries/natik/NaturalIK.h   |   4 +-
 .../CollisionModelHelper.cpp                  |   1 +
 .../RobotNameHelperTestGroup/TestGetNames.cpp |   2 +-
 141 files changed, 646 insertions(+), 403 deletions(-)
 create mode 100644 source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.cpp
 create mode 100644 source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.cpp
 create mode 100644 source/RobotAPI/components/ArViz/Coin/VisualizationMesh.cpp
 create mode 100644 source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.cpp

diff --git a/source/RobotAPI/components/ArViz/CMakeLists.txt b/source/RobotAPI/components/ArViz/CMakeLists.txt
index 963805867..734be2bc9 100644
--- a/source/RobotAPI/components/ArViz/CMakeLists.txt
+++ b/source/RobotAPI/components/ArViz/CMakeLists.txt
@@ -71,6 +71,9 @@ set(SOURCES
     Coin/VisualizationRobot.cpp
     Coin/VisualizationPath.cpp
     Coin/VisualizationObject.cpp
+    Coin/VisualizationMesh.cpp
+    Coin/VisualizationEllipsoid.cpp
+    Coin/VisualizationCylindroid.cpp
 
     Coin/Visualizer.cpp
     Coin/RegisterVisualizationTypes.cpp
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.cpp
new file mode 100644
index 000000000..6d2cc827a
--- /dev/null
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.cpp
@@ -0,0 +1,63 @@
+/**
+ * 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      (  )
+ * @date       2024
+ * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
+ *             GNU General Public License
+ */
+ 
+ #include "VisualizationCylindroid.h"
+ 
+#include <Inventor/nodes/SoMaterial.h>
+ 
+ bool
+ armarx::viz::coin::VisualizationCylindroid::update(ElementType const& element)
+ {
+     auto color = element.color;
+     constexpr float conv = 1.0f / 255.0f;
+     const float r = color.r * conv;
+     const float g = color.g * conv;
+     const float b = color.b * conv;
+     const float a = color.a * conv;
+
+     VirtualRobot::VisualizationNodePtr cylindroid_node;
+     {
+         // Params.
+         SoMaterial* mat = new SoMaterial;
+         mat->diffuseColor.setValue(r, g, b);
+         mat->ambientColor.setValue(r, g, b);
+         mat->transparency.setValue(1. - a);
+
+         SoSeparator* res = new SoSeparator();
+         res->ref();
+         SoUnits* u = new SoUnits();
+         u->units = SoUnits::MILLIMETERS;
+         res->addChild(u);
+         res->addChild(VirtualRobot::CoinVisualizationFactory::CreateCylindroid(
+             element.axisLengths.e0, element.axisLengths.e1, element.height, mat));
+
+         cylindroid_node.reset(new VirtualRobot::CoinVisualizationNode(res));
+         res->unref();
+     }
+
+     SoNode* cylindroid = dynamic_cast<VirtualRobot::CoinVisualizationNode&>(*cylindroid_node)
+                              .getCoinVisualization();
+
+     node->removeAllChildren();
+     node->addChild(cylindroid);
+
+     return true;
+ }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.h b/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.h
index 478f99c01..ded11d250 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationCylindroid.h
@@ -15,43 +15,6 @@ namespace armarx::viz::coin
     {
         using ElementType = data::ElementCylindroid;
 
-        bool update(ElementType const& element)
-        {
-            auto color = element.color;
-            constexpr float conv = 1.0f / 255.0f;
-            const float r = color.r * conv;
-            const float g = color.g * conv;
-            const float b = color.b * conv;
-            const float a = color.a * conv;
-
-            VirtualRobot::VisualizationNodePtr cylindroid_node;
-            {
-                // Params.
-                SoMaterial* mat = new SoMaterial;
-                mat->diffuseColor.setValue(r, g, b);
-                mat->ambientColor.setValue(r, g, b);
-                mat->transparency.setValue(1. - a);
-
-                SoSeparator* res = new SoSeparator();
-                res->ref();
-                SoUnits* u = new SoUnits();
-                u->units = SoUnits::MILLIMETERS;
-                res->addChild(u);
-                res->addChild(VirtualRobot::CoinVisualizationFactory::CreateCylindroid(
-                                  element.axisLengths.e0, element.axisLengths.e1, element.height,
-                                  mat));
-
-                cylindroid_node.reset(new VirtualRobot::CoinVisualizationNode(res));
-                res->unref();
-            }
-
-            SoNode* cylindroid = dynamic_cast<VirtualRobot::CoinVisualizationNode&>(
-                                     *cylindroid_node).getCoinVisualization();
-
-            node->removeAllChildren();
-            node->addChild(cylindroid);
-
-            return true;
-        }
+        bool update(ElementType const& element);
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.cpp
new file mode 100644
index 000000000..65fa3c22b
--- /dev/null
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.cpp
@@ -0,0 +1,31 @@
+#include "VisualizationEllipsoid.h"
+
+#include <Inventor/nodes/SoComplexity.h>
+#include <Inventor/nodes/SoScale.h>
+#include <Inventor/nodes/SoSphere.h>
+
+armarx::viz::coin::VisualizationEllipsoid::VisualizationEllipsoid()
+{
+    complexity = new SoComplexity();
+    complexity->type.setValue(SoComplexity::OBJECT_SPACE);
+    complexity->value.setValue(1.0f);
+
+    scale = new SoScale;
+
+    sphere = new SoSphere();
+    // We create a unit sphere and create an ellipsoid through scaling
+    sphere->radius.setValue(1.0f);
+
+    node->addChild(complexity);
+    node->addChild(scale);
+    node->addChild(sphere);
+}
+
+bool
+armarx::viz::coin::VisualizationEllipsoid::update(ElementType const& element)
+{
+    scale->scaleFactor.setValue(
+        element.axisLengths.e0, element.axisLengths.e1, element.axisLengths.e2);
+
+    return true;
+}
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.h b/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.h
index e0c3e4db4..e38337629 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationEllipsoid.h
@@ -4,9 +4,9 @@
 
 #include <RobotAPI/interface/ArViz/Elements.h>
 
-#include <Inventor/nodes/SoComplexity.h>
-#include <Inventor/nodes/SoScale.h>
-#include <Inventor/nodes/SoSphere.h>
+class SoComplexity;
+class SoScale;
+class SoSphere;
 
 namespace armarx::viz::coin
 {
@@ -14,29 +14,9 @@ namespace armarx::viz::coin
     {
         using ElementType = data::ElementEllipsoid;
 
-        VisualizationEllipsoid()
-        {
-            complexity = new SoComplexity();
-            complexity->type.setValue(SoComplexity::OBJECT_SPACE);
-            complexity->value.setValue(1.0f);
+        VisualizationEllipsoid();
 
-            scale = new SoScale;
-
-            sphere = new SoSphere();
-            // We create a unit sphere and create an ellipsoid through scaling
-            sphere->radius.setValue(1.0f);
-
-            node->addChild(complexity);
-            node->addChild(scale);
-            node->addChild(sphere);
-        }
-
-        bool update(ElementType const& element)
-        {
-            scale->scaleFactor.setValue(element.axisLengths.e0, element.axisLengths.e1, element.axisLengths.e2);
-
-            return true;
-        }
+        bool update(ElementType const& element);
 
         SoMaterial* material = nullptr;
         SoComplexity* complexity = nullptr;
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.cpp
new file mode 100644
index 000000000..90a5ae9ee
--- /dev/null
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.cpp
@@ -0,0 +1,113 @@
+#include "VisualizationMesh.h"
+
+#include <Inventor/nodes/SoCoordinate3.h>
+#include <Inventor/nodes/SoIndexedFaceSet.h>
+#include <Inventor/nodes/SoMaterial.h>
+#include <Inventor/nodes/SoMaterialBinding.h>
+#include <Inventor/nodes/SoNormal.h>
+#include <Inventor/nodes/SoShapeHints.h>
+
+namespace armarx::viz::coin
+{
+
+    VisualizationMesh::VisualizationMesh()
+    {
+        SoMaterialBinding* myBinding = new SoMaterialBinding;
+        myBinding->value = SoMaterialBinding::PER_VERTEX_INDEXED;
+
+        materials = new SoMaterial;
+        coords = new SoCoordinate3;
+
+        SoShapeHints* hints = new SoShapeHints;
+        // Disable back culling and enable two-sided lighting
+        hints->vertexOrdering = SoShapeHints::VertexOrdering::COUNTERCLOCKWISE;
+        hints->shapeType = SoShapeHints::ShapeType::UNKNOWN_SHAPE_TYPE;
+
+        faceSet = new SoIndexedFaceSet;
+
+        node->addChild(myBinding);
+        node->addChild(materials);
+        node->addChild(coords);
+        node->addChild(hints);
+        node->addChild(faceSet);
+    }
+
+    bool
+    VisualizationMesh::update(ElementType const& element)
+    {
+        int colorSize = (int)element.colors.size();
+        bool noColorsArray = colorSize == 0;
+        if (colorSize == 0)
+        {
+            colorSize = 1;
+        }
+        matColor.resize(colorSize);
+        transp.resize(colorSize);
+
+        const float conv = 1.0f / 255.0f;
+        if (noColorsArray)
+        {
+            auto color = element.color;
+            float r = color.r * conv;
+            float g = color.g * conv;
+            float b = color.b * conv;
+            float a = color.a * conv;
+            matColor[0].setValue(r, g, b);
+            transp[0] = 1.0f - a;
+        }
+        else
+        {
+            for (int i = 0; i < colorSize; i++)
+            {
+                auto color = element.colors[i];
+                float r = color.r * conv;
+                float g = color.g * conv;
+                float b = color.b * conv;
+                float a = color.a * conv;
+                matColor[i].setValue(r, g, b);
+                transp[i] = 1.0f - a;
+            }
+        }
+
+        // Define colors for the faces
+        materials->diffuseColor.setValuesPointer(colorSize, matColor.data());
+        materials->ambientColor.setValuesPointer(colorSize, matColor.data());
+        materials->transparency.setValuesPointer(colorSize, transp.data());
+
+        // define vertex array
+        int vertexSize = (int)element.vertices.size();
+        vertexPositions.resize(vertexSize);
+        for (int i = 0; i < vertexSize; i++)
+        {
+            auto v = element.vertices[i];
+            vertexPositions[i].setValue(v.e0, v.e1, v.e2);
+        }
+
+        // Define coordinates for vertices
+        coords->point.setValuesPointer(vertexSize, vertexPositions.data());
+
+        int facesSize = (int)element.faces.size();
+        faces.resize(facesSize * 4);
+        matInx.resize(facesSize * 4);
+
+        for (int i = 0; i < facesSize; i++)
+        {
+            auto& face = element.faces[i];
+
+            faces[i * 4 + 0] = face.v0;
+            faces[i * 4 + 1] = face.v1;
+            faces[i * 4 + 2] = face.v2;
+            faces[i * 4 + 3] = SO_END_FACE_INDEX;
+
+            matInx[i * 4 + 0] = face.c0;
+            matInx[i * 4 + 1] = face.c1;
+            matInx[i * 4 + 2] = face.c2;
+            matInx[i * 4 + 3] = SO_END_FACE_INDEX;
+        }
+
+        faceSet->coordIndex.setValuesPointer(faces.size(), faces.data());
+        faceSet->materialIndex.setValuesPointer(matInx.size(), matInx.data());
+
+        return true;
+    }
+} // namespace armarx::viz::coin
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.h b/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.h
index 120bb629a..391fe0e14 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationMesh.h
@@ -4,11 +4,10 @@
 
 #include <RobotAPI/interface/ArViz/Elements.h>
 
-#include <Inventor/nodes/SoCoordinate3.h>
-#include <Inventor/nodes/SoIndexedFaceSet.h>
-#include <Inventor/nodes/SoMaterialBinding.h>
-#include <Inventor/nodes/SoNormal.h>
-#include <Inventor/nodes/SoShapeHints.h>
+#include <Inventor/SbColor.h>
+
+class SoCoordinate3;
+class SoIndexedFaceSet;
 
 namespace armarx::viz::coin
 {
@@ -16,105 +15,9 @@ namespace armarx::viz::coin
     {
         using ElementType = data::ElementMesh;
 
-        VisualizationMesh()
-        {
-            SoMaterialBinding* myBinding = new SoMaterialBinding;
-            myBinding->value = SoMaterialBinding::PER_VERTEX_INDEXED;
-
-            materials = new SoMaterial;
-            coords = new SoCoordinate3;
-
-            SoShapeHints* hints = new SoShapeHints;
-            // Disable back culling and enable two-sided lighting
-            hints->vertexOrdering = SoShapeHints::VertexOrdering::COUNTERCLOCKWISE;
-            hints->shapeType = SoShapeHints::ShapeType::UNKNOWN_SHAPE_TYPE;
-
-            faceSet = new SoIndexedFaceSet;
-
-            node->addChild(myBinding);
-            node->addChild(materials);
-            node->addChild(coords);
-            node->addChild(hints);
-            node->addChild(faceSet);
-        }
-
-        bool update(ElementType const& element)
-        {
-            int colorSize = (int)element.colors.size();
-            bool noColorsArray = colorSize == 0;
-            if (colorSize == 0)
-            {
-                colorSize = 1;
-            }
-            matColor.resize(colorSize);
-            transp.resize(colorSize);
-
-            const float conv = 1.0f / 255.0f;
-            if (noColorsArray)
-            {
-                auto color = element.color;
-                float r = color.r * conv;
-                float g = color.g * conv;
-                float b = color.b * conv;
-                float a = color.a * conv;
-                matColor[0].setValue(r, g, b);
-                transp[0] = 1.0f - a;
-            }
-            else
-            {
-                for (int i = 0; i < colorSize; i++)
-                {
-                    auto color = element.colors[i];
-                    float r = color.r * conv;
-                    float g = color.g * conv;
-                    float b = color.b * conv;
-                    float a = color.a * conv;
-                    matColor[i].setValue(r, g, b);
-                    transp[i] = 1.0f - a;
-                }
-            }
-
-            // Define colors for the faces
-            materials->diffuseColor.setValuesPointer(colorSize, matColor.data());
-            materials->ambientColor.setValuesPointer(colorSize, matColor.data());
-            materials->transparency.setValuesPointer(colorSize, transp.data());
-
-            // define vertex array
-            int vertexSize = (int)element.vertices.size();
-            vertexPositions.resize(vertexSize);
-            for (int i = 0; i < vertexSize; i++)
-            {
-                auto v = element.vertices[i];
-                vertexPositions[i].setValue(v.e0, v.e1, v.e2);
-            }
-
-            // Define coordinates for vertices
-            coords->point.setValuesPointer(vertexSize, vertexPositions.data());
-
-            int facesSize = (int)element.faces.size();
-            faces.resize(facesSize * 4);
-            matInx.resize(facesSize * 4);
-
-            for (int i = 0; i < facesSize; i++)
-            {
-                auto& face = element.faces[i];
-
-                faces[i * 4 + 0] = face.v0;
-                faces[i * 4 + 1] = face.v1;
-                faces[i * 4 + 2] = face.v2;
-                faces[i * 4 + 3] = SO_END_FACE_INDEX;
-
-                matInx[i * 4 + 0] = face.c0;
-                matInx[i * 4 + 1] = face.c1;
-                matInx[i * 4 + 2] = face.c2;
-                matInx[i * 4 + 3] = SO_END_FACE_INDEX;
-            }
-
-            faceSet->coordIndex.setValuesPointer(faces.size(), faces.data());
-            faceSet->materialIndex.setValuesPointer(matInx.size(), matInx.data());
+        VisualizationMesh();
 
-            return true;
-        }
+        bool update(ElementType const& element);
 
         SoMaterial* materials;
         SoCoordinate3* coords;
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp
index 5f6b068fc..f27e344ca 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp
@@ -2,6 +2,9 @@
 
 #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
 
+#include <Inventor/nodes/SoMaterial.h>
+#include <Inventor/SbColor.h>
+
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationPointCloud.h b/source/RobotAPI/components/ArViz/Coin/VisualizationPointCloud.h
index 5b4afb2bb..16df986fe 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationPointCloud.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationPointCloud.h
@@ -1,11 +1,13 @@
 #pragma once
 
+#include <cfloat>
 #include "ElementVisualizer.h"
 
 #include <RobotAPI/interface/ArViz/Elements.h>
 
 #include <Inventor/nodes/SoCoordinate3.h>
 #include <Inventor/nodes/SoDrawStyle.h>
+#include <Inventor/nodes/SoMaterial.h>
 #include <Inventor/nodes/SoMaterialBinding.h>
 #include <Inventor/nodes/SoPointSet.h>
 
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationPolygon.h b/source/RobotAPI/components/ArViz/Coin/VisualizationPolygon.h
index 7ea618b06..5c185f453 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationPolygon.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationPolygon.h
@@ -10,6 +10,7 @@
 #include <Inventor/nodes/SoDrawStyle.h>
 #include <Inventor/nodes/SoFaceSet.h>
 #include <Inventor/nodes/SoLineSet.h>
+#include <Inventor/nodes/SoMaterial.h>
 
 
 namespace armarx::viz::coin
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationPose.h b/source/RobotAPI/components/ArViz/Coin/VisualizationPose.h
index 490e19258..1e5e9719d 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationPose.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationPose.h
@@ -6,6 +6,7 @@
 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
 #include <Inventor/nodes/SoAsciiText.h>
 #include <Inventor/nodes/SoCube.h>
+#include <Inventor/nodes/SoMaterial.h>
 #include <Inventor/nodes/SoSeparator.h>
 #include <Inventor/nodes/SoTransform.h>
 #include <Inventor/nodes/SoTranslation.h>
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp
index 71dad203a..68cfb856e 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizationRobot.cpp
@@ -9,6 +9,8 @@
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
+#include <Inventor/SbColor.h>
+#include <Inventor/nodes/SoMaterial.h>
 
 namespace armarx::viz::coin
 {
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
index 5cffdc6d7..928e2d47b 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
@@ -30,6 +30,7 @@
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
+#include <VirtualRobot/Visualization/VisualizationFactory.h>
 #include <Inventor/nodes/SoUnits.h>
 #include <Inventor/nodes/SoCube.h>
 #include <Inventor/nodes/SoMaterial.h>
@@ -51,6 +52,7 @@
 #include <Inventor/fields/SoMFVec3f.h>
 #include <Inventor/fields/SoMFColor.h>
 #include <Inventor/nodes/SoShapeHints.h>
+#include <Inventor/nodes/SoMatrixTransform.h>
 
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
index 9b7c3709b..7b2e5af08 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
@@ -626,4 +626,3 @@ namespace armarx
     using DebugDrawerComponentPtr = IceInternal::Handle<DebugDrawerComponent>;
 
 }
-
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
index e65fa6a4f..e0293363b 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
@@ -23,6 +23,8 @@
 
 #include "DebugDrawerHelper.h"
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/Robot.h>
 #include <VirtualRobot/math/Helpers.h>
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.h
index 72a4ee76f..9da37492f 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.h
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.h
@@ -23,7 +23,7 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 #include <SimoxUtility/shapes/OrientedBox.h>
 #include <SimoxUtility/shapes/XYConstrainedOrientedBox.h>
 
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.cpp
new file mode 100644
index 000000000..52b2a5872
--- /dev/null
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.cpp
@@ -0,0 +1,49 @@
+#include "DebugDrawerUtils.h"
+
+#include <VirtualRobot/Visualization/TriMeshModel.h>
+
+armarx::DebugDrawerTriMesh
+armarx::DebugDrawerUtils::convertTriMesh(const VirtualRobot::TriMeshModel& trimesh)
+{
+    DebugDrawerTriMesh ddMesh;
+
+    auto addVertex = [&](const Eigen::Vector3f& v)
+    {
+        ddMesh.vertices.push_back({v(0), v(1), v(2)});
+        return (int)ddMesh.vertices.size() - 1;
+    };
+
+    auto addColor = [&](const VirtualRobot::VisualizationFactory::Color& c)
+    {
+        ddMesh.colors.push_back(DrawColor{c.r, c.g, c.b, c.transparency});
+        return (int)ddMesh.colors.size() - 1;
+    };
+    ddMesh.faces.reserve(trimesh.faces.size());
+    ddMesh.vertices.reserve(trimesh.vertices.size());
+    ddMesh.colors.reserve(trimesh.colors.size());
+
+    for (auto& f : trimesh.faces)
+    {
+        DebugDrawerFace f2;
+        f2.vertex1.vertexID = addVertex(trimesh.vertices.at(f.id1));
+        f2.vertex2.vertexID = addVertex(trimesh.vertices.at(f.id2));
+        f2.vertex3.vertexID = addVertex(trimesh.vertices.at(f.id3));
+        if (f.idNormal1 != UINT_MAX)
+        {
+            f2.vertex1.normalID = addVertex(trimesh.normals.at(f.idNormal1));
+            f2.vertex2.normalID = addVertex(trimesh.normals.at(f.idNormal2));
+            f2.vertex3.normalID = addVertex(trimesh.normals.at(f.idNormal3));
+        }
+        else
+        {
+            //                    f2.vertex1.normalID = f2.vertex2.normalID = f2.vertex3.normalID = addVertex(f.normal);
+            f2.normal = {f.normal.x(), f.normal.y(), f.normal.z()};
+        }
+        f2.vertex1.colorID = addColor(trimesh.colors.at(f.idColor1));
+        f2.vertex2.colorID = addColor(trimesh.colors.at(f.idColor2));
+        f2.vertex3.colorID = addColor(trimesh.colors.at(f.idColor3));
+
+        ddMesh.faces.push_back(f2);
+    }
+    return ddMesh;
+}
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.h
index b50b0a9d9..7d20ed5fc 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.h
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerUtils.h
@@ -23,58 +23,16 @@
  */
 #pragma once
 
-#include <VirtualRobot/Visualization/TriMeshModel.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
+
 #include <Eigen/Core>
 namespace armarx
 {
     class DebugDrawerUtils
     {
     public:
-        static DebugDrawerTriMesh convertTriMesh(const VirtualRobot::TriMeshModel& trimesh)
-        {
-            DebugDrawerTriMesh ddMesh;
-
-            auto addVertex = [&](const Eigen::Vector3f & v)
-            {
-                ddMesh.vertices.push_back({v(0), v(1), v(2)});
-                return (int)ddMesh.vertices.size() - 1;
-            };
-
-            auto addColor = [&](const VirtualRobot::VisualizationFactory::Color & c)
-            {
-                ddMesh.colors.push_back(DrawColor {c.r, c.g, c.b, c.transparency});
-                return (int)ddMesh.colors.size() - 1;
-            };
-            ddMesh.faces.reserve(trimesh.faces.size());
-            ddMesh.vertices.reserve(trimesh.vertices.size());
-            ddMesh.colors.reserve(trimesh.colors.size());
-
-            for (auto& f : trimesh.faces)
-            {
-                DebugDrawerFace f2;
-                f2.vertex1.vertexID = addVertex(trimesh.vertices.at(f.id1));
-                f2.vertex2.vertexID = addVertex(trimesh.vertices.at(f.id2));
-                f2.vertex3.vertexID = addVertex(trimesh.vertices.at(f.id3));
-                if (f.idNormal1 != UINT_MAX)
-                {
-                    f2.vertex1.normalID = addVertex(trimesh.normals.at(f.idNormal1));
-                    f2.vertex2.normalID = addVertex(trimesh.normals.at(f.idNormal2));
-                    f2.vertex3.normalID = addVertex(trimesh.normals.at(f.idNormal3));
-                }
-                else
-                {
-                    //                    f2.vertex1.normalID = f2.vertex2.normalID = f2.vertex3.normalID = addVertex(f.normal);
-                    f2.normal = {f.normal.x(), f.normal.y(), f.normal.z()};
-                }
-                f2.vertex1.colorID = addColor(trimesh.colors.at(f.idColor1));
-                f2.vertex2.colorID = addColor(trimesh.colors.at(f.idColor2));
-                f2.vertex3.colorID = addColor(trimesh.colors.at(f.idColor3));
-
-                ddMesh.faces.push_back(f2);
-            }
-            return ddMesh;
-        }
-
+        static DebugDrawerTriMesh convertTriMesh(const VirtualRobot::TriMeshModel& trimesh);
     };
 }
diff --git a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
index 8eb4b47b2..17292ba93 100644
--- a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
+++ b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
@@ -28,6 +28,7 @@
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/math/Helpers.h>
 
diff --git a/source/RobotAPI/components/ObjectMemoryEditor/Editor.h b/source/RobotAPI/components/ObjectMemoryEditor/Editor.h
index e94e1a7cc..783675ba0 100644
--- a/source/RobotAPI/components/ObjectMemoryEditor/Editor.h
+++ b/source/RobotAPI/components/ObjectMemoryEditor/Editor.h
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <list>
+#include <queue>
 
 #include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h>
 #include <RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h>
diff --git a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.h b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.h
index c5e6486e7..ca3344af4 100644
--- a/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.h
+++ b/source/RobotAPI/components/armem/client/ObjectInstanceToIndex/ObjectInstanceToIndex.h
@@ -22,6 +22,8 @@
 
 #pragma once
 
+#include <mutex>
+
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/time/Frequency.h>
 
diff --git a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
index d6ea24e6e..7649e1f4e 100644
--- a/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
+++ b/source/RobotAPI/components/armem/server/GraspMemory/GraspMemory.h
@@ -2,7 +2,7 @@
 
 
 #include <memory>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
diff --git a/source/RobotAPI/components/ik_demo/IkDemo.cpp b/source/RobotAPI/components/ik_demo/IkDemo.cpp
index 2d60ef2fe..4ff605566 100644
--- a/source/RobotAPI/components/ik_demo/IkDemo.cpp
+++ b/source/RobotAPI/components/ik_demo/IkDemo.cpp
@@ -5,6 +5,7 @@
 #include <SimoxUtility/math/pose/invert.h>
 
 #include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/IK/CompositeDiffIK/CompositeDiffIK.h>
 #include <VirtualRobot/IK/CompositeDiffIK/ManipulabilityNullspaceGradient.h>
diff --git a/source/RobotAPI/components/units/HandUnit.cpp b/source/RobotAPI/components/units/HandUnit.cpp
index 0b19a5566..1ca020be2 100644
--- a/source/RobotAPI/components/units/HandUnit.cpp
+++ b/source/RobotAPI/components/units/HandUnit.cpp
@@ -29,6 +29,7 @@
 
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/EndEffector/EndEffector.h>
+#include <VirtualRobot/VirtualRobotException.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
 #include <vector>
diff --git a/source/RobotAPI/components/units/KinematicUnit.cpp b/source/RobotAPI/components/units/KinematicUnit.cpp
index 5bac1a14b..c2e0dc185 100644
--- a/source/RobotAPI/components/units/KinematicUnit.cpp
+++ b/source/RobotAPI/components/units/KinematicUnit.cpp
@@ -28,6 +28,7 @@
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/VirtualRobotException.h>
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/application/Application.h>
diff --git a/source/RobotAPI/components/units/KinematicUnit.h b/source/RobotAPI/components/units/KinematicUnit.h
index fb29aac62..74146b034 100644
--- a/source/RobotAPI/components/units/KinematicUnit.h
+++ b/source/RobotAPI/components/units/KinematicUnit.h
@@ -32,7 +32,8 @@
 
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
 
-#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 #include <vector>
 
 namespace armarx
@@ -148,4 +149,3 @@ namespace armarx
         std::vector<std::string> armarXPackages;
     };
 }
-
diff --git a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
index d18722607..5f5102168 100644
--- a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
+++ b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
@@ -28,7 +28,6 @@
 #include <algorithm>
 #include <cmath>
 #include <limits>
-#include <numeric>
 
 // Eigen
 #include <Eigen/Core>
@@ -36,6 +35,8 @@
 
 // Simox
 #include <SimoxUtility/math.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/Safety.h>
 
 // ArmarX
 #include <ArmarXCore/observers/variant/Variant.h>
diff --git a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.h b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.h
index 1bc78b92b..7ddf5b4a0 100644
--- a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.h
+++ b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.h
@@ -25,9 +25,7 @@
 
 
 // STD/STL
-#include <deque>
 #include <string>
-#include <tuple>
 #include <mutex>
 #include <vector>
 
@@ -38,7 +36,7 @@
 #include <IceUtil/Time.h>
 
 // Simox
-#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/Safety.h>
 
 // ArmarX
diff --git a/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.cpp b/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.cpp
index 5ea5de5a0..8042b2434 100644
--- a/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.cpp
@@ -9,6 +9,15 @@
 #include <VirtualRobot/MathTools.h>
 
 
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/IK/IKSolver.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+
+#include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
+#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h>
+
 using namespace armarx;
 
 int
diff --git a/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.h b/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.h
index 0c0ed889c..46704a481 100644
--- a/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.h
+++ b/source/RobotAPI/components/units/RobotUnit/ControllerParts/CartesianImpedanceController.h
@@ -1,13 +1,16 @@
 #pragma once
 
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <Eigen/Geometry>
+
+#include <VirtualRobot/VirtualRobot.h>
 
-#include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
-#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h>
 
 namespace armarx
 {
+    class SensorValue1DoFActuatorTorque;
+    class SensorValue1DoFActuatorVelocity;
+    class SensorValue1DoFActuatorPosition;
+
     class CartesianImpedanceController
     {
     public:
diff --git a/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.cpp b/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.cpp
index 0ed24cb2f..70f06887d 100644
--- a/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.cpp
@@ -22,6 +22,8 @@
 
 #include "DefaultWidgetDescriptions.h"
 
+#include <VirtualRobot/Robot.h>
+
 namespace armarx::WidgetDescription
 {
     StringComboBoxPtr
@@ -86,4 +88,34 @@ namespace armarx::WidgetDescription
         }
         return rns;
     }
+
+    StringComboBoxPtr
+    makeRNSComboBox(const VirtualRobot::RobotPtr& robot,
+                    std::string name,
+                    const std::set<std::string>& preferredSet,
+                    const std::string& mostPreferred)
+    {
+        return makeStringSelectionComboBox(
+            std::move(name), robot->getRobotNodeSetNames(), preferredSet, mostPreferred);
+    }
+
+    StringComboBoxPtr
+    makeRobotNodeComboBox(const VirtualRobot::RobotPtr& robot,
+                          std::string name,
+                          const std::set<std::string>& preferredSet,
+                          const std::string& mostPreferred)
+    {
+        return makeStringSelectionComboBox(
+            std::move(name), robot->getRobotNodeNames(), preferredSet, mostPreferred);
+    }
+
+    StringComboBoxPtr
+    makeStringSelectionComboBox(std::string name,
+                                std::vector<std::string> options,
+                                const std::string& mostPreferred,
+                                const std::set<std::string>& preferredSet)
+    {
+        return makeStringSelectionComboBox(
+            std::move(name), std::move(options), preferredSet, mostPreferred);
+    }
 } // namespace armarx::WidgetDescription
diff --git a/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.h b/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.h
index e276010f2..3da3c5b54 100644
--- a/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.h
+++ b/source/RobotAPI/components/units/RobotUnit/DefaultWidgetDescriptions.h
@@ -25,7 +25,7 @@
 #include <set>
 #include <string>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXGui/interface/WidgetDescription.h>
 #include <ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.h>
@@ -57,33 +57,18 @@ namespace armarx::WidgetDescription
                                                   const std::set<std::string>& preferredSet,
                                                   const std::string& mostPreferred);
 
-    inline StringComboBoxPtr
-    makeStringSelectionComboBox(std::string name,
-                                std::vector<std::string> options,
-                                const std::string& mostPreferred,
-                                const std::set<std::string>& preferredSet)
-    {
-        return makeStringSelectionComboBox(
-            std::move(name), std::move(options), preferredSet, mostPreferred);
-    }
+    StringComboBoxPtr makeStringSelectionComboBox(std::string name,
+                                                  std::vector<std::string> options,
+                                                  const std::string& mostPreferred,
+                                                  const std::set<std::string>& preferredSet);
 
-    inline StringComboBoxPtr
-    makeRNSComboBox(const VirtualRobot::RobotPtr& robot,
-                    std::string name = "RobotNodeSet",
-                    const std::set<std::string>& preferredSet = {},
-                    const std::string& mostPreferred = "")
-    {
-        return makeStringSelectionComboBox(
-            std::move(name), robot->getRobotNodeSetNames(), preferredSet, mostPreferred);
-    }
+    StringComboBoxPtr makeRNSComboBox(const VirtualRobot::RobotPtr& robot,
+                                      std::string name = "RobotNodeSet",
+                                      const std::set<std::string>& preferredSet = {},
+                                      const std::string& mostPreferred = "");
 
-    inline StringComboBoxPtr
-    makeRobotNodeComboBox(const VirtualRobot::RobotPtr& robot,
-                          std::string name = "RobotNode",
-                          const std::set<std::string>& preferredSet = {},
-                          const std::string& mostPreferred = "")
-    {
-        return makeStringSelectionComboBox(
-            std::move(name), robot->getRobotNodeNames(), preferredSet, mostPreferred);
-    }
+    StringComboBoxPtr makeRobotNodeComboBox(const VirtualRobot::RobotPtr& robot,
+                                            std::string name = "RobotNode",
+                                            const std::set<std::string>& preferredSet = {},
+                                            const std::string& mostPreferred = "");
 } // namespace armarx::WidgetDescription
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
index 67e940d30..09338fd57 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
@@ -2,6 +2,7 @@
 
 #include <iomanip>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/math/Helpers.h>
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.cpp
index ec93568c8..26fa0111d 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.cpp
@@ -24,6 +24,8 @@
 #include "NJointCartesianTorqueController.h"
 
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
index 91326e493..b02c292f6 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianTorqueController.h
@@ -23,9 +23,8 @@
  */
 #pragma once
 
+#include <VirtualRobot/VirtualRobot.h>
 
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
 
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianTorqueController.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
index 486eaa775..165da2d63 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.cpp
@@ -24,10 +24,14 @@
 
 #include "NJointCartesianVelocityController.h"
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/Robot.h>
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
+#include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
+#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h>
 
 #define DEFAULT_TCP_STRING "default TCP"
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
index 35f3a9375..1c0755674 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityController.h
@@ -24,17 +24,19 @@
 #pragma once
 
 
-#include <VirtualRobot/IK/DifferentialIK.h>
 #include <VirtualRobot/VirtualRobot.h>
 
-#include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerWithTripleBuffer.h>
-#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h>
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityController.h>
 #include <RobotAPI/libraries/core/CartesianVelocityController.h>
 
 namespace armarx
 {
+    class ControlTarget1DoFActuatorVelocity;
+    class SensorValue1DoFActuatorTorque;
+    class SensorValue1DoFGravityTorque;
+
+
     TYPEDEF_PTRS_HANDLE(NJointCartesianVelocityController);
 
     TYPEDEF_PTRS_HANDLE(NJointCartesianVelocityControllerControlData);
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.cpp
index 90ef15b61..ea5ab7c70 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.cpp
@@ -24,6 +24,8 @@
 #include "NJointCartesianVelocityControllerWithRamp.h"
 
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
index 40bba081c..34d99731e 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianVelocityControllerWithRamp.h
@@ -23,9 +23,7 @@
  */
 #pragma once
 
-
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianVelocityControllerWithRamp.h>
 #include <RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
index 08870cfcc..943f87889 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
@@ -1,6 +1,8 @@
 #include "NJointCartesianWaypointController.h"
 
 #include <iomanip>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerBase.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerBase.h
index 3239c0e83..76cf0ca05 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerBase.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerBase.h
@@ -23,7 +23,6 @@
 #pragma once
 
 #include <atomic>
-#include <functional>
 #include <map>
 #include <mutex>
 #include <optional>
@@ -35,8 +34,10 @@
 #include <ArmarXCore/core/services/tasks/ThreadPool.h>
 #include <ArmarXCore/interface/core/ManagedIceObjectDefinitions.h>
 
-#include <RobotAPI/components/units/RobotUnit/RobotUnit.h>
+// #include <RobotAPI/components/units/RobotUnit/RobotUnit.h>
+
 #include <RobotAPI/interface/units/RobotUnit/NJointController.h>
+#include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
 
 namespace IceProxy::armarx
 {
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp
index 2956bbcf8..c02af15ef 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp
@@ -28,6 +28,7 @@
 #include <SimoxUtility/math/convert/mat3f_to_rpy.h>
 #include <SimoxUtility/math/convert/mat4f_to_rpy.h>
 #include <SimoxUtility/math/periodic/periodic_clamp.h>
+#include <VirtualRobot/Robot.h>
 
 #include "ArmarXCore/core/logging/Logging.h"
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
index f59f1b7be..f13f66fe7 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h
@@ -26,7 +26,8 @@
 
 #include <atomic>
 
-#include <VirtualRobot/Robot.h>
+
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.cpp
index cca564afe..1e827dcc1 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.cpp
@@ -27,6 +27,8 @@
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
+#include <VirtualRobot/Robot.h>
+
 namespace armarx
 {
     NJointControllerRegistration<NJointHolonomicPlatformRelativePositionController>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
index 62760e241..ba3c5ba50 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h
@@ -26,7 +26,7 @@
 
 #include <atomic>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.cpp
index 892a1ae7e..31870bd96 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.cpp
@@ -22,6 +22,8 @@
 
 #include "NJointHolonomicPlatformUnitVelocityPassThroughController.h"
 
+#include <VirtualRobot/Robot.h>
+
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.h
index ef08635a5..c692e00de 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformUnitVelocityPassThroughController.h
@@ -22,7 +22,8 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerInterface.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.cpp
index 972f3abd1..e903a1a5d 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.cpp
@@ -22,9 +22,14 @@
 
 #include "NJointHolonomicPlatformVelocityControllerWithRamp.h"
 
+#include <VirtualRobot/Robot.h>
+
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include "RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h"
+#include "RobotAPI/components/units/RobotUnit/SensorValues/SensorValueHolonomicPlatform.h"
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
+#include "../ControlTargets/ControlTargetHolonomicPlatformVelocity.h"
 
 namespace armarx
 {
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.h
index 8cd957b50..795b16c8e 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.h
@@ -22,15 +22,16 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerInterface.h>
 
-#include "../ControlTargets/ControlTargetHolonomicPlatformVelocity.h"
-#include "NJointControllerWithTripleBuffer.h"
+// #include "NJointControllerWithTripleBuffer.h"
 
 namespace armarx
 {
+    class ControlTargetHolonomicPlatformVelocity;
+    class SensorValueHolonomicPlatformVelocity;
 
     class Cartesian2DimVelocityRamp
     {
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
index e51de4dbd..be1af27f6 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.cpp
@@ -22,6 +22,8 @@
 
 #include "NJointKinematicUnitPassThroughController.h"
 
+#include <VirtualRobot/Robot.h>
+
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
 namespace armarx
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
index ab280b224..9f38d25d4 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointKinematicUnitPassThroughController.h
@@ -24,7 +24,7 @@
 
 #include <atomic>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
index 12ca8b5a1..1c3a68e75 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.cpp
@@ -24,6 +24,8 @@
 #include "NJointTCPController.h"
 
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
index ecf1fc266..311df4838 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTCPController.h
@@ -23,9 +23,8 @@
  */
 #pragma once
 
-
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/IKSolver.h>
 
 #include "../ControlTargets/ControlTarget1DoFActuator.h"
 #include "../SensorValues/SensorValue1DoFActuator.h"
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.cpp
index e4b850fca..069b296af 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.cpp
@@ -25,6 +25,10 @@
 #include <SimoxUtility/math/convert/mat4f_to_pos.h>
 #include <SimoxUtility/math/convert/mat4f_to_quat.h>
 
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
+
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h>
 
 using namespace armarx;
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.h
index 42ce54179..47706d9dc 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTaskSpaceImpedanceController.h
@@ -22,8 +22,7 @@
 
 #pragma once
 
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerWithTripleBuffer.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.cpp
index 4e79acb8f..e4a068265 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.cpp
@@ -1,6 +1,8 @@
 #include "NJointTrajectoryController.h"
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/TimeOptimalTrajectory/TimeOptimalTrajectory.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/interface/observers/ObserverInterface.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.h
index eb13d7c90..95b90d9c7 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointTrajectoryController.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXGui/interface/StaticPlotterInterface.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
index 29f4b175a..2d3a8b5ea 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
@@ -29,4 +29,9 @@ namespace armarx
     {
     }
 
+    armarx::PropertyDefinitionsPtr
+    RobotUnit::createPropertyDefinitions()
+    {
+        return PropertyDefinitionsPtr(new RobotUnitPropertyDefinitions(getConfigIdentifier()));
+    }
 } // namespace armarx
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnit.h b/source/RobotAPI/components/units/RobotUnit/RobotUnit.h
index 0c97bcd05..b22844a4e 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnit.h
@@ -200,10 +200,6 @@ namespace armarx
         }
 
         /// @see PropertyUser::createPropertyDefinitions()
-        armarx::PropertyDefinitionsPtr
-        createPropertyDefinitions() override
-        {
-            return PropertyDefinitionsPtr(new RobotUnitPropertyDefinitions(getConfigIdentifier()));
-        }
+        armarx::PropertyDefinitionsPtr createPropertyDefinitions() override;
     };
 } // namespace armarx
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
index 732a0e2c4..a2cc1aa25 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp
@@ -24,6 +24,8 @@
 
 #include <sstream>
 
+#include <VirtualRobot/Robot.h>
+
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/util/Preprocessor.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h
index b76f54dc8..29732afde 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h
@@ -30,7 +30,7 @@
 #include <boost/preprocessor/seq/for_each.hpp>
 #include <boost/preprocessor/variadic/to_seq.hpp>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/util/CPPUtility/Pointer.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
index 6f01acc17..6b65c43ba 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
@@ -23,6 +23,7 @@
 #include "RobotUnitModuleControlThread.h"
 
 #include <SimoxUtility/math/convert/pos_rpy_to_mat4f.h>
+#include <VirtualRobot/VirtualRobotException.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
 #include <ArmarXCore/core/time/TimeUtil.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.cpp
index 99b4a64e4..d9e408416 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.cpp
@@ -24,6 +24,8 @@
 
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerBase.h>
 
+#include <VirtualRobot/Robot.h>
+
 #include "RobotUnitModuleControllerManagement.h"
 #include "RobotUnitModuleDevices.h"
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.h
index 183304232..d9ed47b7b 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThreadDataBuffer.h
@@ -22,7 +22,8 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 
 #include <ArmarXCore/core/util/TripleBuffer.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
index 0c7caccb3..4702668c5 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.h
@@ -24,6 +24,10 @@
 
 #include <mutex>
 
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/Robot.h>
+
 #include "RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h"
 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
 
@@ -259,6 +263,8 @@ namespace armarx::RobotUnitModule
          * @param nodes The VirtualRobot's RobotNodes
          * @param sensors The \ref SensorValue "SensorValues"
          */
+
+         // TODO use base type for 'sensors' element
         template <class PtrT>
         void
         updateVirtualRobotFromSensorValues(const VirtualRobot::RobotPtr& robot,
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
index b2ae89490..033d86962 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp
@@ -24,7 +24,9 @@
 
 #include <SimoxUtility/algorithm/string/string_tools.h>
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/VirtualRobotException.h>
 #include <VirtualRobot/XML/RobotIO.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
index c6e94bd51..d3e1e68f7 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h
@@ -22,7 +22,7 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/ArmarXManager.h>
 #include <ArmarXCore/core/services/tasks/TaskUtil.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
index 698df2657..1ebf5d476 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp
@@ -27,8 +27,11 @@
 
 #include <SimoxUtility/algorithm/string/string_tools.h>
 #include <VirtualRobot/CollisionDetection/CollisionChecker.h>
+#include <VirtualRobot/CollisionDetection/CollisionModel.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/Obstacle.h>
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Robot.h>
 
 #include "ArmarXCore/core/logging/Logging.h"
 #include "ArmarXCore/core/time/Metronome.h"
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
index fa7e690cd..36798242c 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h
@@ -24,7 +24,7 @@
 
 #include <thread>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.cpp
index debb6a1a7..2dc836d89 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.cpp
@@ -25,6 +25,7 @@
 #include <Eigen/Geometry>
 
 #include <SimoxUtility/math/convert/mat4f_to_rpy.h>
+#include <VirtualRobot/MathTools.h>
 
 #include <RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h>
 #include <RobotAPI/interface/core/GeometryBase.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.h
index c40aa7e44..bc679526a 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/Units/LocalizationSubUnit.h
@@ -26,7 +26,6 @@
 
 #include <Eigen/Core>
 
-#include <VirtualRobot/MathTools.h>
 
 #include <RobotAPI/components/units/SensorActorUnit.h>
 #include <RobotAPI/interface/core/RobotState.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
index c7e7348c5..4186fa390 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
@@ -25,6 +25,7 @@
 #include <Eigen/Geometry>
 
 #include <SimoxUtility/math/convert/mat4f_to_rpy.h>
+#include <VirtualRobot/MathTools.h>
 
 #include <RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h>
 #include <RobotAPI/interface/core/GeometryBase.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
index dd41099f1..dc081d781 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
@@ -26,8 +26,6 @@
 
 #include <Eigen/Core>
 
-#include <VirtualRobot/MathTools.h>
-
 #include <RobotAPI/components/units/PlatformUnit.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h>
 #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.cpp b/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.cpp
index 79d076f9b..bc22d972c 100644
--- a/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.cpp
@@ -28,6 +28,10 @@
 
 #include <RobotAPI/components/units/RobotUnit/RobotUnit.h>
 
+
+#include <VirtualRobot/Dynamics/Dynamics.h>
+#include <VirtualRobot/RobotNodeSet.h>
+
 namespace armarx
 {
 
diff --git a/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.h b/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.h
index edcf445b5..e49736123 100644
--- a/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.h
+++ b/source/RobotAPI/components/units/RobotUnit/util/DynamicsHelper.h
@@ -24,8 +24,8 @@
 #pragma once
 #include <Eigen/Core>
 
+#include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/Dynamics/Dynamics.h>
-#include <VirtualRobot/RobotNodeSet.h>
 
 #include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h>
 
diff --git a/source/RobotAPI/components/units/TCPControlUnit.cpp b/source/RobotAPI/components/units/TCPControlUnit.cpp
index 4f79878ee..08557d8a0 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.cpp
+++ b/source/RobotAPI/components/units/TCPControlUnit.cpp
@@ -28,10 +28,12 @@
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <VirtualRobot/RobotConfig.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/MathTools.h>
 
 #include <SimoxUtility/algorithm/string/string_tools.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
 
 #include <Eigen/Core>
 
diff --git a/source/RobotAPI/components/units/TCPControlUnit.h b/source/RobotAPI/components/units/TCPControlUnit.h
index 8b373d101..8811a63dd 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.h
+++ b/source/RobotAPI/components/units/TCPControlUnit.h
@@ -27,7 +27,9 @@
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 #include <ArmarXCore/core/Component.h>
 
+#include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/IK/DifferentialIK.h>
+
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 #include <ArmarXCore/interface/observers/ObserverInterface.h>
 
@@ -280,4 +282,3 @@ namespace armarx
     using EDifferentialIKPtr = std::shared_ptr<EDifferentialIK>;
 
 }
-
diff --git a/source/RobotAPI/gui-plugins/FTSensorCalibrationGui/FTSensorCalibrationGuiWidgetController.cpp b/source/RobotAPI/gui-plugins/FTSensorCalibrationGui/FTSensorCalibrationGuiWidgetController.cpp
index 288e48089..6cc8d730e 100644
--- a/source/RobotAPI/gui-plugins/FTSensorCalibrationGui/FTSensorCalibrationGuiWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/FTSensorCalibrationGui/FTSensorCalibrationGuiWidgetController.cpp
@@ -22,6 +22,7 @@
 #include <string>
 
 #include <QRegExp>
+#include <VirtualRobot/RobotNodeSet.h>
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
 #include <ArmarXCore/core/util/FileSystemPathBuilder.h>
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index 440815d7d..a5c4e264d 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -44,6 +44,13 @@
 #include <RobotAPI/interface/core/NameValueMap.h>
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
 
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Visualization/VisualizationFactory.h>
+#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
+
+
 #include "KinematicUnitConfigDialog.h"
 
 // Qt headers
@@ -993,7 +1000,7 @@ namespace armarx
         if (robot != NULL)
         {
             ARMARX_VERBOSE << "getting coin visualization" << flush;
-            coinVisualization = robot->getVisualization<VirtualRobot::CoinVisualization>();
+            coinVisualization = robot->getVisualization();
 
             if (!coinVisualization || !coinVisualization->getCoinVisualization())
             {
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
index 1c94c9305..f569285ac 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
@@ -40,19 +40,15 @@
 #include <QToolBar>
 
 
-#include <VirtualRobot/Robot.h>
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/Visualization/VisualizationFactory.h>
-#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
-
 #include <Inventor/sensors/SoTimerSensor.h>
 #include <Inventor/nodes/SoNode.h>
 #include <Inventor/nodes/SoSeparator.h>
 #include <Inventor/nodes/SoEventCallback.h>
 #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
 #include <Inventor/Qt/SoQt.h>
+
 #include <QStyledItemDelegate>
+
 #include <ArmarXCore/core/util/IceReportSkipper.h>
 
 #include <VirtualRobot/VirtualRobot.h>
diff --git a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
index bbd260410..d13aaf8d1 100644
--- a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
@@ -33,8 +33,14 @@
 
 #include <RobotAPI/libraries/core/FramedPose.h>
 
+#include <VirtualRobot/MathTools.h>
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/CollisionDetection/CollisionModel.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Visualization/VisualizationFactory.h>
+#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
 
 // Qt headers
 #include <Qt>
@@ -389,7 +395,7 @@ void RobotViewerWidgetController::setRobotVisu(bool colModel)
         v = VirtualRobot::SceneObject::Collision;
     }
 
-    CoinVisualizationPtr robotViewerVisualization = robot->getVisualization<CoinVisualization>(v);
+    CoinVisualizationPtr robotViewerVisualization = robot->getVisualization(v);
 
     if (robotViewerVisualization)
     {
diff --git a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.h b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.h
index 48a161aa9..ebb76786a 100644
--- a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.h
+++ b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.h
@@ -37,12 +37,7 @@
 /* Qt headers */
 #include <QMainWindow>
 
-
-#include <VirtualRobot/Robot.h>
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/Visualization/VisualizationFactory.h>
-#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualization.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <Inventor/sensors/SoTimerSensor.h>
 
@@ -186,4 +181,3 @@ namespace armarx
     };
     using RobotViewerGuiPluginPtr = std::shared_ptr<RobotViewerWidgetController>;
 }
-
diff --git a/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp b/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
index 80b861c28..be74b8d21 100644
--- a/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
+++ b/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
@@ -27,7 +27,10 @@
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/LinkedCoordinate.h>
 #include <RobotAPI/libraries/core/FramedPose.h>
-
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
 
 // C++ includes
 #include <sstream>
diff --git a/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.h b/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.h
index e3a78e725..bcbfc2e07 100644
--- a/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.h
+++ b/source/RobotAPI/gui-plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.h
@@ -29,11 +29,10 @@
 // ArmarX includes
 #include <RobotAPI/interface/units/TCPMoverUnitInterface.h>
 #include <RobotAPI/interface/units/TCPControlUnit.h>
+
 /** VirtualRobot headers **/
-#include <VirtualRobot/Robot.h>
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 #include <ArmarXGui/libraries/ArmarXGuiBase/widgets/IceProxyFinder.h>
 
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
@@ -151,4 +150,3 @@ namespace armarx
         QPointer<TCPMoverConfigDialog> configDialog;
     };
 }
-
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
index 82dc134ee..4bb9a4a1d 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
@@ -3,6 +3,7 @@
 #include <SimoxUtility/math/pose/invert.h>
 #include <SimoxUtility/math/pose/pose.h>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/Robot.h>
 #include <VirtualRobot/RobotConfig.h>
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.cpp b/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.cpp
index ffb42a45b..af5dec6f7 100644
--- a/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.cpp
@@ -23,6 +23,7 @@
 
 #include "BimanualGraspCandidateHelper.h"
 #include <VirtualRobot/math/Helpers.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.h b/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.h
index 1b2e9b10c..9a861d414 100644
--- a/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.h
+++ b/source/RobotAPI/libraries/GraspingUtility/BimanualGraspCandidateHelper.h
@@ -27,7 +27,7 @@
 #include <RobotAPI/interface/units/GraspCandidateProviderInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <memory>
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.cpp b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.cpp
index cba726500..b8eafe669 100644
--- a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.cpp
@@ -23,6 +23,7 @@
 
 #include "GraspCandidateHelper.h"
 #include <VirtualRobot/math/Helpers.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.h b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.h
index 0fa9fe1ea..d47e00f3f 100644
--- a/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.h
+++ b/source/RobotAPI/libraries/GraspingUtility/GraspCandidateHelper.h
@@ -26,7 +26,7 @@
 #include <RobotAPI/interface/units/GraspCandidateProviderInterface.h>
 #include <RobotAPI/libraries/core/Pose.h>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <memory>
 
diff --git a/source/RobotAPI/libraries/GraspingUtility/GraspTrajectory.cpp b/source/RobotAPI/libraries/GraspingUtility/GraspTrajectory.cpp
index e20c92b75..efa9b038a 100644
--- a/source/RobotAPI/libraries/GraspingUtility/GraspTrajectory.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/GraspTrajectory.cpp
@@ -30,6 +30,7 @@
 
 #include <SimoxUtility/json/eigen_conversion.h>
 #include <SimoxUtility/json/json.hpp>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/math/Helpers.h>
 
 #include "ArmarXCore/core/logging/Logging.h"
diff --git a/source/RobotAPI/libraries/GraspingUtility/box_to_grasp_candidates.cpp b/source/RobotAPI/libraries/GraspingUtility/box_to_grasp_candidates.cpp
index b01b2c6e9..00a840749 100644
--- a/source/RobotAPI/libraries/GraspingUtility/box_to_grasp_candidates.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/box_to_grasp_candidates.cpp
@@ -4,6 +4,8 @@
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
+#include <VirtualRobot/Robot.h>
+
 #include "box_to_grasp_candidates.h"
 
 namespace armarx
diff --git a/source/RobotAPI/libraries/GraspingUtility/grasp_candidate_drawer.cpp b/source/RobotAPI/libraries/GraspingUtility/grasp_candidate_drawer.cpp
index 9888dccad..f24952192 100644
--- a/source/RobotAPI/libraries/GraspingUtility/grasp_candidate_drawer.cpp
+++ b/source/RobotAPI/libraries/GraspingUtility/grasp_candidate_drawer.cpp
@@ -1,4 +1,5 @@
 #include <SimoxUtility/math/pose/pose.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
 
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.cpp
index 807239020..38b5f30cd 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.cpp
@@ -25,6 +25,10 @@
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 #include <RobotAPI/libraries/core/FramedPose.h>
 
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/XML/RobotIO.h>
+
 #include "RobotStateComponentPlugin.h"
 
 
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h
index af85178be..c385948db 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h
@@ -24,7 +24,7 @@
 
 #include <mutex>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
 #include <ArmarXCore/core/ComponentPlugin.h>
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.cpp b/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.cpp
index 0cbf7e730..16308fdfe 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.cpp
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.cpp
@@ -26,6 +26,7 @@
 
 // Simox
 #include <SimoxUtility/math.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
 
 
 armarx::ObstacleAvoidingPlatformUnitHelper::ObstacleAvoidingPlatformUnitHelper(
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.h
index 85d7543c9..d372ee8da 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/ObstacleAvoidingPlatformUnitHelper.h
@@ -28,7 +28,7 @@
 #include <Eigen/Core>
 
 // Simox
-#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 // RobotAPI
 #include <RobotAPI/components/units/ObstacleAvoidingPlatformUnit/ObstacleAvoidingPlatformUnit.h>
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.cpp b/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.cpp
index b5fe191b9..7fbe6b3f8 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.cpp
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.cpp
@@ -27,8 +27,11 @@
 
 #include <RobotAPI/libraries/core/CartesianVelocityController.h>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/MathTools.h>
+#include <VirtualRobot/Robot.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.h
index 40d1640ea..279242ca5 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/PositionControllerHelper.h
@@ -27,7 +27,8 @@
 
 #include "VelocityControllerHelper.h"
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/JacobiProvider.h>
 
 #include <RobotAPI/libraries/core/CartesianPositionController.h>
 #include <RobotAPI/libraries/core/Pose.h>
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
index cf5eb9b33..602cda542 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.cpp
@@ -31,6 +31,11 @@
 #include <ArmarXCore/util/CPPUtility/trace.h>
 // #include <ArmarXCore/core/system/ArmarXDataPath.cpp>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/Visualization/TriMeshModel.h>
+
 #include <Eigen/Dense>
 #include <algorithm>
 
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
index c1fa9b4d7..86e01df9c 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
@@ -25,9 +25,7 @@
 
 #include <RobotAPI/interface/core/RobotState.h>
 
-#include <VirtualRobot/Robot.h>
 #include <VirtualRobot/VirtualRobot.h>
-#include <VirtualRobot/Visualization/TriMeshModel.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp b/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp
index e18c49fcb..2ae44a291 100644
--- a/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp
+++ b/source/RobotAPI/libraries/armem_grasping/server/KnownGraspProviderSegment.cpp
@@ -1,7 +1,9 @@
 #include "KnownGraspProviderSegment.h"
 
 #include <SimoxUtility/algorithm/string/string_tools.h>
+#include <VirtualRobot/Grasping/Grasp.h>
 #include <VirtualRobot/Grasping/GraspSet.h>
+#include <VirtualRobot/ManipulationObject.h>
 #include <VirtualRobot/XML/ObjectIO.h>
 
 #include <ArmarXCore/core/exceptions/LocalException.h>
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp
index 764cbdcc8..9f69b9300 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp
@@ -3,6 +3,7 @@
 #include <Eigen/Core>
 #include <Eigen/Geometry>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/Robot.h>
 #include <SimoxUtility/algorithm/string/string_tools.h>
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
index 130e229fb..505d2b44b 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
@@ -6,6 +6,7 @@
 #include <VirtualRobot/Robot.h>
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/XML/RobotIO.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/PackagePath.h>
 #include <ArmarXCore/core/logging/Logging.h>
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
index 571838aa3..83a17cf03 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
@@ -21,7 +21,6 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h
index 0bae7b6e9..b0a9552b8 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h
@@ -21,9 +21,7 @@
 
 #pragma once
 
-#include <VirtualRobot/Robot.h>
 #include <VirtualRobot/VirtualRobot.h>
-#include <VirtualRobot/XML/RobotIO.h>
 
 #include "RobotAPI/libraries/armem/core/forward_declarations.h"
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
index 184fae248..884d85255 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
@@ -22,6 +22,8 @@
 
 #pragma once
 
+#include <mutex>
+
 #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem/client/Reader.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 8a6af7701..2627328d9 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp
@@ -10,6 +10,7 @@
 #include <SimoxUtility/algorithm/string/string_tools.h>
 #include <SimoxUtility/math/pose.h>
 #include <SimoxUtility/math/rescale.h>
+#include <VirtualRobot/Nodes/Sensor.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
 #include <ArmarXCore/core/logging/Logging.h>
diff --git a/source/RobotAPI/libraries/armem_vision/types.h b/source/RobotAPI/libraries/armem_vision/types.h
index 1a6b6b7d6..1ddd16d87 100644
--- a/source/RobotAPI/libraries/armem_vision/types.h
+++ b/source/RobotAPI/libraries/armem_vision/types.h
@@ -21,9 +21,9 @@
 
 #pragma once
 
-#include <vector>
 
-#include <VirtualRobot/MathTools.h>
+#include <Eigen/Core>
+#include <Eigen/Geometry>
 
 #include <RobotAPI/interface/units/LaserScannerUnit.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
diff --git a/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.cpp b/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.cpp
index 18f347139..1804cb732 100644
--- a/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.cpp
@@ -24,6 +24,12 @@
 #include "CartesianFeedForwardPositionController.h"
 #include <RobotAPI/libraries/core/math/MathUtils.h>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/math/AbstractFunctionR1R6.h>
+
 namespace armarx
 {
     CartesianFeedForwardPositionController::CartesianFeedForwardPositionController(const VirtualRobot::RobotNodePtr& tcp)
diff --git a/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.h b/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.h
index 4c2704aca..c40a39464 100644
--- a/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.h
+++ b/source/RobotAPI/libraries/core/CartesianFeedForwardPositionController.h
@@ -23,11 +23,11 @@
 
 #pragma once
 
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/math/MathForwardDefinitions.h>
+#include <VirtualRobot/IK/IKSolver.h>
+
 #include <Eigen/Dense>
-#include <VirtualRobot/math/AbstractFunctionR1R6.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/core/CartesianNaturalPositionController.cpp b/source/RobotAPI/libraries/core/CartesianNaturalPositionController.cpp
index b1f6850fb..5c45b8873 100644
--- a/source/RobotAPI/libraries/core/CartesianNaturalPositionController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianNaturalPositionController.cpp
@@ -29,8 +29,10 @@
 
 #include "CartesianNaturalPositionController.h"
 
+#include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/MathTools.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/core/CartesianPositionController.cpp b/source/RobotAPI/libraries/core/CartesianPositionController.cpp
index c34d94957..a2d75227f 100644
--- a/source/RobotAPI/libraries/core/CartesianPositionController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianPositionController.cpp
@@ -23,6 +23,12 @@
 
 #include "CartesianPositionController.h"
 
+
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
+
 #include <RobotAPI/libraries/core/math/MathUtils.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
diff --git a/source/RobotAPI/libraries/core/CartesianPositionController.h b/source/RobotAPI/libraries/core/CartesianPositionController.h
index d4f3a6883..df4272087 100644
--- a/source/RobotAPI/libraries/core/CartesianPositionController.h
+++ b/source/RobotAPI/libraries/core/CartesianPositionController.h
@@ -23,9 +23,9 @@
 
 #pragma once
 
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/IKSolver.h>
+
 #include <Eigen/Dense>
 
 #include <RobotAPI/interface/core/CartesianPositionControllerConfig.h>
@@ -128,4 +128,3 @@ namespace armarx
 
     typedef IceInternal::Handle<CartesianPositionControllerConfig> CartesianPositionControllerConfigPtr;
 }
-
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityController.cpp b/source/RobotAPI/libraries/core/CartesianVelocityController.cpp
index 93d3df8e9..636104a39 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianVelocityController.cpp
@@ -28,8 +28,11 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/Robot.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
 
 #include <Eigen/Core>
 
@@ -306,5 +309,3 @@ void CartesianVelocityController::setJointCosts(const std::vector<float>& jointC
         _jointCosts(i) = jointCosts.at(i);
     }
 }
-
-
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityController.h b/source/RobotAPI/libraries/core/CartesianVelocityController.h
index 3e37d44f5..0454957fb 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityController.h
+++ b/source/RobotAPI/libraries/core/CartesianVelocityController.h
@@ -23,8 +23,8 @@
 
 #pragma once
 
-#include <VirtualRobot/IK/DifferentialIK.h>
 #include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/JacobiProvider.h>
 
 #include <Eigen/Core>
 
@@ -75,4 +75,3 @@ namespace armarx
         Eigen::VectorXf _jointCosts;
     };
 }
-
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp
index ee06ab837..6c9d30d58 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp
+++ b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.cpp
@@ -23,6 +23,10 @@
 
 #include "CartesianVelocityControllerWithRamp.h"
 
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+
 #include <ArmarXCore/core/logging/Logging.h>
 
 namespace armarx
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.h b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.h
index 1a73b8490..3b6b93dc9 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.h
+++ b/source/RobotAPI/libraries/core/CartesianVelocityControllerWithRamp.h
@@ -28,9 +28,8 @@
 #include "JointVelocityRamp.h"
 
 #include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/IKSolver.h>
 
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
 #include <Eigen/Dense>
 
 
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityRamp.cpp b/source/RobotAPI/libraries/core/CartesianVelocityRamp.cpp
index e904576b7..eb5646dac 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityRamp.cpp
+++ b/source/RobotAPI/libraries/core/CartesianVelocityRamp.cpp
@@ -25,6 +25,9 @@
 
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/Robot.h>
+
 namespace armarx
 {
     CartesianVelocityRamp::CartesianVelocityRamp()
@@ -88,4 +91,3 @@ namespace armarx
         return maxOrientationAcceleration;
     }
 }
-
diff --git a/source/RobotAPI/libraries/core/CartesianVelocityRamp.h b/source/RobotAPI/libraries/core/CartesianVelocityRamp.h
index b4d5aac33..573dfe2b2 100644
--- a/source/RobotAPI/libraries/core/CartesianVelocityRamp.h
+++ b/source/RobotAPI/libraries/core/CartesianVelocityRamp.h
@@ -23,8 +23,9 @@
 
 #pragma once
 
-#include <VirtualRobot/IK/DifferentialIK.h>
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/IKSolver.h>
+
 #include <Eigen/Dense>
 
 namespace armarx
diff --git a/source/RobotAPI/libraries/core/CartesianWaypointController.cpp b/source/RobotAPI/libraries/core/CartesianWaypointController.cpp
index 917877b7a..34c1902c0 100644
--- a/source/RobotAPI/libraries/core/CartesianWaypointController.cpp
+++ b/source/RobotAPI/libraries/core/CartesianWaypointController.cpp
@@ -31,6 +31,7 @@
 
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/MathTools.h>
+#include <VirtualRobot/Robot.h>
 #include <cfloat>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
diff --git a/source/RobotAPI/libraries/core/CartesianWaypointController.h b/source/RobotAPI/libraries/core/CartesianWaypointController.h
index b87ae11f3..d6fb2f7bc 100644
--- a/source/RobotAPI/libraries/core/CartesianWaypointController.h
+++ b/source/RobotAPI/libraries/core/CartesianWaypointController.h
@@ -27,7 +27,7 @@
 
 #include <Eigen/Dense>
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/libraries/core/CartesianPositionController.h>
 #include <RobotAPI/libraries/core/Pose.h>
diff --git a/source/RobotAPI/libraries/core/FramedOrientedPoint.cpp b/source/RobotAPI/libraries/core/FramedOrientedPoint.cpp
index 67391514f..9c42823f1 100644
--- a/source/RobotAPI/libraries/core/FramedOrientedPoint.cpp
+++ b/source/RobotAPI/libraries/core/FramedOrientedPoint.cpp
@@ -22,7 +22,6 @@
 
 #include <VirtualRobot/Robot.h>
 #include <VirtualRobot/LinkedCoordinate.h>
-#include <VirtualRobot/LinkedCoordinate.h>
 #include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
diff --git a/source/RobotAPI/libraries/core/FramedOrientedPoint.h b/source/RobotAPI/libraries/core/FramedOrientedPoint.h
index 3504cad3a..22aff2d36 100644
--- a/source/RobotAPI/libraries/core/FramedOrientedPoint.h
+++ b/source/RobotAPI/libraries/core/FramedOrientedPoint.h
@@ -23,9 +23,6 @@
 
 #include "OrientedPoint.h"
 
-#include <VirtualRobot/Robot.h>
-#include <VirtualRobot/LinkedCoordinate.h>
-#include <VirtualRobot/LinkedCoordinate.h>
 #include <VirtualRobot/VirtualRobot.h>
 
 #include <RobotAPI/interface/core/RobotState.h>
@@ -105,4 +102,3 @@ namespace armarx
 
     };
 }
-
diff --git a/source/RobotAPI/libraries/core/RobotPool.cpp b/source/RobotAPI/libraries/core/RobotPool.cpp
index 0b6d58afe..731646d13 100644
--- a/source/RobotAPI/libraries/core/RobotPool.cpp
+++ b/source/RobotAPI/libraries/core/RobotPool.cpp
@@ -24,6 +24,7 @@
 #include "RobotPool.h"
 
 #include <VirtualRobot/CollisionDetection/CollisionChecker.h>
+#include <VirtualRobot/Robot.h>
 
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
diff --git a/source/RobotAPI/libraries/core/RobotPool.h b/source/RobotAPI/libraries/core/RobotPool.h
index 4d6db6fc1..c65afe303 100644
--- a/source/RobotAPI/libraries/core/RobotPool.h
+++ b/source/RobotAPI/libraries/core/RobotPool.h
@@ -23,9 +23,10 @@
  */
 #pragma once
 
-#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <mutex>
+#include <map>
 
 namespace armarx
 {
@@ -60,5 +61,3 @@ namespace armarx
     };
     using RobotPoolPtr = std::shared_ptr<RobotPool>;
 }
-
-
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
index 4f0f563e7..4383ae2e5 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
@@ -31,7 +31,14 @@
 #include <VirtualRobot/Nodes/RobotNodePrismaticFactory.h>
 #include <VirtualRobot/Nodes/RobotNodeRevoluteFactory.h>
 #include <VirtualRobot/CollisionDetection/CollisionChecker.h>
-
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <RobotAPI/interface/core/RobotState.h>
+#include <VirtualRobot/Nodes/RobotNodeRevolute.h>
+#include <VirtualRobot/Nodes/RobotNodePrismatic.h>
+#include <VirtualRobot/Nodes/RobotNodeFixed.h>
+#include <VirtualRobot/XML/RobotIO.h>
 
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
index 734db7407..c976c5341 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
@@ -23,15 +23,15 @@
  */
 #pragma once
 
-#include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/Robot.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <RobotAPI/interface/core/RobotState.h>
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/XML/RobotIO.h>
+
+#include <VirtualRobot/Nodes/RobotNodeFixed.h>
 #include <VirtualRobot/Nodes/RobotNodeRevolute.h>
 #include <VirtualRobot/Nodes/RobotNodePrismatic.h>
-#include <VirtualRobot/Nodes/RobotNodeFixed.h>
-#include <VirtualRobot/XML/RobotIO.h>
+
+#include <RobotAPI/interface/core/RobotState.h>
 
 #include <mutex>
 
@@ -262,4 +262,3 @@ namespace armarx
 
     using RemoteRobotPtr = std::shared_ptr<RemoteRobot>;
 }
-
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp
index 28bb76573..6e402e300 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp
@@ -29,6 +29,7 @@
 #include <ArmarXCore/interface/core/BasicTypes.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/VirtualRobot.h>
 
 
diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
index d8d4f0f6d..833e6a399 100644
--- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
+++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
@@ -24,9 +24,13 @@
 #include "CompositeDiffIK.h"
 #include <VirtualRobot/Robot.h>
 #include <ArmarXCore/core/exceptions/Exception.h>
+
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+
 #include <cfloat>
 
 using namespace armarx;
@@ -458,3 +462,21 @@ Eigen::VectorXf CompositeDiffIK::NullspaceJointLimitAvoidance::getGradient(Param
     }
     return r.cwiseProduct(weight);
 }
+
+Eigen::Matrix4f
+armarx::CompositeDiffIK::Target::getPoseError() const
+{
+    return tcp->getPoseInRootFrame().inverse() * target;
+}
+
+Eigen::Vector3f
+armarx::CompositeDiffIK::Target::getPosError() const
+{
+    return (tcp->getPoseInRootFrame().inverse() * target).topRightCorner<3, 1>();
+}
+
+auto
+armarx::CompositeDiffIK::Target::getOriError() const
+{
+    return simox::math::delta_angle(tcp->getPoseInRootFrame(), target);
+}
diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
index 2736bfff3..2963293f6 100644
--- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
@@ -22,11 +22,11 @@
  */
 
 #pragma once
+
 #include <SimoxUtility/math/distance/delta_angle.h>
 
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/VirtualRobot.h>
+
 #include <RobotAPI/libraries/core/CartesianPositionController.h>
 #include <RobotAPI/libraries/core/CartesianVelocityController.h>
 
@@ -150,18 +150,9 @@ namespace armarx
 
             std::vector<TargetStep> ikSteps;
 
-            Eigen::Matrix4f getPoseError() const
-            {
-                return tcp->getPoseInRootFrame().inverse() * target;
-            }
-            Eigen::Vector3f getPosError() const
-            {
-                return (tcp->getPoseInRootFrame().inverse() * target).topRightCorner<3, 1>();
-            }
-            auto getOriError() const
-            {
-                return simox::math::delta_angle(tcp->getPoseInRootFrame(), target);
-            }
+            Eigen::Matrix4f getPoseError() const;
+            Eigen::Vector3f getPosError() const;
+            auto getOriError() const;
         };
         typedef std::shared_ptr<Target> TargetPtr;
 
diff --git a/source/RobotAPI/libraries/diffik/GraspTrajectory.cpp b/source/RobotAPI/libraries/diffik/GraspTrajectory.cpp
index 3e6cdff5c..ae7aace62 100644
--- a/source/RobotAPI/libraries/diffik/GraspTrajectory.cpp
+++ b/source/RobotAPI/libraries/diffik/GraspTrajectory.cpp
@@ -25,6 +25,9 @@
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include <VirtualRobot/math/AbstractFunctionR1R6.h>
+#include <VirtualRobot/math/Helpers.h>
+
 using namespace armarx;
 
 
diff --git a/source/RobotAPI/libraries/diffik/GraspTrajectory.h b/source/RobotAPI/libraries/diffik/GraspTrajectory.h
index 8cc0a7cad..777ed4066 100644
--- a/source/RobotAPI/libraries/diffik/GraspTrajectory.h
+++ b/source/RobotAPI/libraries/diffik/GraspTrajectory.h
@@ -38,9 +38,6 @@
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <ArmarXCore/interface/serialization/Eigen.h>
 
-#include <VirtualRobot/math/AbstractFunctionR1R6.h>
-#include <VirtualRobot/math/Helpers.h>
-
 #include <Eigen/Core>
 
 #include <vector>
diff --git a/source/RobotAPI/libraries/diffik/NaturalDiffIK.cpp b/source/RobotAPI/libraries/diffik/NaturalDiffIK.cpp
index e7497443b..802f1e01c 100644
--- a/source/RobotAPI/libraries/diffik/NaturalDiffIK.cpp
+++ b/source/RobotAPI/libraries/diffik/NaturalDiffIK.cpp
@@ -24,6 +24,11 @@
 
 #include "NaturalDiffIK.h"
 
+
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+
 #include <RobotAPI/libraries/core/CartesianPositionController.h>
 #include <RobotAPI/libraries/core/CartesianVelocityController.h>
 
diff --git a/source/RobotAPI/libraries/diffik/NaturalDiffIK.h b/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
index 0bdafb506..dbbd1e117 100644
--- a/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
@@ -23,10 +23,8 @@
 
 #pragma once
 
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
-#include <VirtualRobot/IK/DifferentialIK.h>
-
+#include <VirtualRobot/VirtualRobot.h>
+#include <VirtualRobot/IK/IKSolver.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/diffik/SimpleDiffIK.cpp b/source/RobotAPI/libraries/diffik/SimpleDiffIK.cpp
index c3f1a32db..ef6a4d91b 100644
--- a/source/RobotAPI/libraries/diffik/SimpleDiffIK.cpp
+++ b/source/RobotAPI/libraries/diffik/SimpleDiffIK.cpp
@@ -23,6 +23,9 @@
 
 #include "SimpleDiffIK.h"
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
+
 #include <RobotAPI/libraries/core/CartesianPositionController.h>
 #include <RobotAPI/libraries/core/CartesianVelocityController.h>
 
@@ -171,4 +174,21 @@ namespace armarx
         return r;
     }
 
-}
+    void
+    SimpleDiffIK::Reachability::aggregate(const Result& result)
+    {
+        ikResults.emplace_back(result);
+        reachable = reachable && result.reached;
+        minimumJointLimitMargin = std::min(minimumJointLimitMargin, result.minimumJointLimitMargin);
+        if (jointLimitMargins.rows() == 0)
+        {
+            jointLimitMargins = result.jointLimitMargins;
+        }
+        else
+        {
+            jointLimitMargins = jointLimitMargins.cwiseMin(result.jointLimitMargins);
+        }
+        maxPosError = std::max(maxPosError, result.posError);
+        maxOriError = std::max(maxOriError, result.oriError);
+    }
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/diffik/SimpleDiffIK.h b/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
index d71ebbee9..583fef2a8 100644
--- a/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
@@ -25,8 +25,7 @@
 
 #include "DiffIKProvider.h"
 
-#include <VirtualRobot/Nodes/RobotNode.h>
-#include <VirtualRobot/RobotNodeSet.h>
+#include <VirtualRobot/VirtualRobot.h>
 
 #include <memory>
 
@@ -88,22 +87,7 @@ namespace armarx
             float maxOriError = 0;
             std::vector<Result> ikResults;
 
-            void aggregate(const Result& result)
-            {
-                ikResults.emplace_back(result);
-                reachable = reachable && result.reached;
-                minimumJointLimitMargin = std::min(minimumJointLimitMargin, result.minimumJointLimitMargin);
-                if (jointLimitMargins.rows() == 0)
-                {
-                    jointLimitMargins = result.jointLimitMargins;
-                }
-                else
-                {
-                    jointLimitMargins = jointLimitMargins.cwiseMin(result.jointLimitMargins);
-                }
-                maxPosError = std::max(maxPosError, result.posError);
-                maxOriError = std::max(maxOriError, result.oriError);
-            }
+            void aggregate(const Result& result);
         };
 
         static Result CalculateDiffIK(const Eigen::Matrix4f targetPose, VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp = VirtualRobot::RobotNodePtr(), Parameters params = Parameters());
diff --git a/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.cpp b/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.cpp
index 7a57d550d..bb532f393 100644
--- a/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.cpp
+++ b/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.cpp
@@ -27,6 +27,8 @@
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 //#include <RobotAPI/libraries/aron/core/navigator/Navigator.h>
 
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/math/Helpers.h>
 #include <VirtualRobot/MathTools.h>
 
@@ -530,5 +532,3 @@ CartesianNaturalPositionControllerProxy::ScopedJointValueRestore::~ScopedJointVa
     //ARMARX_IMPORTANT << "restoring joint values";
     rns->setJointValues(jointValues);
 }
-
-
diff --git a/source/RobotAPI/libraries/natik/NaturalIK.cpp b/source/RobotAPI/libraries/natik/NaturalIK.cpp
index 76bd6e75e..6a561959d 100644
--- a/source/RobotAPI/libraries/natik/NaturalIK.cpp
+++ b/source/RobotAPI/libraries/natik/NaturalIK.cpp
@@ -23,11 +23,15 @@
 
 #include "NaturalIK.h"
 #include <ArmarXCore/core/exceptions/Exception.h>
+
 #include <SimoxUtility/math/convert/deg_to_rad.h>
 #include <SimoxUtility/math/convert/rad_to_deg.h>
-#include <ArmarXCore/core/logging/Logging.h>
+#include <VirtualRobot/Nodes/RobotNode.h>
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/math/Helpers.h>
 
+#include <ArmarXCore/core/logging/Logging.h>
+
 using namespace armarx;
 
 NaturalIK::NaturalIK(std::string side, Eigen::Vector3f shoulderPos, float scale)
diff --git a/source/RobotAPI/libraries/natik/NaturalIK.h b/source/RobotAPI/libraries/natik/NaturalIK.h
index 7e1ecb940..e71511d9b 100644
--- a/source/RobotAPI/libraries/natik/NaturalIK.h
+++ b/source/RobotAPI/libraries/natik/NaturalIK.h
@@ -26,7 +26,9 @@
 #include <memory>
 
 //#include <RobotAPI/libraries/core/SimpleDiffIK.h>
-#include <VirtualRobot/Nodes/RobotNode.h>
+
+#include <VirtualRobot/VirtualRobot.h>
+
 #include <RobotAPI/libraries/diffik/DiffIKProvider.h>
 #include <RobotAPI/libraries/diffik/NaturalDiffIK.h>
 #include <optional>
diff --git a/source/RobotAPI/libraries/obstacle_avoidance/CollisionModelHelper.cpp b/source/RobotAPI/libraries/obstacle_avoidance/CollisionModelHelper.cpp
index 05a230a8e..b8165c4ba 100644
--- a/source/RobotAPI/libraries/obstacle_avoidance/CollisionModelHelper.cpp
+++ b/source/RobotAPI/libraries/obstacle_avoidance/CollisionModelHelper.cpp
@@ -22,6 +22,7 @@
 
 #include "CollisionModelHelper.h"
 
+#include <VirtualRobot/CollisionDetection/CollisionModel.h>
 #include <VirtualRobot/ManipulationObject.h>
 #include <VirtualRobot/SceneObjectSet.h>
 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
diff --git a/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp b/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
index df07b365c..95ee1853b 100644
--- a/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
+++ b/source/RobotAPI/statecharts/RobotNameHelperTestGroup/TestGetNames.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "TestGetNames.h"
+#include <VirtualRobot/RobotNodeSet.h>
 
 #include <RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h>
 
@@ -208,4 +209,3 @@ XMLStateFactoryBasePtr TestGetNames::CreateInstance(XMLStateConstructorParams st
 {
     return XMLStateFactoryBasePtr(new TestGetNames(stateData));
 }
-
-- 
GitLab


From 7a236158349d72bd46920044e8605c4bf78f0397 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 11 Dec 2024 10:51:16 +0100
Subject: [PATCH 2/4] minor fix

---
 .../units/RobotUnit/SensorValues/SensorValueForceTorque.h      | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueForceTorque.h b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueForceTorque.h
index 776bb731d..707800ad7 100644
--- a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueForceTorque.h
+++ b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueForceTorque.h
@@ -23,7 +23,8 @@
 
 #include <RobotAPI/libraries/core/Pose.h>
 
-#include "Eigen/Core"
+#include <Eigen/Core>
+
 #include "SensorValueBase.h"
 
 namespace armarx
-- 
GitLab


From a964ca31fbca2d282e2d5056f8e4e837bd9675ef Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 11 Dec 2024 13:38:19 +0100
Subject: [PATCH 3/4] fixing includes in tests

---
 .../libraries/core/test/CartesianVelocityControllerTest.cpp | 6 ++++++
 .../core/test/CartesianVelocityControllerWithRampTest.cpp   | 1 +
 2 files changed, 7 insertions(+)

diff --git a/source/RobotAPI/libraries/core/test/CartesianVelocityControllerTest.cpp b/source/RobotAPI/libraries/core/test/CartesianVelocityControllerTest.cpp
index 683ad38f8..9c2f0fc60 100644
--- a/source/RobotAPI/libraries/core/test/CartesianVelocityControllerTest.cpp
+++ b/source/RobotAPI/libraries/core/test/CartesianVelocityControllerTest.cpp
@@ -23,9 +23,15 @@
 #define BOOST_TEST_MODULE RobotAPI::CartesianVelocityController::Test
 #define ARMARX_BOOST_TEST
 #include <RobotAPI/Test.h>
+
 #include <ArmarXCore/core/test/IceTestHelper.h>
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
+
+#include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/XML/RobotIO.h>
+#include <VirtualRobot/IK/DifferentialIK.h>
+#include <VirtualRobot/IK/IKSolver.h>
+
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include "../CartesianVelocityController.h"
 
diff --git a/source/RobotAPI/libraries/core/test/CartesianVelocityControllerWithRampTest.cpp b/source/RobotAPI/libraries/core/test/CartesianVelocityControllerWithRampTest.cpp
index 5ffd4e0ae..a4dcccdce 100644
--- a/source/RobotAPI/libraries/core/test/CartesianVelocityControllerWithRampTest.cpp
+++ b/source/RobotAPI/libraries/core/test/CartesianVelocityControllerWithRampTest.cpp
@@ -20,6 +20,7 @@
 *             GNU General Public License
 */
 
+#include <VirtualRobot/IK/DifferentialIK.h>
 #define BOOST_TEST_MODULE RobotAPI::CartesianVelocityController::Test
 #define ARMARX_BOOST_TEST
 #include <RobotAPI/Test.h>
-- 
GitLab


From 60d756d615e12fb451ef217bac68b44205da6dd3 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 12 Dec 2024 17:10:02 +0100
Subject: [PATCH 4/4] adding source file to cmakelists

---
 source/RobotAPI/components/DebugDrawer/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
index 131cc850c..5322817c5 100644
--- a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
+++ b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
@@ -5,6 +5,7 @@ set(COMPONENT_LIBS ArmarXCore RobotAPIInterfaces RobotAPICore)
 set(SOURCES
     DebugDrawerComponent.cpp
     DebugDrawerHelper.cpp
+    DebugDrawerUtils.cpp
     )
 set(HEADERS
     DebugDrawerComponent.h
-- 
GitLab