diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
index 643995773e1ec95b58862c4fee5cf753c95a24ca..d4c729ae937af20e5c2f282530ae13459f4d7dda 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
@@ -33,6 +33,7 @@
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/util/algorithm.h>
+#include <RobotAPI/interface/units/KinematicUnitInterface.h>
 
 
 #include <algorithm>
@@ -472,6 +473,26 @@ Ice::StringSeq KinematicUnitSimulation::getJoints(const Ice::Current& c) const
     return getMapKeys(sensorAngles);
 }
 
+DebugInfo KinematicUnitSimulation::getDebugInfo(const Ice::Current& c) const
+{
+    std::lock_guard g{jointStatesMutex};
+
+    DebugInfo debugInfo;
+    for(const auto& [jointName, info]: jointStates)
+    {
+        debugInfo.jointAngles[jointName] = info.angle;
+        debugInfo.jointVelocities[jointName] = info.velocity;
+
+        debugInfo.jointMotorTemperatures[jointName] = info.temperature;
+
+        debugInfo.jointTorques[jointName] = info.torque;
+        debugInfo.jointModes[jointName] = info.controlMode;
+    };
+
+    return debugInfo;
+}
+
+
 
 bool mapEntryEqualsString(std::pair<std::string, KinematicUnitSimulationJointState> iter, std::string compareString)
 {
@@ -499,4 +520,3 @@ void KinematicUnitSimulation::releaseJoints(const Ice::StringSeq& joints, const
         KinematicUnit::release(c);
     }
 }
-
diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.h b/source/RobotAPI/components/units/KinematicUnitSimulation.h
index 09a6ae3ca003732e342c91db88c480f488981cc8..869d71cd1e5212297ca0f198316a2a0b74a9c58f 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.h
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.h
@@ -160,6 +160,8 @@ namespace armarx
         armarx::NameValueMap getJointVelocities(const Ice::Current& c) const override;
         Ice::StringSeq getJoints(const Ice::Current& c) const override;
 
+        DebugInfo getDebugInfo(const Ice::Current& c = Ice::emptyCurrent) const override;
+
         /// @see PropertyUser::createPropertyDefinitions()
         PropertyDefinitionsPtr createPropertyDefinitions() override;
 
@@ -167,7 +169,7 @@ namespace armarx
         KinematicUnitSimulationJointStates jointStates;
         KinematicUnitSimulationJointStates previousJointStates;
         KinematicUnitSimulationJointInfos jointInfos;
-        std::mutex jointStatesMutex;
+        mutable std::mutex jointStatesMutex;
         IceUtil::Time lastExecutionTime;
         float noise;
         int intervalMs;
@@ -180,7 +182,5 @@ namespace armarx
         mutable std::mutex sensorDataMutex;
         NameValueMap sensorAngles;
         NameValueMap sensorVelocities;
-
     };
 }
-