diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
index 4d618fa97bf5eeb6b1c9f29c6bf3495eeb8b49ae..d967974ffb713619f554f08a2a2aa898fc9c700f 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
@@ -68,6 +68,14 @@ namespace armarx
         this->_synchronized = VirtualRobot::RobotIO::loadRobot(robotFile, VirtualRobot::RobotIO::eStructure);
         _synchronized->setName(getProperty<std::string>("AgentName").getValue());
 
+        robotModelScaling = getProperty<float>("RobotModelScaling").getValue();
+        ARMARX_INFO << "scale factor: " << robotModelScaling;
+        if (robotModelScaling != 1.0f)
+        {
+            ARMARX_INFO << "Scaling robot model with scale factor " << robotModelScaling;
+            _synchronized = _synchronized->clone(_synchronized->getName(), _synchronized->getCollisionChecker(), robotModelScaling);
+        }
+
         if (this->_synchronized)
         {
             ARMARX_VERBOSE << "Loaded robot from file " << robotFile << ". Robot name: " << this->_synchronized->getName();
@@ -101,6 +109,7 @@ namespace armarx
         }
         usingTopic(robotNodeSetName + "State");
 
+
         /*VirtualRobot::RobotNodeSetPtr pns = this->_synchronized->getRobotNodeSet("Platform");
         if (pns)
         {
@@ -198,6 +207,11 @@ namespace armarx
         return relativeRobotFile;
     }
 
+    float RobotStateComponent::getScaling(const Ice::Current&) const
+    {
+        return robotModelScaling;
+    }
+
     std::vector<string> RobotStateComponent::getArmarXPackages(const Current&) const
     {
         std::vector<string> result;
diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.h b/source/RobotAPI/components/RobotState/RobotStateComponent.h
index f5c1d14349a6c6f284a0ecf34df10781c358ee58..f1a3b2d827facc4e15c0e0dc9a7d2b6fc8093297 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.h
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.h
@@ -51,6 +51,7 @@ namespace armarx
             defineRequiredProperty<std::string>("RobotNodeSetName", "Set of nodes that is controlled by the KinematicUnit");
             defineRequiredProperty<std::string>("RobotFileName", "Filename of VirtualRobot robot model (e.g. robot_model.xml)");
             defineRequiredProperty<std::string>("AgentName", "Name of the agent for which the sensor values are provided");
+            defineOptionalProperty<float>("RobotModelScaling", 1.0f, "Scaling of the robot model");
         }
     };
 
@@ -126,6 +127,8 @@ namespace armarx
             return "RobotStateComponent";
         }
         void setRobotStateObserver(RobotStateObserverPtr observer);
+
+        float getScaling(const Ice::Current&) const;
     protected:
         /**
          * Load and create a VirtualRobot::Robot instance from the RobotFileName
@@ -162,7 +165,7 @@ namespace armarx
 
         std::string robotNodeSetName;
 
-
+        float robotModelScaling;
     };
 
 }
diff --git a/source/RobotAPI/interface/core/RobotState.ice b/source/RobotAPI/interface/core/RobotState.ice
index c65d1ee3618a9c5e77578377476815a8e79ccecf..0e91dc6c0a332f310a35dea9764e8ff926515f72 100644
--- a/source/RobotAPI/interface/core/RobotState.ice
+++ b/source/RobotAPI/interface/core/RobotState.ice
@@ -157,6 +157,14 @@ module armarx
        ["cpp:const"]
        idempotent string getRobotName() throws NotInitializedException;
 
+
+       /**
+        * @return The scaling of the robot model represented by this component.
+        *
+        */
+       ["cpp:const"]
+       idempotent float getScaling();
+
        /**
         * @return The name of the robot node set that is represented by this component.
         *
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
index 7cb4951b41b79fa56e17186d85848ff721b77b13..93c00449519a6ee7f37ff84a846348b76bf6de23 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
@@ -322,10 +322,10 @@ namespace armarx
 
     VirtualRobot::RobotPtr RemoteRobot::createLocalClone(RobotStateComponentInterfacePrx robotStatePrx, const string& filename)
     {
-        return createLocalClone(robotStatePrx->getSynchronizedRobot(), filename);
+        return createLocalClone(robotStatePrx->getSynchronizedRobot(), filename, robotStatePrx->getScaling());
     }
 
-    RobotPtr RemoteRobot::createLocalClone(SharedRobotInterfacePrx sharedRobotPrx, const string& filename)
+    RobotPtr RemoteRobot::createLocalClone(SharedRobotInterfacePrx sharedRobotPrx, const string& filename, float scaling)
     {
         boost::recursive_mutex::scoped_lock cloneLock(m);
         ARMARX_VERBOSE_S << "Creating local clone of remote robot (filename:" << filename << ")" << endl;
@@ -357,6 +357,12 @@ namespace armarx
                 ARMARX_ERROR_S << "Could not load robot file " << filename << ". Aborting..." << endl;
                 return result;
             }
+
+            if (scaling != 1.0f)
+            {
+                ARMARX_INFO_S << "Scaling robot to " << scaling;
+                result = result->clone(result->getName(), result->getCollisionChecker(), scaling);
+            }
         }
 
         synchronizeLocalClone(result, sharedRobotPrx);
diff --git a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
index 64bca72366ea03d0c8f6399d93352f1433f63888..5d33c4bb88006f985f89cab605dc2d1670225785 100644
--- a/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
@@ -187,7 +187,7 @@ namespace armarx
             */
         static VirtualRobot::RobotPtr createLocalClone(RobotStateComponentInterfacePrx robotStatePrx, const std::string& filename = std::string());
 
-        static VirtualRobot::RobotPtr createLocalClone(SharedRobotInterfacePrx sharedRobotPrx, const std::string& filename = std::string());
+        static VirtualRobot::RobotPtr createLocalClone(SharedRobotInterfacePrx sharedRobotPrx, const std::string& filename = std::string(), float scaling = 1.0f);
 
         /*!
                 Use this method to synchronize (i.e. copy the joint values) from the remote robot to the local clone.