diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
index 0e309977a4f026e1d3bd2cb0c3530069063da5da..b81e735542abce076bbac03a5641e54419eee40c 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
@@ -270,6 +270,16 @@ void KinematicUnitSimulation::setJointTorques(const NameValueMap& targetJointTor
         listenerPrx->reportJointTorques(actualJointTorques, aValueChanged);
 }
 
+NameControlModeMap KinematicUnitSimulation::getControlModes(const Ice::Current& c)
+{
+    NameControlModeMap result;
+    for ( KinematicUnitSimulationJointStates::iterator it = jointStates.begin(); it!=jointStates.end(); it++ )
+    {
+        result[it->first] = it->second.controlMode;
+    }
+    return result;
+}
+
 void KinematicUnitSimulation::setJointAccelerations(const NameValueMap& targetJointAccelerations, const Ice::Current& c)
 {
 }
diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.h b/source/RobotAPI/components/units/KinematicUnitSimulation.h
index 4b15853425deae3cff664c3875fa3ae3d3b6f702..a0464e610c5bd6550bfb7b73704298855136b53b 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.h
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.h
@@ -140,6 +140,8 @@ namespace armarx
         virtual void setJointVelocities(const NameValueMap& targetJointVelocities, const Ice::Current& c = ::Ice::Current());
         virtual void setJointTorques(const NameValueMap& targetJointTorques, const Ice::Current& c = ::Ice::Current());
 
+        virtual NameControlModeMap getControlModes(const Ice::Current& c = ::Ice::Current());
+
         /**
          * \warning Not implemented yet!
          */
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index 0ffc02e4e25da5aeaf0d79ba54e6245f7b1a0836..344046a2c48fb10236b06351cef3582e584bc57e 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -146,6 +146,10 @@ void KinematicUnitWidgetController::onConnectComponent()
     std::string kinematicUnitInstructionChannel = kinematicUnitName;
     // NOW: kinematicUnitInstructionChannel -> HeadKinematicUnit
     kinematicUnitInterfacePrx = getProxy<KinematicUnitInterfacePrx>(kinematicUnitInstructionChannel);
+
+    // init control mode map
+    reportedJointControlModes = kinematicUnitInterfacePrx->getControlModes();
+
     initializeUi();
     enableMainWidgetAsync(true);
 }
diff --git a/source/RobotAPI/interface/units/KinematicUnitInterface.ice b/source/RobotAPI/interface/units/KinematicUnitInterface.ice
index 5d0011a86373663433eb474534a5b51bea07692e..c1700c113728826bea9d7ae1be259528b0673cde 100644
--- a/source/RobotAPI/interface/units/KinematicUnitInterface.ice
+++ b/source/RobotAPI/interface/units/KinematicUnitInterface.ice
@@ -171,6 +171,12 @@ module armarx
         void setJointAccelerations(NameValueMap targetJointAccelerations) throws OutOfRangeException;
         void setJointDecelerations(NameValueMap targetJointDecelerations) throws OutOfRangeException;
         
+        /*!
+         * Returns the current control mode setup of all joints.
+         * @return List with current control modes
+         */
+        NameControlModeMap getControlModes();
+
         /*
          * NYI
          */