diff --git a/data/RobotAPI/VariantInfo-RobotAPI.xml b/data/RobotAPI/VariantInfo-RobotAPI.xml
index e74f767f7b603be9ed4e7b87267c1bcfd79ee2f6..2d9a715a24ce854c6a3201add60eb424f9c0e046 100644
--- a/data/RobotAPI/VariantInfo-RobotAPI.xml
+++ b/data/RobotAPI/VariantInfo-RobotAPI.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <VariantInfo>
-	<Lib name="RobotAPIRemoteRobot">
-		<VariantFactory include="RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h" />
+        <Lib name="RobotAPICore">
+                <VariantFactory include="RobotAPI/libraries/core/RobotAPIObjectFactories.h" />
 		<Variant baseType="::armarx::Vector3Base" dataType="::armarx::Vector3" humanName="Vector3" />
 		<Variant baseType="::armarx::QuaternionBase" dataType="::armarx::Quaternion" humanName="Quaternion" />
 		<Variant baseType="::armarx::PoseBase" dataType="::armarx::Pose" humanName="Pose" />
diff --git a/etc/doxygen/pages/armarpose.dox b/etc/doxygen/pages/armarpose.dox
index e9ff7dd108e9c1e05a87c04657ede0f8e1bea684..983134d4fcbd15d731f208208a6905139f1e408c 100644
--- a/etc/doxygen/pages/armarpose.dox
+++ b/etc/doxygen/pages/armarpose.dox
@@ -1,5 +1,5 @@
 /**
-\defgroup RobotAPI-ArmarPose Intelligent Coordinates
+\defgroup RobotAPI-FramedPose Intelligent Coordinates
 \ingroup RobotAPI
 
 ArmarX contains a concept for Intelligent Coordinates that eases transformation
@@ -14,7 +14,7 @@ can be called. One needs to give the new frame and the \ref armarx::SharedRobotI
 function.
 - The third level are the LinkedCoordinates (e.g. \ref armarx::LinkedPose "LinkedPose"), which contain all the information needed to do frame transformations.
 
-\section ArmarPose-FramedPositionCreation Creation of new FramedPositions
+\section FramedPose-FramedPositionCreation Creation of new FramedPositions
 To create a new FramedPosition (FramedOrientation, FramedVector and FramedPose work analogously) one needs
 to know the Position, the coordinate frame name and the agent name.
 The coordinate frame is usually the name of the RobotNode, e.g. the tcp of the robot.
@@ -36,7 +36,7 @@ So an example code for creating a new FramedPosition looks like this:
     armarx::FramedPositionPtr position = new armarx::FramedPosition(pos, frame, agentName);
 \endcode
 
-\section ArmarPose-ChangeFrame Change the frame of an FramedPosition
+\section FramedPose-ChangeFrame Change the frame of an FramedPosition
 In ArmarX the most common coordinate type is the FramedX, e.g. FramedPosition.
 To change the frame in this coordinate type, you can call \ref armarx::FramedPosition::changeFrame "changeFrame()" on the FramedPosition.
 You need to know the new frame, in which you want to have the
diff --git a/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
index 05fe0c172c0ad0f8c78894e86f4d212f6c4a5edd..e2dd3376056a3553f975bfdc28e56fddac37db25 100644
--- a/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
+++ b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
@@ -29,7 +29,7 @@
 //#include <interface/cpp/RemoteRobotTestProject/RemoteRobotTestProject.h>
 
 #include <VirtualRobot/VirtualRobot.h>
-#include <Core/robotstate/remote/RemoteRobot.h>
+#include <Core/core/remoterobot/RemoteRobot.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/applications/RobotStateComponent/CMakeLists.txt b/source/RobotAPI/applications/RobotStateComponent/CMakeLists.txt
index e19c80de0133cfc63dfda96d102d3e4f16589ba2..5006a4ec139a1adf87bfe90fa51c1389286185f2 100644
--- a/source/RobotAPI/applications/RobotStateComponent/CMakeLists.txt
+++ b/source/RobotAPI/applications/RobotStateComponent/CMakeLists.txt
@@ -6,7 +6,7 @@ armarx_build_if(Eigen3_FOUND "component disabled")
 
 include_directories(${Eigen3_INCLUDE_DIR})
 
-set(COMPONENT_LIBS RobotAPIRobotStateComponent)
+set(COMPONENT_LIBS RobotAPICore RobotAPIRobotStateComponent)
 
 set(SOURCES main.cpp RobotStateComponentApp.h)
 
diff --git a/source/RobotAPI/applications/RobotStateComponent/RobotStateComponentApp.h b/source/RobotAPI/applications/RobotStateComponent/RobotStateComponentApp.h
index e094fa8bd3b0b2c7af4cdcc7100ec9974316713c..de16b57ee1be3e4b6f8b6ac02d4f9d00e84ac881 100644
--- a/source/RobotAPI/applications/RobotStateComponent/RobotStateComponentApp.h
+++ b/source/RobotAPI/applications/RobotStateComponent/RobotStateComponentApp.h
@@ -24,7 +24,7 @@
 
 
 #include <Core/core/application/Application.h>
-#include <RobotAPI/libraries/robotstate/RobotStateComponent.h>
+#include <RobotAPI/components/robotstate/RobotStateComponent.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/applications/RobotStateObserver/CMakeLists.txt b/source/RobotAPI/applications/RobotStateObserver/CMakeLists.txt
index 94931b7ad0c41fe08b980daddd2e315001ea5475..de3d2f8a3762074f65d1ad1cb3cdc698461b8806 100644
--- a/source/RobotAPI/applications/RobotStateObserver/CMakeLists.txt
+++ b/source/RobotAPI/applications/RobotStateObserver/CMakeLists.txt
@@ -6,7 +6,7 @@ armarx_build_if(Eigen3_FOUND "component disabled")
 
 include_directories(${Eigen3_INCLUDE_DIR})
 
-set(COMPONENT_LIBS RobotAPIRemoteRobot)
+set(COMPONENT_LIBS RobotAPICore)
 
 set(SOURCES main.cpp RobotStateObserverApp.h)
 
diff --git a/source/RobotAPI/applications/RobotStateObserver/RobotStateObserverApp.h b/source/RobotAPI/applications/RobotStateObserver/RobotStateObserverApp.h
index 46c9c07c4ab7a2c4ca41857b7bc4003810c92f3a..8242165300590cf49e412e3781e3da1ce801f119 100644
--- a/source/RobotAPI/applications/RobotStateObserver/RobotStateObserverApp.h
+++ b/source/RobotAPI/applications/RobotStateObserver/RobotStateObserverApp.h
@@ -23,7 +23,7 @@
 
 
 #include <Core/core/application/Application.h>
-#include <RobotAPI/libraries/robotstate/remote/RobotStateObserver.h>
+#include <RobotAPI/libraries/core/remoterobot/RobotStateObserver.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/components/CMakeLists.txt b/source/RobotAPI/components/CMakeLists.txt
index 409b27488c2e48a25cd570c670175b5f22b33e91..aa7b18d6c739ebcd6718e0599ab8aca6e75547af 100644
--- a/source/RobotAPI/components/CMakeLists.txt
+++ b/source/RobotAPI/components/CMakeLists.txt
@@ -3,3 +3,5 @@ add_subdirectory(units)
 add_subdirectory(WeissHapticSensorListener)
 add_subdirectory(DebugDrawer)
 add_subdirectory(MMMPlayer)
+add_subdirectory(robotstate)
+
diff --git a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
index a7c6e10dc4b49d0c47b10e3cfa4e54a9d329fcb5..f3c262653a2649d7b54439df005c54896938fa02 100644
--- a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
+++ b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
@@ -19,7 +19,7 @@ if (Eigen3_FOUND AND Simox_FOUND)
 
 endif()
 
-set(COMPONENT_LIBS ArmarXCore RobotAPIInterfaces RobotAPIRemoteRobot ${Simox_LIBRARIES})
+set(COMPONENT_LIBS ArmarXCore RobotAPIInterfaces RobotAPICore ${Simox_LIBRARIES})
 
 set(SOURCES DebugDrawerComponent.cpp)
 set(HEADERS DebugDrawerComponent.h)
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
index 53aea22b62f33ffd5f3eed8bfd921f66883afa26..fe91c8816ccacff50d14e7f267438ed4ed3e2763 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
@@ -60,6 +60,11 @@ DebugDrawerComponent::DebugDrawerComponent()
     coinVisu->addChild(layerMainNode);
 }
 
+DebugDrawerComponent::~DebugDrawerComponent()
+{
+    std::cout << "DESTRUCTOR debug drawer" << std::endl;
+}
+
 void DebugDrawerComponent::onInitComponent()
 {
     usingTopic(getProperty<std::string>("DebugDrawerTopic").getValue());
@@ -79,6 +84,7 @@ void DebugDrawerComponent::onExitComponent()
 
     for(auto& layer:layers)
     {
+        ARMARX_DEBUG << "removing layer " << layer.first;
         removeLayer(layer.first);
     }
     coinVisu->removeAllChildren();
@@ -127,7 +133,7 @@ void DebugDrawerComponent::drawCoordSystem(const std::string &layerName, const s
 void DebugDrawerComponent::drawLine(const std::string &layerName, const std::string &name, Eigen::Vector3f &p1, Eigen::Vector3f &p2, float scale, VirtualRobot::VisualizationFactory::Color &color)
 {
     ScopedRecursiveLockPtr l = getScopedLock();
-    ARMARX_DEBUG << "drawLine" << flush;
+    ARMARX_DEBUG << "drawLine1" << flush;
 
     auto& layer=requestLayer(layerName);
 
@@ -141,6 +147,7 @@ void DebugDrawerComponent::drawLine(const std::string &layerName, const std::str
     newS->addChild(CoinVisualizationFactory::createCoinLine(lp1, lp2, scale, color.r, color.g, color.b));
     layer.addedLineVisualizations[name] = newS;
     layer.mainNode->addChild(newS);
+    ARMARX_DEBUG << "drawLine2" << flush;
 }
 
 void DebugDrawerComponent::drawBox(const std::string &layerName, const std::string &name, Eigen::Matrix4f &globalPose, float width, float height, float depth, VisualizationFactory::Color &color)
@@ -174,7 +181,7 @@ void DebugDrawerComponent::drawBox(const std::string &layerName, const std::stri
 void DebugDrawerComponent::drawText(const std::string &layerName, const std::string &name, const std::string &text, const Eigen::Vector3f &position, const VisualizationFactory::Color &color, int size)
 {
     ScopedRecursiveLockPtr l = getScopedLock();
-    ARMARX_DEBUG << "drawText";
+    ARMARX_DEBUG << "drawText1";
 
     auto& layer=requestLayer(layerName);
 
@@ -206,6 +213,7 @@ void DebugDrawerComponent::drawText(const std::string &layerName, const std::str
 
     layer.addedTextVisualizations[name] = sep;
     layer.mainNode->addChild(sep);
+    ARMARX_DEBUG << "drawText2";
 }
 
 void DebugDrawerComponent::drawSphere(const std::string& layerName, const std::string &name, const Eigen::Vector3f &position, const VisualizationFactory::Color &color, float radius)
@@ -239,7 +247,6 @@ void DebugDrawerComponent::drawSphere(const std::string& layerName, const std::s
 void DebugDrawerComponent::drawPointCloud(const std::string &layerName, const std::string &name, const DebugDrawerPointCloud &pointCloud)
 {
     ScopedRecursiveLockPtr l = getScopedLock();
-    ARMARX_DEBUG << "drawPointCloud";
 
     auto& layer=requestLayer(layerName);
 
@@ -275,11 +282,11 @@ void DebugDrawerComponent::drawPointCloud(const std::string &layerName, const st
 
 void DebugDrawerComponent::removeLine(const std::string& layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if (layer.addedLineVisualizations.find(name) == layer.addedLineVisualizations.end())
     {
@@ -291,11 +298,11 @@ void DebugDrawerComponent::removeLine(const std::string& layerName, const std::s
 
 void DebugDrawerComponent::removeBox(const std::string& layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if(layer.addedBoxVisualizations.find(name) == layer.addedBoxVisualizations.end())
     {
@@ -308,11 +315,11 @@ void DebugDrawerComponent::removeBox(const std::string& layerName, const std::st
 
 void DebugDrawerComponent::removeText(const std::string &layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if(layer.addedTextVisualizations.find(name) == layer.addedTextVisualizations.end())
     {
@@ -325,11 +332,11 @@ void DebugDrawerComponent::removeText(const std::string &layerName, const std::s
 
 void DebugDrawerComponent::removeSphere(const std::string &layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if(layer.addedSphereVisualizations.find(name) == layer.addedSphereVisualizations.end())
     {
@@ -342,11 +349,11 @@ void DebugDrawerComponent::removeSphere(const std::string &layerName, const std:
 
 void DebugDrawerComponent::removePointCloud(const std::string &layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if(layer.addedPointCloudVisualizations.find(name) == layer.addedPointCloudVisualizations.end())
     {
@@ -359,11 +366,11 @@ void DebugDrawerComponent::removePointCloud(const std::string &layerName, const
 
 void DebugDrawerComponent::removeCoordSystem(const std::string& layerName, const std::string &name)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     if(layer.addedCoordVisualizations.find(name) == layer.addedCoordVisualizations.end())
     {
@@ -376,11 +383,11 @@ void DebugDrawerComponent::removeCoordSystem(const std::string& layerName, const
 
 void DebugDrawerComponent::setLayerVisibility(const std::string& layerName, bool visible)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         return;
     }
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     layer.visible=visible;
     if (visible)
@@ -561,6 +568,7 @@ void DebugDrawerComponent::removePointCloudDebugLayerVisu(const std::string &poi
 
 void DebugDrawerComponent::clearLayer(const std::string &layerName, const Ice::Current &)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         ARMARX_VERBOSE << "Layer " << layerName<<" can't be cleared, because it does not exist.";
@@ -568,7 +576,6 @@ void DebugDrawerComponent::clearLayer(const std::string &layerName, const Ice::C
     }
     ARMARX_VERBOSE << "Clearing layer " << layerName;
 
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     layer.addedCoordVisualizations.clear();
     layer.addedLineVisualizations.clear();
@@ -586,6 +593,7 @@ void DebugDrawerComponent::clearDebugLayer(const Ice::Current &)
 
 void DebugDrawerComponent::setMutex(boost::shared_ptr<boost::recursive_mutex> m)
 {
+    //ARMARX_IMPORTANT << "set mutex3d:" << m.get();
     mutex = m;
 }
 
@@ -593,7 +601,12 @@ ScopedRecursiveLockPtr DebugDrawerComponent::getScopedLock()
 {
     ScopedRecursiveLockPtr l;
     if (mutex)
+    {
+        //ARMARX_IMPORTANT << mutex.get();
         l.reset(new ScopedRecursiveLock(*mutex));
+    } else
+        ARMARX_IMPORTANT << deactivateSpam(5) << "NO 3D MUTEX!!!";
+
     return l;
 }
 
@@ -628,6 +641,7 @@ bool DebugDrawerComponent::hasLayer(const std::string& layerName, const ::Ice::C
 
 void DebugDrawerComponent::removeLayer(const std::string& layerName, const ::Ice::Current&)
 {
+    ScopedRecursiveLockPtr l = getScopedLock();
     if(!hasLayer(layerName))
     {
         ARMARX_VERBOSE << "Layer " << layerName<<" can't be removed, because it does not exist.";
@@ -635,7 +649,6 @@ void DebugDrawerComponent::removeLayer(const std::string& layerName, const ::Ice
     }
     ARMARX_VERBOSE << "Removing layer " << layerName;
 
-    ScopedRecursiveLockPtr l = getScopedLock();
     auto& layer=layers.at(layerName);
     layerMainNode->removeChild(layer.mainNode);
     clearLayer(layerName);
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
index 519b35244c0fbf6d51c6167c89e47cf21f0d4d92..c0e933caf05f84f5e4485398ff05379cec5e3eb4 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
@@ -35,8 +35,7 @@
 #include <Core/core/logging/Logging.h>
 #include <Core/core/services/tasks/RunningTask.h>
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/libraries/core/Pose.h>
 
 #include <VirtualRobot/VirtualRobotCommon.h>
 
@@ -186,6 +185,7 @@ public:
 
     void setMutex(boost::shared_ptr<boost::recursive_mutex> m);
 
+    ~DebugDrawerComponent();
 protected:
 
     void drawCoordSystem(const std::string& layerName, const std::string &name, Eigen::Matrix4f &globalPose, float scale);
diff --git a/source/RobotAPI/libraries/robotstate/CMakeLists.txt b/source/RobotAPI/components/robotstate/CMakeLists.txt
similarity index 94%
rename from source/RobotAPI/libraries/robotstate/CMakeLists.txt
rename to source/RobotAPI/components/robotstate/CMakeLists.txt
index 27b864120204b76639a2a1cd3a34359849d5d17b..1f6c68863792b14286f039b47c6dd498ab377061 100644
--- a/source/RobotAPI/libraries/robotstate/CMakeLists.txt
+++ b/source/RobotAPI/components/robotstate/CMakeLists.txt
@@ -13,7 +13,7 @@ set(LIB_NAME       RobotAPIRobotStateComponent)
 set(LIB_VERSION    0.1.0)
 set(LIB_SOVERSION  0)
 
-set(LIBS RobotAPIRemoteRobot ArmarXCore)
+set(LIBS ArmarXCore RobotAPICore)
 
 set(LIB_FILES
         RobotStateComponent.cpp
diff --git a/source/RobotAPI/libraries/robotstate/RobotStateComponent.cpp b/source/RobotAPI/components/robotstate/RobotStateComponent.cpp
similarity index 100%
rename from source/RobotAPI/libraries/robotstate/RobotStateComponent.cpp
rename to source/RobotAPI/components/robotstate/RobotStateComponent.cpp
diff --git a/source/RobotAPI/libraries/robotstate/RobotStateComponent.h b/source/RobotAPI/components/robotstate/RobotStateComponent.h
similarity index 89%
rename from source/RobotAPI/libraries/robotstate/RobotStateComponent.h
rename to source/RobotAPI/components/robotstate/RobotStateComponent.h
index 1093b1324644ccde71c266f89be7a146458f7632..c3daca92d7ce7bcf9dd934d5c9e8fae4caaf82dc 100644
--- a/source/RobotAPI/libraries/robotstate/RobotStateComponent.h
+++ b/source/RobotAPI/components/robotstate/RobotStateComponent.h
@@ -29,9 +29,9 @@
 #include <Core/core/Component.h>
 #include <Core/core/application/properties/Properties.h>
 #include <Core/core/system/ImportExportComponent.h>
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/RobotState.h>
 
-#include "remote/RobotStateObjectFactories.h"
+#include <RobotAPI/libraries/core/RobotAPIObjectFactories.h>
 
 namespace armarx
 {
@@ -79,11 +79,6 @@ namespace armarx
         void reportJointMotorTemperatures(const NameValueMap& jointMotorTemperatures,  bool aValueChanged, const Ice::Current& c = ::Ice::Current());
         void reportJointStatuses(const NameStatusMap& jointStatuses,  bool aValueChanged, const Ice::Current& c = ::Ice::Current());
 
-        // inherited from PlatformUnitInterface
-        //void reportPlatformPose(float currentPlatformPositionX, float currentPlatformPositionY, float currentPlatformRotation, const Ice::Current& c = ::Ice::Current());
-        //void reportNewTargetPose(float newPlatformPositionX, float newPlatformPositionY, float newPlatformRotation, const Ice::Current& c = ::Ice::Current());
-        //void reportPlatformVelocity(float currentPlatformVelocityX, float currentPlatformVelocityY, float currentPlatformVelocityRotation, const Ice::Current& c = ::Ice::Current());
-
         /**
          * \return SharedRobotInterface proxy to the internal synchronized robot (gets created upon first call)
          */
diff --git a/source/RobotAPI/libraries/robotstate/SharedRobotServants.cpp b/source/RobotAPI/components/robotstate/SharedRobotServants.cpp
similarity index 100%
rename from source/RobotAPI/libraries/robotstate/SharedRobotServants.cpp
rename to source/RobotAPI/components/robotstate/SharedRobotServants.cpp
diff --git a/source/RobotAPI/libraries/robotstate/SharedRobotServants.h b/source/RobotAPI/components/robotstate/SharedRobotServants.h
similarity index 97%
rename from source/RobotAPI/libraries/robotstate/SharedRobotServants.h
rename to source/RobotAPI/components/robotstate/SharedRobotServants.h
index 4bdc97931e16808b2d3e1589c2611e373872e0f4..458fa3262fea740b25efedc2baf362fd96934de1 100644
--- a/source/RobotAPI/libraries/robotstate/SharedRobotServants.h
+++ b/source/RobotAPI/components/robotstate/SharedRobotServants.h
@@ -3,10 +3,10 @@
 
 #include <Core/core/Component.h>
 #include <Core/core/system/ImportExportComponent.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/RobotState.h>
 
 #include <boost/thread.hpp>
 
diff --git a/source/RobotAPI/components/units/CMakeLists.txt b/source/RobotAPI/components/units/CMakeLists.txt
index 91e27f9476afba11d3ab1056977419ec877a068f..12480b30b1389cf60b679372bbfc2278af95099a 100644
--- a/source/RobotAPI/components/units/CMakeLists.txt
+++ b/source/RobotAPI/components/units/CMakeLists.txt
@@ -19,7 +19,6 @@ set(LIB_SOVERSION  0)
 
 set(LIBS
     RobotAPICore
-    RobotAPIRemoteRobot
     ArmarXCoreObservers
     ArmarXCoreEigen3Variants
     ${Simox_LIBRARIES})
diff --git a/source/RobotAPI/components/units/ForceTorqueObserver.cpp b/source/RobotAPI/components/units/ForceTorqueObserver.cpp
index c44ab1a5156525ddada5e04bb5ee612dbbd6e5ad..e592aebf4c1af4cc45ab9bf42b4206d86150d6a7 100644
--- a/source/RobotAPI/components/units/ForceTorqueObserver.cpp
+++ b/source/RobotAPI/components/units/ForceTorqueObserver.cpp
@@ -5,11 +5,11 @@
 #include <Core/observers/checks/ConditionCheckInRange.h>
 #include <Core/observers/checks/ConditionCheckLarger.h>
 #include <Core/observers/checks/ConditionCheckSmaller.h>
-#include <RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h>
-#include <RobotAPI/libraries/robotstate/remote/observerfilters/OffsetFilter.h>
+#include <RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h>
+#include <RobotAPI/libraries/core/observerfilters/OffsetFilter.h>
 #include <Core/observers/variant/DatafieldRef.h>
 
-#include <RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h>
+#include <RobotAPI/libraries/core/RobotAPIObjectFactories.h>
 
 #define RAWFORCE "_rawforcevectors"
 #define OFFSETFORCE "_forceswithoffsetvectors"
diff --git a/source/RobotAPI/components/units/ForceTorqueObserver.h b/source/RobotAPI/components/units/ForceTorqueObserver.h
index fb5a8eb2dfbe2051ee781f7cade887a5e631b638..441a2f0485d9c6a4d1079eb9c92d99dc05ba0c2c 100644
--- a/source/RobotAPI/components/units/ForceTorqueObserver.h
+++ b/source/RobotAPI/components/units/ForceTorqueObserver.h
@@ -2,7 +2,7 @@
 #define _ARMARX_ROBOTAPI_FORCETORQUEOBSERVER_H
 
 #include <RobotAPI/interface/units/ForceTorqueUnit.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 #include <Core/observers/Observer.h>
 
 namespace armarx
diff --git a/source/RobotAPI/components/units/ForceTorqueUnitSimulation.cpp b/source/RobotAPI/components/units/ForceTorqueUnitSimulation.cpp
index f7e67c2b8a335e35364a589b103cda552ee0c573..9683c837242804947e83a810c4ba0695d604c5a6 100644
--- a/source/RobotAPI/components/units/ForceTorqueUnitSimulation.cpp
+++ b/source/RobotAPI/components/units/ForceTorqueUnitSimulation.cpp
@@ -24,8 +24,6 @@
 
 #include "ForceTorqueUnitSimulation.h"
 
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-
 #include <boost/algorithm/string.hpp>
 
 using namespace armarx;
diff --git a/source/RobotAPI/components/units/ForceTorqueUnitSimulation.h b/source/RobotAPI/components/units/ForceTorqueUnitSimulation.h
index 5557b98a3b99833478e7cb2f89df4d7dbce681a8..2255ba867ba5fd644efe19ac871780d2a5d09d17 100644
--- a/source/RobotAPI/components/units/ForceTorqueUnitSimulation.h
+++ b/source/RobotAPI/components/units/ForceTorqueUnitSimulation.h
@@ -28,7 +28,7 @@
 
 #include <Core/core/services/tasks/PeriodicTask.h>
 #include <Core/core/system/ImportExportComponent.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 #include <IceUtil/Time.h>
 
diff --git a/source/RobotAPI/components/units/HapticObserver.cpp b/source/RobotAPI/components/units/HapticObserver.cpp
index 54f618fc58b9ebca394ecb3184815e73bd74f755..6517a665fb808abfa44636e3a4f96e5a24d050ed 100644
--- a/source/RobotAPI/components/units/HapticObserver.cpp
+++ b/source/RobotAPI/components/units/HapticObserver.cpp
@@ -5,9 +5,9 @@
 #include <Core/observers/checks/ConditionCheckInRange.h>
 #include <Core/observers/checks/ConditionCheckLarger.h>
 #include <Core/observers/checks/ConditionCheckSmaller.h>
-#include <RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h>
+#include <RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h>
 
-#include <RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h>
+#include <RobotAPI/libraries/core/RobotAPIObjectFactories.h>
 #include <Eigen/Dense>
 #include <Core/observers/variant/TimestampVariant.h>
 
diff --git a/source/RobotAPI/components/units/HeadIKUnit.cpp b/source/RobotAPI/components/units/HeadIKUnit.cpp
index b0cd8339fa6ab6db911d7c5e0424d78fcc850802..9ce7af2492d66c24983de3d7f66c01f64123865c 100644
--- a/source/RobotAPI/components/units/HeadIKUnit.cpp
+++ b/source/RobotAPI/components/units/HeadIKUnit.cpp
@@ -187,7 +187,7 @@ namespace armarx
 
             Eigen::Matrix3f m = Eigen::Matrix3f::Identity();
             FramedOrientationPtr targetOri = new FramedOrientation(m, targetPosition->frame, localRobot->getName());
-            VirtualRobot::LinkedCoordinate target = ArmarPose::createLinkedCoordinate(localRobot, targetPosition, targetOri);
+            VirtualRobot::LinkedCoordinate target = FramedPose::createLinkedCoordinate(localRobot, targetPosition, targetOri);
             Eigen::Matrix4f goalInRoot = target.getInFrame(localRobot->getRootNode());
             Eigen::Vector3f targetPos = goalInRoot.block<3,1>(0,3);
 
diff --git a/source/RobotAPI/components/units/HeadIKUnit.h b/source/RobotAPI/components/units/HeadIKUnit.h
index fe1d347adee65d0e97894ec4dcc71040afc25c1b..ed6a4d23ebd6dc2f1e81e542ec4cc27841a2da0c 100644
--- a/source/RobotAPI/components/units/HeadIKUnit.h
+++ b/source/RobotAPI/components/units/HeadIKUnit.h
@@ -27,8 +27,8 @@
 
 #include <Core/core/Component.h>
 #include <Core/core/services/tasks/PeriodicTask.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
 #include <RobotAPI/interface/units/HeadIKUnit.h>
 
diff --git a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
index 70c386f8931206a0b509994c19097b3845317de5..0499d45ff74207fcfec955dddaf7c22382b7525a 100644
--- a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
+++ b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
@@ -6,7 +6,7 @@
 #include <Core/observers/checks/ConditionCheckSmaller.h>
 #include <Core/observers/checks/ConditionCheckUpdated.h>
 
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/Pose.h>
 
 #include <Core/observers/variant/TimestampVariant.h>
 
diff --git a/source/RobotAPI/components/units/TCPControlUnit.cpp b/source/RobotAPI/components/units/TCPControlUnit.cpp
index 2b8a169e976a40b7f5ae2aa2d11cfcdaea32d641..bb0e59efef92c1d387ff6be071a0781bfa9c118d 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.cpp
+++ b/source/RobotAPI/components/units/TCPControlUnit.cpp
@@ -22,7 +22,7 @@
 */
 
 #include "TCPControlUnit.h"
-#include <RobotAPI/libraries/robotstate/remote/LinkedPose.h>
+#include <RobotAPI/libraries/core/LinkedPose.h>
 
 #include <boost/unordered_map.hpp>
 
diff --git a/source/RobotAPI/components/units/TCPControlUnit.h b/source/RobotAPI/components/units/TCPControlUnit.h
index 94b1e1fb9a84a8abb01654427b5060d89719032e..7956652fdfc3efd38a2484a6100ce193a0d11d11 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.h
+++ b/source/RobotAPI/components/units/TCPControlUnit.h
@@ -25,12 +25,12 @@
 #define _ARMARX_TCPCONTROLUNIT_H
 
 #include <RobotAPI/interface/units/TCPControlUnit.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 #include <Core/core/services/tasks/PeriodicTask.h>
 #include <Core/core/Component.h>
 
 #include <VirtualRobot/IK/DifferentialIK.h>
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 #include <Core/interface/observers/ObserverInterface.h>
 
 namespace armarx {
diff --git a/source/RobotAPI/components/units/TCPControlUnitObserver.cpp b/source/RobotAPI/components/units/TCPControlUnitObserver.cpp
index 4d4a71d5d49f8b02eadad0b33e609f295ab9f53f..a502e3436af9da9e29d636c804ee2ce2c7788dc7 100644
--- a/source/RobotAPI/components/units/TCPControlUnitObserver.cpp
+++ b/source/RobotAPI/components/units/TCPControlUnitObserver.cpp
@@ -23,14 +23,14 @@
 
 #include "TCPControlUnitObserver.h"
 
-//#include <Core/robotstate/remote/checks/ConditionCheckEqualsPoseWithTolerance.h>
+//#include <Core/core/checks/ConditionCheckEqualsPoseWithTolerance.h>
 #include <Core/observers/checks/ConditionCheckUpdated.h>
 #include <Core/observers/checks/ConditionCheckEquals.h>
 #include <Core/observers/checks/ConditionCheckInRange.h>
 #include <Core/observers/checks/ConditionCheckLarger.h>
 #include <Core/observers/checks/ConditionCheckSmaller.h>
-#include <RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPoseWithTolerance.h>
-#include <RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h>
+#include <RobotAPI/libraries/core/checks/ConditionCheckEqualsPoseWithTolerance.h>
+#include <RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h>
 #include <Core/core/exceptions/local/ExpressionException.h>
 
 #define TCP_POSE_CHANNEL "TCPPose"
diff --git a/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index 1a44c2fd2953d56bcd25ff3b3fe3eaaf3153c0b5..07c6c1c740911939b7596089cfcb5f91c6da646e 100644
--- a/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -61,20 +61,6 @@ KinematicUnitWidgetController::KinematicUnitWidgetController() :
 
 void KinematicUnitWidgetController::onInitComponent()
 {
-//    if(kinematicUnitFile.empty())
-//    {
-//        KinematicUnitConfigDialog dialog;
-//        if(dialog.exec())
-//        {
-//            kinematicUnitFile = dialog.ui->editRobotFilepath->text().toStdString();
-//            robotNodeSetName = dialog.ui->ediRobotNodeSetName->text().toStdString();
-//            kinematicUnitName = dialog.ui->editKinematicUnitName->text().toStdString();
-//        }
-//        else {
-//            return;
-//        }
-//    }
-
     dirty_squaresum_old.resize(5,0);
     ARMARX_INFO << flush;
     verbose = true;
@@ -115,8 +101,10 @@ void KinematicUnitWidgetController::onInitComponent()
     ARMARX_INFO << "Creating component " << debugDrawerComponentName;
     debugDrawer = Component::create<DebugDrawerComponent>(properties,debugDrawerComponentName);
     if (mutex3D)
+    {
+        //ARMARX_IMPORTANT << "mutex3d:" << mutex3D.get();
         debugDrawer->setMutex(mutex3D);
-    else
+    } else
         ARMARX_ERROR << " No 3d mutex available...";
     ArmarXManagerPtr m = getArmarXManager();
     m->addObject(debugDrawer);
@@ -186,14 +174,14 @@ void KinematicUnitWidgetController::onExitComponent()
         }
     }
 
-
-    if (debugDrawer)
+/*
+    if (debugDrawer && debugDrawer->getObjectScheduler())
     {
         ARMARX_INFO << "Removing DebugDrawer component...";
         debugDrawer->getObjectScheduler()->terminate();
         ARMARX_INFO << "Removing DebugDrawer component...done";
     }
-
+*/
 }
 
 QPointer<QDialog> KinematicUnitWidgetController::getConfigDialog(QWidget* parent)
@@ -344,52 +332,59 @@ void KinematicUnitWidgetController::resetSliderInVelocityControl()
 void KinematicUnitWidgetController::setControlModePosition()
 {
     NameControlModeMap jointModes;
-    jointModes[currentNode->getName()] = ePositionControl;
-
-    ARMARX_INFO << "setting position control for current Node Name: " << currentNode->getName() << flush;
-
-    if (kinematicUnitInterfacePrx)
-        kinematicUnitInterfacePrx->switchControlMode(jointModes);
+    if (currentNode)
+    {
+        jointModes[currentNode->getName()] = ePositionControl;
 
-    float lo = currentNode->getJointLimitLo() * 180.0 / M_PI;
-    float hi = currentNode->getJointLimitHi() * 180.0 / M_PI;
-    if (hi-lo <= 0.0f)
-        return;
-    float pos = currentNode->getJointValue() * 180.0 / M_PI;
-//    ARMARX_INFO << "current joint position of " << currentNode->getName() << ": " << pos;
-    ui.horizontalSliderKinematicUnitPos->setMaximum(hi);
-    ui.horizontalSliderKinematicUnitPos->setMinimum(lo);
-//        float ticks = (float)(ui.horizontalSliderKinematicUnitPos->maximum() - ui.horizontalSliderKinematicUnitPos->minimum()+1);
-//        float posT = (pos-lo) / (hi-lo) * ticks + (float)ui.horizontalSliderKinematicUnitPos->minimum();
-    ui.horizontalSliderKinematicUnitPos->setSliderPosition((int)(pos));
+        ARMARX_INFO << "setting position control for current Node Name: " << currentNode->getName() << flush;
 
+        if (kinematicUnitInterfacePrx)
+            kinematicUnitInterfacePrx->switchControlMode(jointModes);
+
+        float lo = currentNode->getJointLimitLo() * 180.0 / M_PI;
+        float hi = currentNode->getJointLimitHi() * 180.0 / M_PI;
+        if (hi-lo <= 0.0f)
+            return;
+        float pos = currentNode->getJointValue() * 180.0 / M_PI;
+    //    ARMARX_INFO << "current joint position of " << currentNode->getName() << ": " << pos;
+        ui.horizontalSliderKinematicUnitPos->setMaximum(hi);
+        ui.horizontalSliderKinematicUnitPos->setMinimum(lo);
+    //        float ticks = (float)(ui.horizontalSliderKinematicUnitPos->maximum() - ui.horizontalSliderKinematicUnitPos->minimum()+1);
+    //        float posT = (pos-lo) / (hi-lo) * ticks + (float)ui.horizontalSliderKinematicUnitPos->minimum();
+        ui.horizontalSliderKinematicUnitPos->setSliderPosition((int)(pos));
+    }
     selectedControlMode = ePositionControl;
 }
 
 void KinematicUnitWidgetController::setControlModeVelocity()
 {
     NameControlModeMap jointModes;
-    jointModes[currentNode->getName()] = eVelocityControl;
+    if (currentNode)
+    {
+        jointModes[currentNode->getName()] = eVelocityControl;
 
-    ARMARX_INFO << "setting velocity control for current Node Name: " << currentNode->getName() << flush;
+        ARMARX_INFO << "setting velocity control for current Node Name: " << currentNode->getName() << flush;
 
-    if (kinematicUnitInterfacePrx)
-        kinematicUnitInterfacePrx->switchControlMode(jointModes);
+        if (kinematicUnitInterfacePrx)
+            kinematicUnitInterfacePrx->switchControlMode(jointModes);
 
-    selectedControlMode = eVelocityControl;
+        selectedControlMode = eVelocityControl;
+    }
     resetSliderInVelocityControl();
 }
 
 void KinematicUnitWidgetController::setControlModeTorque()
 {
     NameControlModeMap jointModes;
-    jointModes[currentNode->getName()] = eTorqueControl;
-
-    ARMARX_INFO << "setting torque control for current Node Name: " << currentNode->getName() << flush;
+    if (currentNode)
+    {
+        jointModes[currentNode->getName()] = eTorqueControl;
 
-    if (kinematicUnitInterfacePrx)
-        kinematicUnitInterfacePrx->switchControlMode(jointModes);
+        ARMARX_INFO << "setting torque control for current Node Name: " << currentNode->getName() << flush;
 
+        if (kinematicUnitInterfacePrx)
+            kinematicUnitInterfacePrx->switchControlMode(jointModes);
+    }
     selectedControlMode = eTorqueControl;
 }
 
@@ -1027,6 +1022,15 @@ void KinematicUnitWidgetController::updateModel()
     robot->setJointValues(usedNodes, jv);
 }
 
+void KinematicUnitWidgetController::setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D)
+{
+    //ARMARX_IMPORTANT << "KinematicUnitWidgetController controller " << getInstanceName() << ": set mutex " << mutex3D.get();
+
+    this->mutex3D = mutex3D;
+    if (debugDrawer)
+        debugDrawer->setMutex(mutex3D);
+}
+
 float KinematicUnitWidgetController::cutJitter(float value)
 {
     return (abs(value)<static_cast<float>(ui.jitterThresholdSpinBox->value()))?0:value;
diff --git a/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h b/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
index a58242c7284ea75d6f16de8939ba304552f0cec0..b16e3cf69bdae63be053d1f991a12ccb66a9328f 100644
--- a/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
+++ b/source/RobotAPI/gui_plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h
@@ -120,6 +120,9 @@ namespace armarx
 
         void updateGuiElements();
 
+        // overwrite setMutex, so that we can inform the debugdrawer
+        virtual void setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D);
+
     signals:
 
         void jointAnglesReported();
diff --git a/source/RobotAPI/gui_plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp b/source/RobotAPI/gui_plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
index c64f2bd975bcc8a851b33e4e61c2c40d47dec676..0f2b26950b68e6c83f81b5d075a1c47d8127e16a 100644
--- a/source/RobotAPI/gui_plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
+++ b/source/RobotAPI/gui_plugins/SensorActorWidgetsPlugin/ArmarXTCPMover/TCPMover.cpp
@@ -27,7 +27,7 @@
 //VirtualRobot
 #include <VirtualRobot/XML/RobotIO.h>
 #include <VirtualRobot/LinkedCoordinate.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 
 // C++ includes
diff --git a/source/RobotAPI/interface/CMakeLists.txt b/source/RobotAPI/interface/CMakeLists.txt
index dcdd5a0601cb80c38ce0d179d102e3f303b14d0b..8f31e76aac9f6670cb6e3e641374c6d96beb862d 100644
--- a/source/RobotAPI/interface/CMakeLists.txt
+++ b/source/RobotAPI/interface/CMakeLists.txt
@@ -11,10 +11,11 @@ set(SLICE_FILES
     observers/PlatformUnitObserverInterface.ice
     observers/ObserverFilters.ice
 
-    robotstate/LinkedPoseBase.ice
-    robotstate/PoseBase.ice
-    robotstate/RobotState.ice
-    robotstate/RobotStateObserverInterface.ice
+    core/PoseBase.ice
+    core/LinkedPoseBase.ice
+    core/FramedPoseBase.ice
+    core/RobotState.ice
+    core/RobotStateObserverInterface.ice
 
     selflocalisation/SelfLocalisationProcess.ice
 
diff --git a/source/RobotAPI/interface/robotstate/PoseBase.ice b/source/RobotAPI/interface/core/FramedPoseBase.ice
similarity index 73%
rename from source/RobotAPI/interface/robotstate/PoseBase.ice
rename to source/RobotAPI/interface/core/FramedPoseBase.ice
index e6859a749067c43f1678930f9b123465457ad6f2..b2b75d179a60344e6e565067f1eed85be1c458e2 100644
--- a/source/RobotAPI/interface/robotstate/PoseBase.ice
+++ b/source/RobotAPI/interface/core/FramedPoseBase.ice
@@ -15,43 +15,22 @@
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package    ArmarX::Core
-* @author     Stefan Ulbrich (ulbrich at kit dot edu)
+* @author     Stefan Ulbrich (ulbrich at kit dot edu), Nikolaus Vahrenkamp
 * @copyright  2011 Humanoids Group, HIS, KIT
 * @license    http://www.gnu.org/licenses/gpl-2.0.txt
 *             GNU General Public License
 */
 
-#ifndef _ARMARX_CORE_ROBOTSTATE_ARMAR_POSE_SLICE_
-#define _ARMARX_CORE_ROBOTSTATE_ARMAR_POSE_SLICE_
+#ifndef _ARMARX_ROBOTAPI_ROBOTSTATE_FRAMED_POSE_SLICE_
+#define _ARMARX_ROBOTAPI_ROBOTSTATE_FRAMED_POSE_SLICE_
 
 #include <Core/interface/observers/VariantBase.ice>
 #include <Core/interface/observers/Filters.ice>
+#include <RobotAPI/interface/core/PoseBase.ice>
 
 module armarx
 {
 
-    class Vector3Base extends VariantDataClass
-    {
-        float x = zeroInt;
-        float y = zeroInt;
-        float z = zeroInt;
-    };
-
-    class QuaternionBase extends VariantDataClass
-    {
-        float qw = zeroInt;
-        float qx = zeroInt;
-        float qy = zeroInt;
-        float qz = zeroInt;
-    };
-
-    ["cpp:virtual"]
-    class PoseBase extends VariantDataClass
-    {
-        Vector3Base position;
-        QuaternionBase orientation;
-    };
-
     ["cpp:virtual"]
     class FramedVector3Base extends Vector3Base
     {
diff --git a/source/RobotAPI/interface/robotstate/LinkedPoseBase.ice b/source/RobotAPI/interface/core/LinkedPoseBase.ice
similarity index 85%
rename from source/RobotAPI/interface/robotstate/LinkedPoseBase.ice
rename to source/RobotAPI/interface/core/LinkedPoseBase.ice
index ba03c90ee6e9a6a37a4a2cab115b2d7af18b322a..156fcb33d03d3b89cda78f5f06afd63848dfd67c 100644
--- a/source/RobotAPI/interface/robotstate/LinkedPoseBase.ice
+++ b/source/RobotAPI/interface/core/LinkedPoseBase.ice
@@ -21,11 +21,11 @@
 *             GNU General Public License
 */
 
-#ifndef _ARMARX_CORE_ROBOTSTATE_LINKEDPOSE_SLICE_
-#define _ARMARX_CORE_ROBOTSTATE_LINKEDPOSE_SLICE_
+#ifndef _ARMARX_ROBOTAPI_ROBOTSTATE_LINKEDPOSE_SLICE_
+#define _ARMARX_ROBOTAPI_ROBOTSTATE_LINKEDPOSE_SLICE_
 
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
+#include <RobotAPI/interface/core/FramedPoseBase.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
 
 module armarx
 {
diff --git a/source/RobotAPI/interface/core/PoseBase.ice b/source/RobotAPI/interface/core/PoseBase.ice
new file mode 100644
index 0000000000000000000000000000000000000000..6c35d7ecf208cd3ea23eb704b69321841a85e5e1
--- /dev/null
+++ b/source/RobotAPI/interface/core/PoseBase.ice
@@ -0,0 +1,57 @@
+/*
+* 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 as
+* published by the Free Software Foundation; either version 2 of
+* the License, or (at your option) any later version.
+*
+* 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 Lesser 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/>.
+*
+* @package    ArmarX::RobotAPI
+* @author     Stefan Ulbrich, Nikolaus Vahrenkamp
+* @copyright  2011 Humanoids Group, HIS, KIT
+* @license    http://www.gnu.org/licenses/gpl-2.0.txt
+*             GNU General Public License
+*/
+
+#ifndef _ARMARX_ROBOTAPI_POSE_SLICE_
+#define _ARMARX_ROBOTAPI_POSE_SLICE_
+
+#include <Core/interface/observers/VariantBase.ice>
+#include <Core/interface/observers/Filters.ice>
+
+module armarx
+{
+
+    class Vector3Base extends VariantDataClass
+    {
+        float x = zeroInt;
+        float y = zeroInt;
+        float z = zeroInt;
+    };
+
+    class QuaternionBase extends VariantDataClass
+    {
+        float qw = zeroInt;
+        float qx = zeroInt;
+        float qy = zeroInt;
+        float qz = zeroInt;
+    };
+
+    ["cpp:virtual"]
+    class PoseBase extends VariantDataClass
+    {
+        Vector3Base position;
+        QuaternionBase orientation;
+    };
+
+};
+
+#endif
diff --git a/source/RobotAPI/interface/robotstate/RobotState.ice b/source/RobotAPI/interface/core/RobotState.ice
similarity index 98%
rename from source/RobotAPI/interface/robotstate/RobotState.ice
rename to source/RobotAPI/interface/core/RobotState.ice
index 9f4f43d1667b5afae0767a3f8d009365c5311571..5c27ddf4bf58064948054717cf68342523a2a82b 100644
--- a/source/RobotAPI/interface/robotstate/RobotState.ice
+++ b/source/RobotAPI/interface/core/RobotState.ice
@@ -3,7 +3,7 @@
 
 #include <RobotAPI/interface/units/KinematicUnitInterface.ice>
 #include <RobotAPI/interface/units/PlatformUnitInterface.ice>
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
+#include <RobotAPI/interface/core/PoseBase.ice>
 
 module armarx
 {
diff --git a/source/RobotAPI/interface/robotstate/RobotStateObserverInterface.ice b/source/RobotAPI/interface/core/RobotStateObserverInterface.ice
similarity index 92%
rename from source/RobotAPI/interface/robotstate/RobotStateObserverInterface.ice
rename to source/RobotAPI/interface/core/RobotStateObserverInterface.ice
index b9b442a00293446d6c3c085ea3e426a0c73d9566..4c0db7742cfa2a10841a61b01e9fc5c23fb694fa 100644
--- a/source/RobotAPI/interface/robotstate/RobotStateObserverInterface.ice
+++ b/source/RobotAPI/interface/core/RobotStateObserverInterface.ice
@@ -22,8 +22,8 @@
 *             GNU General Public License
 */
 
-#ifndef _ARMARX_CORE_ROBOTSTATE_OBSERVER_SLICE_
-#define _ARMARX_CORE_ROBOTSTATE_OBSERVER_SLICE_
+#ifndef _ARMARX_ROBOTAPI_ROBOTSTATE_OBSERVER_SLICE_
+#define _ARMARX_ROBOTAPI_ROBOTSTATE_OBSERVER_SLICE_
 
 #include <RobotAPI/interface/units/KinematicUnitInterface.ice>
 
diff --git a/source/RobotAPI/interface/units/ForceTorqueUnit.ice b/source/RobotAPI/interface/units/ForceTorqueUnit.ice
index 5addd197c5ac5ed20e2397f549eb7fc474c9129d..7c11e9e46c737f0291a72c72915cfa96952958cc 100644
--- a/source/RobotAPI/interface/units/ForceTorqueUnit.ice
+++ b/source/RobotAPI/interface/units/ForceTorqueUnit.ice
@@ -25,8 +25,8 @@
 #define _ARMARX_ROBOTAPI_UNITS_FORCETORQUE_SLICE_
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
+#include <RobotAPI/interface/core/FramedPoseBase.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/units/HapticUnit.ice b/source/RobotAPI/interface/units/HapticUnit.ice
index b8a85881029dee00b310a57a8c604035bd6518f2..b7dfe40d35ea7bfda302521cdbf3be7088fa73f5 100644
--- a/source/RobotAPI/interface/units/HapticUnit.ice
+++ b/source/RobotAPI/interface/units/HapticUnit.ice
@@ -25,7 +25,7 @@
 #define _ARMARX_ROBOTAPI_UNITS_HAPTIC_SLICE_
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/units/HeadIKUnit.ice b/source/RobotAPI/interface/units/HeadIKUnit.ice
index d424f9d1affa6f1aed84133c626a18df8166058c..d6d71830bae65ece6f050fdb3097cfec7c7f1948 100644
--- a/source/RobotAPI/interface/units/HeadIKUnit.ice
+++ b/source/RobotAPI/interface/units/HeadIKUnit.ice
@@ -25,8 +25,8 @@
 #define _ARMARX_ROBOTAPI_UNITS_HEADIK_SLICE_
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
+#include <RobotAPI/interface/core/FramedPoseBase.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/units/InertialMeasurementUnit.ice b/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
index 0231a8ff11dbd4e56066fe70962c27adec2a33cf..8ab4784cc562b1e478b192f2bf50ebbe052751f5 100644
--- a/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
+++ b/source/RobotAPI/interface/units/InertialMeasurementUnit.ice
@@ -26,7 +26,7 @@
 
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/units/InertialMeasurementUnitInterface.ice b/source/RobotAPI/interface/units/InertialMeasurementUnitInterface.ice
index 0231a8ff11dbd4e56066fe70962c27adec2a33cf..8ab4784cc562b1e478b192f2bf50ebbe052751f5 100644
--- a/source/RobotAPI/interface/units/InertialMeasurementUnitInterface.ice
+++ b/source/RobotAPI/interface/units/InertialMeasurementUnitInterface.ice
@@ -26,7 +26,7 @@
 
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/units/TCPControlUnit.ice b/source/RobotAPI/interface/units/TCPControlUnit.ice
index 24599cd05718d380163602ae91ca729360813d14..e470c8e2bcfe6a8b046e3bef1a268fcfc6e635a2 100644
--- a/source/RobotAPI/interface/units/TCPControlUnit.ice
+++ b/source/RobotAPI/interface/units/TCPControlUnit.ice
@@ -25,8 +25,8 @@
 #define _ARMARX_ROBOTAPI_UNITS_FORCETORQUE_SLICE_
 
 #include <RobotAPI/interface/units/UnitInterface.ice>
-#include <RobotAPI/interface/robotstate/RobotState.ice>
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
+#include <RobotAPI/interface/core/RobotState.ice>
+#include <RobotAPI/interface/core/FramedPoseBase.ice>
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
diff --git a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
index e0d94d096cad18f6c637495c6a45bb075c674791..a278fd88a48297b7f525f367e8bb536b0f0ecebe 100644
--- a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
+++ b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
@@ -26,7 +26,7 @@
 
 #include <Core/interface/core/UserException.ice>
 #include <Core/interface/core/BasicTypes.ice>
-#include <RobotAPI/interface/robotstate/PoseBase.ice>
+#include <RobotAPI/interface/core/PoseBase.ice>
 
 module armarx
 {
diff --git a/source/RobotAPI/libraries/CMakeLists.txt b/source/RobotAPI/libraries/CMakeLists.txt
index 6143587a1ca47b3ab9e3d1234ab287fc8951fefe..3be572965d724b6b91e0af11d7266aa5b78afbfb 100644
--- a/source/RobotAPI/libraries/CMakeLists.txt
+++ b/source/RobotAPI/libraries/CMakeLists.txt
@@ -1,4 +1,2 @@
 add_subdirectory(drivers)
-add_subdirectory(robotstate)
-add_subdirectory(robotstate/remote)
 add_subdirectory(core)
diff --git a/source/RobotAPI/libraries/core/CMakeLists.txt b/source/RobotAPI/libraries/core/CMakeLists.txt
index d59abb50e04af16698ccc2f04d8fc694f08bef7f..2509f752c2b4ffd5f891dac3849b6f236c25e59d 100644
--- a/source/RobotAPI/libraries/core/CMakeLists.txt
+++ b/source/RobotAPI/libraries/core/CMakeLists.txt
@@ -17,13 +17,35 @@ set(LIB_NAME       RobotAPICore)
 set(LIB_VERSION    0.1.0)
 set(LIB_SOVERSION  0)
 
-set(LIBS RobotAPIInterfaces RobotAPIRobotStateComponent ArmarXCoreObservers ArmarXCoreStatechart)
+set(LIBS RobotAPIInterfaces ArmarXCoreObservers ArmarXCoreStatechart ${Simox_LIBRARIES})
+
 
 set(LIB_FILES
+    Pose.cpp
+    FramedPose.cpp
+    LinkedPose.cpp
     RobotStatechartContext.cpp
+    checks/ConditionCheckMagnitudeChecks.cpp
+    RobotAPIObjectFactories.cpp
+    remoterobot/RobotStateObserver.cpp
+    remoterobot/RemoteRobot.cpp
+    remoterobot/RemoteRobotNode.cpp
 )
+
 set(LIB_HEADERS
+    Pose.cpp
+    FramedPose.h
+    LinkedPose.h
     RobotStatechartContext.h
+    observerfilters/PoseMedianFilter.h
+    observerfilters/OffsetFilter.h
+    checks/ConditionCheckEqualsPose.h
+    checks/ConditionCheckEqualsPoseWithTolerance.h
+    checks/ConditionCheckMagnitudeChecks.h
+    RobotAPIObjectFactories.h
+    remoterobot/RobotStateObserver.h
+    remoterobot/RemoteRobot.h
 )
 
+
 armarx_add_library("${LIB_NAME}" "${LIB_VERSION}" "${LIB_SOVERSION}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}")
diff --git a/source/RobotAPI/libraries/robotstate/remote/ArmarPose.cpp b/source/RobotAPI/libraries/core/FramedPose.cpp
similarity index 58%
rename from source/RobotAPI/libraries/robotstate/remote/ArmarPose.cpp
rename to source/RobotAPI/libraries/core/FramedPose.cpp
index f911042f7f73f8cbdd19c5c57ddfbfd038326bbf..09118baa4c2f7a332a410aa41169bbc13a791249 100644
--- a/source/RobotAPI/libraries/robotstate/remote/ArmarPose.cpp
+++ b/source/RobotAPI/libraries/core/FramedPose.cpp
@@ -1,5 +1,5 @@
-#include "ArmarPose.h"
-#include "RemoteRobot.h"
+#include <RobotAPI/libraries/core/FramedPose.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
 // boost includes
 #include <boost/property_tree/ptree.hpp>
@@ -18,337 +18,6 @@ using namespace std;
 namespace armarx
 {
 
-    Vector3::Vector3()
-    {
-        x = 0;
-        y = 0;
-        z = 0;
-    }
-
-    Vector3::Vector3(const Vector3f & v)
-    {
-        x = v(0);
-        y = v(1);
-        z = v(2);
-    }
-
-    Vector3::Vector3(const Matrix4f & m)
-    {
-        x = m(0,3);
-        y = m(1,3);
-        z = m(2,3);
-    }
-
-    Vector3::Vector3(::Ice::Float x, ::Ice::Float y, ::Ice::Float z)
-    {
-        this->x = x;
-        this->y = y;
-        this->z = z;
-    }
-
-    Vector3f Vector3::toEigen() const
-    {
-        Vector3f v;
-        v << this->x,this->y,this->z;
-        return v;
-    }
-
-    void Vector3::operator=(const Eigen::Vector3f& vec)
-    {
-        x = vec[0];
-        y = vec[1];
-        z = vec[2];
-    }
-
-    string Vector3::output(const Ice::Current &c) const
-    {
-        std::stringstream s;
-        s << toEigen();
-        return s.str();
-    }
-
-    int Vector3::readFromXML(const string &xmlData, const Ice::Current &c)
-    {
-        boost::property_tree::ptree pt = Variant::GetPropertyTree(xmlData);
-
-        x = (pt.get<float>("x"));
-        y = (pt.get<float>("y"));
-        z = (pt.get<float>("z"));
-        return 1;
-    }
-
-    string Vector3::writeAsXML(const Ice::Current &)
-    {
-        using namespace boost::property_tree;
-        ptree pt;
-        pt.add("x", x);
-        pt.add("y", y);
-        pt.add("z", z);
-
-        std::stringstream stream;
-        xml_parser::write_xml(stream, pt);
-        return stream.str();
-    }
-
-    void Vector3::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current&) const
-    {
-        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
-
-        obj->setFloat("x", x);
-        obj->setFloat("y", y);
-        obj->setFloat("z", z);
-    }
-
-    void Vector3::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
-    {
-        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
-
-        x = obj->getFloat("x");
-        y = obj->getFloat("y");
-        z = obj->getFloat("z");
-    }
-
-
-    Quaternion::Quaternion()
-    {
-    }
-
-    Quaternion::Quaternion(const Matrix4f &m4)
-    {
-        Matrix3f m3=m4.block<3,3>(0,0);
-        this->init(m3);
-    }
-
-    Quaternion::Quaternion(const Matrix3f &m3)
-    {
-        this->init(m3);
-    }
-
-    Quaternion::Quaternion(const Eigen::Quaternionf &q)
-    {
-        this->init(q);
-    }
-
-    Quaternion::Quaternion(::Ice::Float qw, ::Ice::Float qx, ::Ice::Float qy, ::Ice::Float qz)
-    {
-        this->qw = qw;
-        this->qx = qx;
-        this->qy = qy;
-        this->qz = qz;
-    }
-
-    Matrix3f Quaternion::toEigen() const
-    {
-        Matrix3f rot;
-        rot = Quaternionf(
-                    this->qw,
-                    this->qx,
-                    this->qy,
-                    this->qz);
-        return rot;
-    }
-
-    void Quaternion::init(const Matrix3f &m3)
-    {
-        Quaternionf q;
-        q = m3;
-        init(q);
-    }
-
-    void Quaternion::init(const Eigen::Quaternionf &q)
-    {
-        this->qw=q.w();
-        this->qx=q.x();
-        this->qy=q.y();
-        this->qz=q.z();
-    }
-
-    Matrix3f Quaternion::slerp(float alpha, const Eigen::Matrix3f &m)
-    {
-        return Quaternion::slerp(alpha,this->toEigen(),m);
-    }
-
-    Matrix3f Quaternion::slerp(float alpha, const Eigen::Matrix3f &m1, const Eigen::Matrix3f &m2)
-    {
-        Matrix3f result;
-        Quaternionf q1,q2;
-        q1 = m1;
-        q2=m2;
-        result= q1.slerp(alpha,q2);
-        return result;
-    }
-
-    string Quaternion::output(const Ice::Current &c) const
-    {
-        std::stringstream s;
-        s << toEigen();
-        return s.str();
-    }
-
-    int Quaternion::readFromXML(const string &xmlData, const Ice::Current &c)
-    {
-        boost::property_tree::ptree pt = Variant::GetPropertyTree(xmlData);
-
-        using namespace Eigen;
-
-        Quaternionf q;
-        if(pt.get_optional<float>("angle"))
-        {// AxisAngle-Notation
-            float angle = pt.get<float>("angle");
-
-            Vector3f axis;
-            axis << pt.get<float>("x")  , pt.get<float>("y"), pt.get<float>("z");
-
-            AngleAxisf aa(angle, axis);
-            q = aa;
-            qw = q.w();
-            qx = q.x();
-            qy = q.y();
-            qz = q.z();
-        }
-        else
-        {
-            qx = (pt.get<float>("qx"));
-            qy = (pt.get<float>("qy"));
-            qz = (pt.get<float>("qz"));
-            qw = (pt.get<float>("qw"));
-        }
-
-        return 1;
-    }
-
-    string Quaternion::writeAsXML(const Ice::Current &)
-    {
-        using namespace boost::property_tree;
-        ptree pt;
-        pt.add("qx", qx);
-        pt.add("qy", qy);
-        pt.add("qz", qz);
-        pt.add("qw", qw);
-
-        std::stringstream stream;
-        xml_parser::write_xml(stream, pt);
-        return stream.str();
-    }
-
-    void Quaternion::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current&) const
-    {
-        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
-
-        obj->setFloat("qx", qx);
-        obj->setFloat("qy", qy);
-        obj->setFloat("qz", qz);
-        obj->setFloat("qw", qw);
-    }
-
-    void Quaternion::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
-    {
-        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
-
-        qx = obj->getFloat("qx");
-        qy = obj->getFloat("qy");
-        qz = obj->getFloat("qz");
-        qw = obj->getFloat("qw");
-    }
-
-    Pose::Pose(const Eigen::Matrix3f &m, const Eigen::Vector3f &v)
-    {
-        this->orientation = new Quaternion(m);
-        this->position = new Vector3(v);
-        init();
-    }
-
-    Pose::Pose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori)
-    {
-        this->orientation = new Quaternion(*QuaternionPtr::dynamicCast(ori));
-        this->position = new Vector3(*Vector3Ptr::dynamicCast(pos));
-        init();
-    }
-
-    Pose::Pose()
-    {
-        this->orientation = new Quaternion();
-        this->position = new Vector3();
-        init();
-    }
-
-    Pose::Pose(const Matrix4f &m)
-    {
-        this->orientation = new Quaternion(m);
-        this->position = new Vector3(m);
-        init();
-    }
-
-    void Pose::operator=(const Matrix4f &matrix)
-    {
-        this->orientation = new Quaternion(matrix);
-        this->position = new Vector3(matrix);
-        init();
-    }
-
-    Matrix4f Pose::toEigen() const
-    {
-        Matrix4f m = Matrix4f::Identity();
-        ARMARX_CHECK_EXPRESSION(c_orientation);
-        ARMARX_CHECK_EXPRESSION(c_position);
-        m.block<3,3>(0,0) = c_orientation->toEigen();
-        m.block<3,1>(0,3) = c_position->toEigen();
-        return m;
-    }
-
-    string Pose::output(const Ice::Current &c) const
-    {
-        std::stringstream s;
-        s << toEigen();
-        return s.str();
-    }
-
-    int Pose::readFromXML(const string &xmlData, const Ice::Current &c)
-    {
-        position->readFromXML(xmlData);
-        orientation->readFromXML(xmlData);
-
-        return 1;
-    }
-
-    string Pose::writeAsXML(const Ice::Current &)
-    {
-        using namespace boost::property_tree;
-        std::stringstream stream;
-        stream <<
-                  position->writeAsXML() <<
-                  orientation->writeAsXML();
-        return stream.str();
-    }
-
-    void Pose::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c) const
-    {
-        position->serialize(serializer, c);
-        orientation->serialize(serializer, c);
-    }
-
-    void Pose::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
-    {
-        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
-
-        position->deserialize(obj);
-        orientation->deserialize(obj);
-    }
-
-    void Pose::init()
-    {
-        this->c_position = Vector3Ptr::dynamicCast(this->position);
-        this->c_orientation = QuaternionPtr::dynamicCast(this->orientation);
-    }
-
-
-
-
-    void Pose::ice_postUnmarshal()
-    {
-        init();
-    }
-
 
     FramedVector3::FramedVector3()
     {
@@ -520,7 +189,7 @@ namespace armarx
             return;
         FramedPositionPtr pos = new FramedPosition(Vector3Ptr::dynamicCast(position)->toEigen(), frame, agent);
         auto ori = new FramedOrientation(QuaternionPtr::dynamicCast(orientation)->toEigen(), frame, agent);
-        auto coord = ArmarPose::createLinkedCoordinate(referenceRobot, pos, ori);
+        auto coord = FramedPose::createLinkedCoordinate(referenceRobot, pos, ori);
         coord.changeFrame(newFrame);
         orientation = new Quaternion(coord.getPose());
         position = new Vector3(coord.getPosition());
@@ -613,7 +282,7 @@ namespace armarx
         if(newFrame == frame)
             return;
 
-        auto coord = ArmarPose::createLinkedCoordinate(referenceRobot, FramedPositionPtr::dynamicCast(this->clone()), NULL);
+        auto coord = FramedPose::createLinkedCoordinate(referenceRobot, FramedPositionPtr::dynamicCast(this->clone()), NULL);
         coord.changeFrame(newFrame);
         Eigen::Vector3f pos = coord.getPosition();
         x = pos[0];
@@ -730,7 +399,7 @@ namespace armarx
 
 
 
-        auto coord = ArmarPose::createLinkedCoordinate(referenceRobot, NULL, FramedOrientationPtr::dynamicCast(this->clone()));
+        auto coord = FramedPose::createLinkedCoordinate(referenceRobot, NULL, FramedOrientationPtr::dynamicCast(this->clone()));
         coord.changeFrame(newFrame);
         QuaternionPtr quat = new Quaternion(coord.getPose());
         qw = quat->qw;
@@ -784,41 +453,40 @@ namespace armarx
             agent = obj->getString("agent");
     }
 
-    namespace ArmarPose
+
+    VirtualRobot::LinkedCoordinate FramedPose::createLinkedCoordinate(const VirtualRobot::RobotPtr &virtualRobot, const FramedPositionPtr& position, const FramedOrientationPtr& orientation)
     {
-        VirtualRobot::LinkedCoordinate createLinkedCoordinate(const VirtualRobot::RobotPtr &virtualRobot, const FramedPositionPtr& position, const FramedOrientationPtr& orientation)
+        VirtualRobot::LinkedCoordinate c(virtualRobot);
+        std::string frame;
+        if(position)
+        {
+            frame = position->getFrame();
+
+            if(!frame.empty() && frame != orientation->getFrame())
+                throw armarx::UserException("Error: frames mismatch");
+        }
+        else
         {
-            VirtualRobot::LinkedCoordinate c(virtualRobot);
-            std::string frame;
-            if(position)
-            {
-                frame = position->getFrame();
-
-                if(!frame.empty() && frame != orientation->getFrame())
-                    throw armarx::UserException("Error: frames mismatch");
-            }
+            if(!orientation)
+                armarx::UserException("createLinkedCoordinate: orientation and position are both NULL");
             else
-            {
-                if(!orientation)
-                    armarx::UserException("createLinkedCoordinate: orientation and position are both NULL");
-                else
-                    frame = orientation->getFrame();
-            }
+                frame = orientation->getFrame();
+        }
 
-            Eigen::Matrix4f pose = Eigen::Matrix4f::Identity();
+        Eigen::Matrix4f pose = Eigen::Matrix4f::Identity();
 
-            if(orientation)
-                pose.block<3,3>(0,0) = orientation->toEigen();
-            if(position)
-                pose.block<3,1>(0,3) = position->toEigen();
+        if(orientation)
+            pose.block<3,3>(0,0) = orientation->toEigen();
+        if(position)
+            pose.block<3,1>(0,3) = position->toEigen();
 
-            c.set(frame, pose);
+        c.set(frame, pose);
 
-            return c;
-        }
+        return c;
     }
 
 
 
 
+
 }
diff --git a/source/RobotAPI/libraries/robotstate/remote/ArmarPose.h b/source/RobotAPI/libraries/core/FramedPose.h
similarity index 60%
rename from source/RobotAPI/libraries/robotstate/remote/ArmarPose.h
rename to source/RobotAPI/libraries/core/FramedPose.h
index 71a5bc62f345c4f355331cf597a1c4c118280b71..5314eae603e3876091ed72adc240a83bb57d6553 100644
--- a/source/RobotAPI/libraries/robotstate/remote/ArmarPose.h
+++ b/source/RobotAPI/libraries/core/FramedPose.h
@@ -14,26 +14,29 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
- * @package    RobotStateComponent::
+ * @package    RobotAPI::RobotStateComponent::
  * @author     ( stefan dot ulbrich at kit dot edu)
  * @date
  * @copyright  http://www.gnu.org/licenses/gpl.txt
  *             GNU General Public License
  */
 
-#ifndef _ARMARX_COMPONENT_RobotStateComponent_ArmarPose_H
-#define _ARMARX_COMPONENT_RobotStateComponent_ArmarPose_H
+#ifndef _ARMARX_COMPONENT_RobotAPI_FramedPose_H
+#define _ARMARX_COMPONENT_RobotAPI_FramedPose_H
 #include <sstream>
 
 #include <Eigen/Core>
 #include <Eigen/Geometry>
 
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/FramedPoseBase.h>
+#include <RobotAPI/interface/core/RobotState.h>
 #include <Core/observers/variant/Variant.h>
 #include <Core/observers/AbstractObjectSerializer.h>
 
 #include <Core/core/exceptions/local/ExpressionException.h>
 
+#include <RobotAPI/libraries/core/Pose.h>
+
 namespace VirtualRobot
 {
     class Robot;
@@ -46,9 +49,6 @@ namespace armarx
     namespace VariantType
     {
         // variant types
-        const VariantTypeId Vector3 = Variant::addTypeName("::armarx::Vector3Base");
-        const VariantTypeId Quaternion = Variant::addTypeName("::armarx::QuaternionBase");
-        const VariantTypeId Pose = Variant::addTypeName("::armarx::PoseBase");
         const VariantTypeId FramedPose = Variant::addTypeName("::armarx::FramedPoseBase");
         const VariantTypeId FramedVector3 = Variant::addTypeName("::armarx::FramedVector3Base");
         const VariantTypeId FramedPosition = Variant::addTypeName("::armarx::FramedPositionBase");
@@ -57,318 +57,12 @@ namespace armarx
 
     std::string const GlobalFrame = "Global";
 
-    /**
-     * @class Vector3
-     * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
-     * @brief The Vector3 class
-     */
-    class Vector3 :
-            virtual public Vector3Base
-    {
-    public:
-        Vector3();
-        Vector3(const Eigen::Vector3f &);
-        Vector3(const Eigen::Matrix4f &);
-        Vector3(::Ice::Float x, ::Ice::Float y, ::Ice::Float z);
-
-        void operator=(const Eigen::Vector3f& vec);
-
-        virtual Eigen::Vector3f toEigen() const;
-
-        // inherited from VariantDataClass
-        Ice::ObjectPtr ice_clone() const
-        {
-            return this->clone();
-        }
-        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return new Vector3(*this);
-        }
-        std::string output(const Ice::Current& c = ::Ice::Current()) const;
-        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return VariantType::Vector3;
-        }
-        bool validate(const Ice::Current& c = ::Ice::Current())
-        {
-            return true;
-        }
-
-        /**
-             * @brief Implementation of virtual function to read a Vector3 from an XML-file.
-             *Example xml-layout:
-             * @code
-             *      <x>0</x>
-             *      <y>0</y>
-             *      <z>0</z>
-             * @endcode
-
-             * @param xmlData String with xml-data. NOT a file path!
-             * @return ErrorCode, 1 on Success
-             */
-        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
-        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
-
-        friend std::ostream &operator<<(std::ostream &stream, const Vector3& rhs)
-        {
-            stream << "Vector3: " << std::endl << rhs.output() << std::endl;
-            return stream;
-        };
-
-    public: // serialization
-        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
-        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
-    };
-
-    typedef IceInternal::Handle<Vector3> Vector3Ptr;
-
-
-    /**
-     * @class Quaternion
-     * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
-     * @brief The Quaternion class
-     */
-    class Quaternion :
-            virtual public QuaternionBase
-    {
-    public:
-        Quaternion();
-        Quaternion(const Eigen::Matrix4f &);
-        Quaternion(const Eigen::Matrix3f &);
-        Quaternion(const Eigen::Quaternionf &);
-        Quaternion(::Ice::Float qw, ::Ice::Float qx, ::Ice::Float qy, ::Ice::Float qz);
-
-        Eigen::Matrix3f toEigen() const;
-        Eigen::Matrix3f slerp(float, const Eigen::Matrix3f &);
-
-        static Eigen::Matrix3f slerp(float, const Eigen::Matrix3f &, const Eigen::Matrix3f &);
-
-        // inherited from VariantDataClass
-        Ice::ObjectPtr ice_clone() const
-        {
-            return this->clone();
-        }
-        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return new Quaternion(*this);
-        }
-        std::string output(const Ice::Current& c = ::Ice::Current()) const;
-        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return VariantType::Quaternion;
-        }
-        bool validate(const Ice::Current& c = ::Ice::Current())
-        {
-            return true;
-        }
-
-        /**
-             * @brief Implementation of virtual function to read a Quaternion from an XML-file.
-             *Example xml-layout:
-             * @code
-             *      <qw>0</qw>
-             *      <qx>0</qx>
-             *      <qy>0</qy>
-             *      <qz>0</qz>
-             * @endcode
-             *
-             *OR in AngleAxis-Notation with radiant
-             *
-             * @code
-             *      <angle>0.5</qw>
-             *      <x>0.2</x>
-             *      <y>0.1</y>
-             *      <z>0.7</z>
-             * @endcode
-             *
-             * @param xmlData String with xml-data. NOT a file path!
-             * @param c
-             * @return ErrorCode, 1 on Success
-             */
-        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
-        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
-
-        friend std::ostream &operator<<(std::ostream &stream, const Quaternion& rhs)
-        {
-            stream << "Quaternion: " << std::endl << rhs.output() << std::endl;
-            return stream;
-        };
-
-    public: // serialization
-        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
-        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
-
-    private:
-        void init(const Eigen::Matrix3f &);
-        void init(const Eigen::Quaternionf &);
-    };
-
-    typedef IceInternal::Handle<Quaternion> QuaternionPtr;
-
-
-    /**
-     * @class Pose
-     * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
-     * @brief The Pose class
-     */
-    class Pose :
-            virtual public PoseBase
-    {
-    public:
-        Pose();
-        Pose(const Eigen::Matrix4f &);
-        Pose(const Eigen::Matrix3f &, const Eigen::Vector3f &);
-        Pose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori);
-
-        void operator=(const Eigen::Matrix4f &matrix);
-        virtual Eigen::Matrix4f toEigen() const;
-
-        // inherited from VariantDataClass
-        Ice::ObjectPtr ice_clone() const
-        {
-            return this->clone();
-        }
-        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return new Pose(*this);
-        }
-        std::string output(const Ice::Current& c = ::Ice::Current()) const;
-        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return VariantType::Pose;
-        }
-        bool validate(const Ice::Current& c = ::Ice::Current())
-        {
-            return true;
-        }
-
-        /**
-             * @brief Implementation of virtual function to read a FramedOrientation from an XML-file.
-             *Example xml-layout:
-             * @code
-             *      <frame>leftHand</frame>
-             *      <x>0</x>
-             *      <y>0</y>
-             *      <z>0</z>
-             *      <qw>0.45</qw>
-             *      <qx>0.2</qx>
-             *      <qy>0</qy>
-             *      <qz>0</qz>
-             * @endcode
-
-             * @param xmlData String with xml-data. NOT a file path!
-             * @param c
-             * @return ErrorCode, 1 on Success
-             * @see Quaternion::readFromXml() for AxisAngle-Notation
-             */
-        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
-        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
-
-        friend std::ostream &operator<<(std::ostream &stream, const Pose& rhs)
-        {
-            stream << "Pose: " << std::endl << rhs.output() << std::endl;
-            return stream;
-        };
-
-    public: // serialization
-        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
-        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
-
-    protected:
-        void init();
-        void ice_postUnmarshal();
-    private:
-        //! To void unnecessary upcasts
-        QuaternionPtr c_orientation;
-        Vector3Ptr c_position;
-
-    };
-
-    typedef IceInternal::Handle<Pose> PosePtr;
 
 
 
-    /**
-     * @class FramedPose
-     * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
-     * @brief The FramedPose class
-     */
-    class FramedPose :
-            virtual public FramedPoseBase,
-            virtual public Pose
-    {
-    public:
-        FramedPose();
-        FramedPose(const Eigen::Matrix3f& m, const Eigen::Vector3f& v, const std::string& frame, const std::string& agent);
-        FramedPose(const Eigen::Matrix4f& m, const std::string& frame, const std::string& agent);
-        FramedPose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori, const std::string& frame, const std::string& agent);
-
-        std::string getFrame() const;
-
-        // inherited from VariantDataClass
-        Ice::ObjectPtr ice_clone() const
-        {
-            return this->clone();
-        }
-
-        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return new FramedPose(*this);
-        }
-
-        std::string output(const Ice::Current& c = ::Ice::Current()) const;
-
-        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
-        {
-            return VariantType::FramedPose;
-        }
-
-        bool validate(const Ice::Current& c = ::Ice::Current())
-        {
-            return true;
-        }
-
-        void changeFrame(const SharedRobotInterfacePrx& referenceRobot, const std::string &newFrame);
-        void changeFrame(const VirtualRobot::RobotPtr &referenceRobot, const std::string &newFrame);
-        /**
-             * @brief Implementation of virtual function to read a FramedPose from an XML-file.
-             *Example xml-layout:
-             * @code
-             *      <frame>leftHand</frame>
-             *      <x>0</x>
-             *      <y>0</y>
-             *      <z>0</z>
-             * @endcode
-
-             * @param xmlData String with xml-data. NOT a file path!
-             * @return ErrorCode, 1 on Success
-             */
-        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
-        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
-
-        friend std::ostream &operator<<(std::ostream &stream, const FramedPose& rhs)
-        {
-            stream << "FramedPose: " << std::endl << rhs.output() << std::endl;
-            return stream;
-        };
-
-
-    public:
-        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
-        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
-
-    };
-
-    typedef IceInternal::Handle<FramedPose> FramedPosePtr;
-
-
     /**
      * @class FramedVector3
-     * @ingroup RobotAPI-ArmarPose
+     * @ingroup RobotAPI-FramedPose
      * @ingroup Variants
      * @brief FramedVector3 is a 3 dimensional @b direction vector with a reference frame.
      * The reference frame can be used to change the coordinate system to which
@@ -450,7 +144,7 @@ namespace armarx
     /**
      * @class FramedPosition
      * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
+     * @ingroup RobotAPI-FramedPose
      * @brief The FramedPosition class
      */
     class FramedPosition :
@@ -520,7 +214,7 @@ namespace armarx
     /**
      * @class FramedOrientation
      * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
+     * @ingroup RobotAPI-FramedPose
      * @brief The FramedOrientation class
      */
     class FramedOrientation :
@@ -587,10 +281,81 @@ namespace armarx
 
     typedef IceInternal::Handle<FramedOrientation> FramedOrientationPtr;
 
-
-    namespace ArmarPose
+    /**
+     * @class FramedPose
+     * @ingroup Variants
+     * @ingroup RobotAPI-FramedPose
+     * @brief The FramedPose class
+     */
+    class FramedPose :
+            virtual public FramedPoseBase,
+            virtual public Pose
     {
-        VirtualRobot::LinkedCoordinate createLinkedCoordinate(const VirtualRobot::RobotPtr &virtualRobot, const FramedPositionPtr& position, const FramedOrientationPtr& orientation);
-    }
+    public:
+        FramedPose();
+        FramedPose(const Eigen::Matrix3f& m, const Eigen::Vector3f& v, const std::string& frame, const std::string& agent);
+        FramedPose(const Eigen::Matrix4f& m, const std::string& frame, const std::string& agent);
+        FramedPose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori, const std::string& frame, const std::string& agent);
+
+        std::string getFrame() const;
+
+        // inherited from VariantDataClass
+        Ice::ObjectPtr ice_clone() const
+        {
+            return this->clone();
+        }
+
+        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return new FramedPose(*this);
+        }
+
+        std::string output(const Ice::Current& c = ::Ice::Current()) const;
+
+        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return VariantType::FramedPose;
+        }
+
+        bool validate(const Ice::Current& c = ::Ice::Current())
+        {
+            return true;
+        }
+
+        void changeFrame(const SharedRobotInterfacePrx& referenceRobot, const std::string &newFrame);
+        void changeFrame(const VirtualRobot::RobotPtr &referenceRobot, const std::string &newFrame);
+        /**
+             * @brief Implementation of virtual function to read a FramedPose from an XML-file.
+             *Example xml-layout:
+             * @code
+             *      <frame>leftHand</frame>
+             *      <x>0</x>
+             *      <y>0</y>
+             *      <z>0</z>
+             * @endcode
+
+             * @param xmlData String with xml-data. NOT a file path!
+             * @return ErrorCode, 1 on Success
+             */
+        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
+        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
+
+        friend std::ostream &operator<<(std::ostream &stream, const FramedPose& rhs)
+        {
+            stream << "FramedPose: " << std::endl << rhs.output() << std::endl;
+            return stream;
+        }
+
+
+        static VirtualRobot::LinkedCoordinate createLinkedCoordinate(const VirtualRobot::RobotPtr &virtualRobot, const FramedPositionPtr& position, const FramedOrientationPtr& orientation);
+
+    public:
+        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
+        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
+
+    };
+
+    typedef IceInternal::Handle<FramedPose> FramedPosePtr;
+
 }
 #endif
diff --git a/source/RobotAPI/libraries/robotstate/remote/LinkedPose.cpp b/source/RobotAPI/libraries/core/LinkedPose.cpp
similarity index 98%
rename from source/RobotAPI/libraries/robotstate/remote/LinkedPose.cpp
rename to source/RobotAPI/libraries/core/LinkedPose.cpp
index 579041c3b7e98255d056396feaf3fea4ae536e83..66ba353e98453e01ca418eb1944000a17cab725e 100644
--- a/source/RobotAPI/libraries/robotstate/remote/LinkedPose.cpp
+++ b/source/RobotAPI/libraries/core/LinkedPose.cpp
@@ -1,7 +1,7 @@
 #include "LinkedPose.h"
 
-#include "RemoteRobot.h"
-#include "../SharedRobotServants.h"
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
+//#include "SharedRobotServants.h"
 
 #include <Core/core/logging/Logging.h>
 
diff --git a/source/RobotAPI/libraries/robotstate/remote/LinkedPose.h b/source/RobotAPI/libraries/core/LinkedPose.h
similarity index 95%
rename from source/RobotAPI/libraries/robotstate/remote/LinkedPose.h
rename to source/RobotAPI/libraries/core/LinkedPose.h
index 848ad62fc4c0722b248685b0a13a109e737364cc..c4a4f5869d07cb54eeb39bc4baa29f36ccecf8a5 100644
--- a/source/RobotAPI/libraries/robotstate/remote/LinkedPose.h
+++ b/source/RobotAPI/libraries/core/LinkedPose.h
@@ -21,13 +21,13 @@
  *             GNU General Public License
  */
 
-#ifndef _ARMARX_RobotState_LinkedPose_H
-#define _ARMARX_RobotState_LinkedPose_H
+#ifndef _ARMARX_RobotAPI_LinkedPose_H
+#define _ARMARX_RobotAPI_LinkedPose_H
 
-#include "ArmarPose.h"
+#include "FramedPose.h"
 
-#include <RobotAPI/interface/robotstate/LinkedPoseBase.h>
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/LinkedPoseBase.h>
+#include <RobotAPI/interface/core/RobotState.h>
 
 #include <Core/observers/AbstractObjectSerializer.h>
 #include <Core/observers/variant/Variant.h>
@@ -53,7 +53,7 @@ namespace armarx
     /**
      * @class LinkedPose
      * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
+     * @ingroup RobotAPI-FramedPose
      * @brief The LinkedPose class
      */
     class LinkedPose :
@@ -137,7 +137,7 @@ namespace armarx
      * @class LinkedVector3 is a direction vector (NOT a position vector) with an attached robotstate proxy
      * for frame changes.
      * @ingroup Variants
-     * @ingroup RobotAPI-ArmarPose
+     * @ingroup RobotAPI-FramedPose
      * @brief The LinkedVector3 class
      */
     class LinkedVector3 :
diff --git a/source/RobotAPI/libraries/core/Pose.cpp b/source/RobotAPI/libraries/core/Pose.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5ef1ee6b5d927201007bd70859d9e66a9e5f6e43
--- /dev/null
+++ b/source/RobotAPI/libraries/core/Pose.cpp
@@ -0,0 +1,350 @@
+#include "Pose.h"
+
+// boost includes
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/xml_parser.hpp>
+
+
+
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/LinkedCoordinate.h>
+#include <VirtualRobot/LinkedCoordinate.h>
+#include <VirtualRobot/VirtualRobot.h>
+
+using namespace Eigen;
+using namespace std;
+
+namespace armarx
+{
+
+    Vector3::Vector3()
+    {
+        x = 0;
+        y = 0;
+        z = 0;
+    }
+
+    Vector3::Vector3(const Vector3f & v)
+    {
+        x = v(0);
+        y = v(1);
+        z = v(2);
+    }
+
+    Vector3::Vector3(const Matrix4f & m)
+    {
+        x = m(0,3);
+        y = m(1,3);
+        z = m(2,3);
+    }
+
+    Vector3::Vector3(::Ice::Float x, ::Ice::Float y, ::Ice::Float z)
+    {
+        this->x = x;
+        this->y = y;
+        this->z = z;
+    }
+
+    Vector3f Vector3::toEigen() const
+    {
+        Vector3f v;
+        v << this->x,this->y,this->z;
+        return v;
+    }
+
+    void Vector3::operator=(const Eigen::Vector3f& vec)
+    {
+        x = vec[0];
+        y = vec[1];
+        z = vec[2];
+    }
+
+    string Vector3::output(const Ice::Current &c) const
+    {
+        std::stringstream s;
+        s << toEigen();
+        return s.str();
+    }
+
+    int Vector3::readFromXML(const string &xmlData, const Ice::Current &c)
+    {
+        boost::property_tree::ptree pt = Variant::GetPropertyTree(xmlData);
+
+        x = (pt.get<float>("x"));
+        y = (pt.get<float>("y"));
+        z = (pt.get<float>("z"));
+        return 1;
+    }
+
+    string Vector3::writeAsXML(const Ice::Current &)
+    {
+        using namespace boost::property_tree;
+        ptree pt;
+        pt.add("x", x);
+        pt.add("y", y);
+        pt.add("z", z);
+
+        std::stringstream stream;
+        xml_parser::write_xml(stream, pt);
+        return stream.str();
+    }
+
+    void Vector3::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current&) const
+    {
+        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
+
+        obj->setFloat("x", x);
+        obj->setFloat("y", y);
+        obj->setFloat("z", z);
+    }
+
+    void Vector3::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
+    {
+        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
+
+        x = obj->getFloat("x");
+        y = obj->getFloat("y");
+        z = obj->getFloat("z");
+    }
+
+
+    Quaternion::Quaternion()
+    {
+    }
+
+    Quaternion::Quaternion(const Matrix4f &m4)
+    {
+        Matrix3f m3=m4.block<3,3>(0,0);
+        this->init(m3);
+    }
+
+    Quaternion::Quaternion(const Matrix3f &m3)
+    {
+        this->init(m3);
+    }
+
+    Quaternion::Quaternion(const Eigen::Quaternionf &q)
+    {
+        this->init(q);
+    }
+
+    Quaternion::Quaternion(::Ice::Float qw, ::Ice::Float qx, ::Ice::Float qy, ::Ice::Float qz)
+    {
+        this->qw = qw;
+        this->qx = qx;
+        this->qy = qy;
+        this->qz = qz;
+    }
+
+    Matrix3f Quaternion::toEigen() const
+    {
+        Matrix3f rot;
+        rot = Quaternionf(
+                    this->qw,
+                    this->qx,
+                    this->qy,
+                    this->qz);
+        return rot;
+    }
+
+    void Quaternion::init(const Matrix3f &m3)
+    {
+        Quaternionf q;
+        q = m3;
+        init(q);
+    }
+
+    void Quaternion::init(const Eigen::Quaternionf &q)
+    {
+        this->qw=q.w();
+        this->qx=q.x();
+        this->qy=q.y();
+        this->qz=q.z();
+    }
+
+    Matrix3f Quaternion::slerp(float alpha, const Eigen::Matrix3f &m)
+    {
+        return Quaternion::slerp(alpha,this->toEigen(),m);
+    }
+
+    Matrix3f Quaternion::slerp(float alpha, const Eigen::Matrix3f &m1, const Eigen::Matrix3f &m2)
+    {
+        Matrix3f result;
+        Quaternionf q1,q2;
+        q1 = m1;
+        q2=m2;
+        result= q1.slerp(alpha,q2);
+        return result;
+    }
+
+    string Quaternion::output(const Ice::Current &c) const
+    {
+        std::stringstream s;
+        s << toEigen();
+        return s.str();
+    }
+
+    int Quaternion::readFromXML(const string &xmlData, const Ice::Current &c)
+    {
+        boost::property_tree::ptree pt = Variant::GetPropertyTree(xmlData);
+
+        using namespace Eigen;
+
+        Quaternionf q;
+        if(pt.get_optional<float>("angle"))
+        {// AxisAngle-Notation
+            float angle = pt.get<float>("angle");
+
+            Vector3f axis;
+            axis << pt.get<float>("x")  , pt.get<float>("y"), pt.get<float>("z");
+
+            AngleAxisf aa(angle, axis);
+            q = aa;
+            qw = q.w();
+            qx = q.x();
+            qy = q.y();
+            qz = q.z();
+        }
+        else
+        {
+            qx = (pt.get<float>("qx"));
+            qy = (pt.get<float>("qy"));
+            qz = (pt.get<float>("qz"));
+            qw = (pt.get<float>("qw"));
+        }
+
+        return 1;
+    }
+
+    string Quaternion::writeAsXML(const Ice::Current &)
+    {
+        using namespace boost::property_tree;
+        ptree pt;
+        pt.add("qx", qx);
+        pt.add("qy", qy);
+        pt.add("qz", qz);
+        pt.add("qw", qw);
+
+        std::stringstream stream;
+        xml_parser::write_xml(stream, pt);
+        return stream.str();
+    }
+
+    void Quaternion::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current&) const
+    {
+        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
+
+        obj->setFloat("qx", qx);
+        obj->setFloat("qy", qy);
+        obj->setFloat("qz", qz);
+        obj->setFloat("qw", qw);
+    }
+
+    void Quaternion::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
+    {
+        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
+
+        qx = obj->getFloat("qx");
+        qy = obj->getFloat("qy");
+        qz = obj->getFloat("qz");
+        qw = obj->getFloat("qw");
+    }
+
+    Pose::Pose(const Eigen::Matrix3f &m, const Eigen::Vector3f &v)
+    {
+        this->orientation = new Quaternion(m);
+        this->position = new Vector3(v);
+        init();
+    }
+
+    Pose::Pose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori)
+    {
+        this->orientation = new Quaternion(*QuaternionPtr::dynamicCast(ori));
+        this->position = new Vector3(*Vector3Ptr::dynamicCast(pos));
+        init();
+    }
+
+    Pose::Pose()
+    {
+        this->orientation = new Quaternion();
+        this->position = new Vector3();
+        init();
+    }
+
+    Pose::Pose(const Matrix4f &m)
+    {
+        this->orientation = new Quaternion(m);
+        this->position = new Vector3(m);
+        init();
+    }
+
+    void Pose::operator=(const Matrix4f &matrix)
+    {
+        this->orientation = new Quaternion(matrix);
+        this->position = new Vector3(matrix);
+        init();
+    }
+
+    Matrix4f Pose::toEigen() const
+    {
+        Matrix4f m = Matrix4f::Identity();
+        ARMARX_CHECK_EXPRESSION(c_orientation);
+        ARMARX_CHECK_EXPRESSION(c_position);
+        m.block<3,3>(0,0) = c_orientation->toEigen();
+        m.block<3,1>(0,3) = c_position->toEigen();
+        return m;
+    }
+
+    string Pose::output(const Ice::Current &c) const
+    {
+        std::stringstream s;
+        s << toEigen();
+        return s.str();
+    }
+
+    int Pose::readFromXML(const string &xmlData, const Ice::Current &c)
+    {
+        position->readFromXML(xmlData);
+        orientation->readFromXML(xmlData);
+
+        return 1;
+    }
+
+    string Pose::writeAsXML(const Ice::Current &)
+    {
+        using namespace boost::property_tree;
+        std::stringstream stream;
+        stream <<
+                  position->writeAsXML() <<
+                  orientation->writeAsXML();
+        return stream.str();
+    }
+
+    void Pose::serialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c) const
+    {
+        position->serialize(serializer, c);
+        orientation->serialize(serializer, c);
+    }
+
+    void Pose::deserialize(const ObjectSerializerBasePtr& serializer, const ::Ice::Current& c)
+    {
+        AbstractObjectSerializerPtr obj = AbstractObjectSerializerPtr::dynamicCast(serializer);
+
+        position->deserialize(obj);
+        orientation->deserialize(obj);
+    }
+
+    void Pose::init()
+    {
+        this->c_position = Vector3Ptr::dynamicCast(this->position);
+        this->c_orientation = QuaternionPtr::dynamicCast(this->orientation);
+    }
+
+
+    void Pose::ice_postUnmarshal()
+    {
+        init();
+    }
+
+
+}
diff --git a/source/RobotAPI/libraries/core/Pose.h b/source/RobotAPI/libraries/core/Pose.h
new file mode 100644
index 0000000000000000000000000000000000000000..a35bcab6edbb1f5017d8e5a3017815b43deb124b
--- /dev/null
+++ b/source/RobotAPI/libraries/core/Pose.h
@@ -0,0 +1,281 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * 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 Lesser 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/>.
+ *
+ * @package    RobotAPI::Core
+ * @author     ( stefan dot ulbrich at kit dot edu)
+ * @date
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#ifndef _ARMARX_COMPONENT_RobotAPI_Pose_H
+#define _ARMARX_COMPONENT_RobotAPI_Pose_H
+
+#include <sstream>
+#include <Eigen/Core>
+#include <Eigen/Geometry>
+
+#include <Core/observers/variant/Variant.h>
+#include <Core/observers/AbstractObjectSerializer.h>
+#include <Core/core/exceptions/local/ExpressionException.h>
+#include <RobotAPI/interface/core/PoseBase.h>
+
+
+
+namespace armarx
+{
+    namespace VariantType
+    {
+        // variant types
+        const VariantTypeId Vector3 = Variant::addTypeName("::armarx::Vector3Base");
+        const VariantTypeId Quaternion = Variant::addTypeName("::armarx::QuaternionBase");
+        const VariantTypeId Pose = Variant::addTypeName("::armarx::PoseBase");
+    }
+
+    /**
+     * @class Vector3
+     * @ingroup Variants
+     * @ingroup RobotAPI-FramedPose
+     * @brief The Vector3 class
+     */
+    class Vector3 :
+            virtual public Vector3Base
+    {
+    public:
+        Vector3();
+        Vector3(const Eigen::Vector3f &);
+        Vector3(const Eigen::Matrix4f &);
+        Vector3(::Ice::Float x, ::Ice::Float y, ::Ice::Float z);
+
+        void operator=(const Eigen::Vector3f& vec);
+
+        virtual Eigen::Vector3f toEigen() const;
+
+        // inherited from VariantDataClass
+        Ice::ObjectPtr ice_clone() const
+        {
+            return this->clone();
+        }
+        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return new Vector3(*this);
+        }
+        std::string output(const Ice::Current& c = ::Ice::Current()) const;
+        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return VariantType::Vector3;
+        }
+        bool validate(const Ice::Current& c = ::Ice::Current())
+        {
+            return true;
+        }
+
+        /**
+             * @brief Implementation of virtual function to read a Vector3 from an XML-file.
+             *Example xml-layout:
+             * @code
+             *      <x>0</x>
+             *      <y>0</y>
+             *      <z>0</z>
+             * @endcode
+
+             * @param xmlData String with xml-data. NOT a file path!
+             * @return ErrorCode, 1 on Success
+             */
+        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
+        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
+
+        friend std::ostream &operator<<(std::ostream &stream, const Vector3& rhs)
+        {
+            stream << "Vector3: " << std::endl << rhs.output() << std::endl;
+            return stream;
+        };
+
+    public: // serialization
+        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
+        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
+    };
+
+    typedef IceInternal::Handle<Vector3> Vector3Ptr;
+
+
+    /**
+     * @class Quaternion
+     * @ingroup Variants
+     * @ingroup RobotAPI-FramedPose
+     * @brief The Quaternion class
+     */
+    class Quaternion :
+            virtual public QuaternionBase
+    {
+    public:
+        Quaternion();
+        Quaternion(const Eigen::Matrix4f &);
+        Quaternion(const Eigen::Matrix3f &);
+        Quaternion(const Eigen::Quaternionf &);
+        Quaternion(::Ice::Float qw, ::Ice::Float qx, ::Ice::Float qy, ::Ice::Float qz);
+
+        Eigen::Matrix3f toEigen() const;
+        Eigen::Matrix3f slerp(float, const Eigen::Matrix3f &);
+
+        static Eigen::Matrix3f slerp(float, const Eigen::Matrix3f &, const Eigen::Matrix3f &);
+
+        // inherited from VariantDataClass
+        Ice::ObjectPtr ice_clone() const
+        {
+            return this->clone();
+        }
+        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return new Quaternion(*this);
+        }
+        std::string output(const Ice::Current& c = ::Ice::Current()) const;
+        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return VariantType::Quaternion;
+        }
+        bool validate(const Ice::Current& c = ::Ice::Current())
+        {
+            return true;
+        }
+
+        /**
+             * @brief Implementation of virtual function to read a Quaternion from an XML-file.
+             *Example xml-layout:
+             * @code
+             *      <qw>0</qw>
+             *      <qx>0</qx>
+             *      <qy>0</qy>
+             *      <qz>0</qz>
+             * @endcode
+             *
+             *OR in AngleAxis-Notation with radiant
+             *
+             * @code
+             *      <angle>0.5</qw>
+             *      <x>0.2</x>
+             *      <y>0.1</y>
+             *      <z>0.7</z>
+             * @endcode
+             *
+             * @param xmlData String with xml-data. NOT a file path!
+             * @param c
+             * @return ErrorCode, 1 on Success
+             */
+        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
+        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
+
+        friend std::ostream &operator<<(std::ostream &stream, const Quaternion& rhs)
+        {
+            stream << "Quaternion: " << std::endl << rhs.output() << std::endl;
+            return stream;
+        };
+
+    public: // serialization
+        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
+        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
+
+    private:
+        void init(const Eigen::Matrix3f &);
+        void init(const Eigen::Quaternionf &);
+    };
+
+    typedef IceInternal::Handle<Quaternion> QuaternionPtr;
+
+
+    /**
+     * @class Pose
+     * @ingroup Variants
+     * @ingroup RobotAPI-FramedPose
+     * @brief The Pose class
+     */
+    class Pose :
+            virtual public PoseBase
+    {
+    public:
+        Pose();
+        Pose(const Eigen::Matrix4f &);
+        Pose(const Eigen::Matrix3f &, const Eigen::Vector3f &);
+        Pose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori);
+
+        void operator=(const Eigen::Matrix4f &matrix);
+        virtual Eigen::Matrix4f toEigen() const;
+
+        // inherited from VariantDataClass
+        Ice::ObjectPtr ice_clone() const
+        {
+            return this->clone();
+        }
+        VariantDataClassPtr clone(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return new Pose(*this);
+        }
+        std::string output(const Ice::Current& c = ::Ice::Current()) const;
+        VariantTypeId getType(const Ice::Current& c = ::Ice::Current()) const
+        {
+            return VariantType::Pose;
+        }
+        bool validate(const Ice::Current& c = ::Ice::Current())
+        {
+            return true;
+        }
+
+        /**
+             * @brief Implementation of virtual function to read a FramedOrientation from an XML-file.
+             *Example xml-layout:
+             * @code
+             *      <frame>leftHand</frame>
+             *      <x>0</x>
+             *      <y>0</y>
+             *      <z>0</z>
+             *      <qw>0.45</qw>
+             *      <qx>0.2</qx>
+             *      <qy>0</qy>
+             *      <qz>0</qz>
+             * @endcode
+
+             * @param xmlData String with xml-data. NOT a file path!
+             * @param c
+             * @return ErrorCode, 1 on Success
+             * @see Quaternion::readFromXml() for AxisAngle-Notation
+             */
+        int readFromXML(const std::string &xmlData, const Ice::Current &c = ::Ice::Current());
+        std::string writeAsXML(const Ice::Current &c = ::Ice::Current());
+
+        friend std::ostream &operator<<(std::ostream &stream, const Pose& rhs)
+        {
+            stream << "Pose: " << std::endl << rhs.output() << std::endl;
+            return stream;
+        };
+
+    public: // serialization
+        virtual void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current()) const;
+        virtual void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = ::Ice::Current());
+
+    protected:
+        void init();
+        void ice_postUnmarshal();
+    private:
+        //! To void unnecessary upcasts
+        QuaternionPtr c_orientation;
+        Vector3Ptr c_position;
+
+    };
+
+    typedef IceInternal::Handle<Pose> PosePtr;
+
+}
+#endif
diff --git a/source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.cpp b/source/RobotAPI/libraries/core/RobotAPIObjectFactories.cpp
similarity index 81%
rename from source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.cpp
rename to source/RobotAPI/libraries/core/RobotAPIObjectFactories.cpp
index af1999ea36988e3bb0c121ef3b39e632efce6aec..2de2300b9c11e3685dcd85f27dffe33422109fd7 100644
--- a/source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.cpp
+++ b/source/RobotAPI/libraries/core/RobotAPIObjectFactories.cpp
@@ -21,7 +21,7 @@
 *             GNU General Public License
 */
 
-#include "RobotStateObjectFactories.h"
+#include "RobotAPIObjectFactories.h"
 using namespace armarx;
 using namespace armarx::ObjectFactories;
-const FactoryCollectionBaseCleanUp RobotStateObjectFactories::RobotStateObjectFactoriesVar = FactoryCollectionBase::addToPreregistration(new RobotStateObjectFactories());
+const FactoryCollectionBaseCleanUp RobotAPIObjectFactories::RobotAPIObjectFactoriesVar = FactoryCollectionBase::addToPreregistration(new RobotAPIObjectFactories());
diff --git a/source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h b/source/RobotAPI/libraries/core/RobotAPIObjectFactories.h
similarity index 88%
rename from source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h
rename to source/RobotAPI/libraries/core/RobotAPIObjectFactories.h
index 5a791c5ec6067ef8c4cd6ea30dad246e247263e4..488a6190e7300d0e16dba59966f035771e08063e 100644
--- a/source/RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h
+++ b/source/RobotAPI/libraries/core/RobotAPIObjectFactories.h
@@ -14,24 +14,23 @@
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
-* @package    ArmarX::Core
+* @package    ArmarX::ROBOTAPI
 * @author     Kai Welke (welke _at_ kit _dot_ edu)
 * @date       2011 Kai Welke
 * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
 *             GNU General Public License
 */
 
-#ifndef _ARMARX_CORE_ROBOTSTATE_OBJECT_FACTORIES_H
-#define _ARMARX_CORE_ROBOTSTATE_OBJECT_FACTORIES_H
+#ifndef _ARMARX_ROBOTAPI_OBJECT_FACTORIES_H
+#define _ARMARX_ROBOTAPI_OBJECT_FACTORIES_H
 
 #include <Core/core/system/FactoryCollectionBase.h>
-#include <RobotAPI/interface/robotstate/PoseBase.h>
-#include <RobotAPI/interface/robotstate/RobotState.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-#include <RobotAPI/interface/robotstate/LinkedPoseBase.h>
-#include <RobotAPI/libraries/robotstate/remote/LinkedPose.h>
+#include <RobotAPI/interface/core/PoseBase.h>
+#include <RobotAPI/interface/core/RobotState.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
+#include <RobotAPI/libraries/core/LinkedPose.h>
 #include <Ice/Ice.h>
-#include <RobotAPI/libraries/robotstate/remote/observerfilters/PoseMedianFilter.h>
+#include <RobotAPI/libraries/core/observerfilters/PoseMedianFilter.h>
 
 namespace armarx
 {
@@ -149,9 +148,9 @@ namespace armarx
     {
 
         /**
-     * @class RobotStateObjectFactories
-     */
-        class RobotStateObjectFactories : public FactoryCollectionBase
+         * @class RobotAPIObjectFactories
+         */
+        class RobotAPIObjectFactories : public FactoryCollectionBase
         {
         public:
             ObjectFactoryMap getFactories()
@@ -172,10 +171,11 @@ namespace armarx
 
                 return map;
             }
-            static const FactoryCollectionBaseCleanUp RobotStateObjectFactoriesVar;
+            static const FactoryCollectionBaseCleanUp RobotAPIObjectFactoriesVar;
         };
 
     }
+
 }
 
 #endif
diff --git a/source/RobotAPI/libraries/core/RobotStatechartContext.cpp b/source/RobotAPI/libraries/core/RobotStatechartContext.cpp
index 3beacb14ea324f98a796a5edf4d6c47030a196b1..9cfc7e123bfeb4d8808e66a94364e28d1f546e0a 100644
--- a/source/RobotAPI/libraries/core/RobotStatechartContext.cpp
+++ b/source/RobotAPI/libraries/core/RobotStatechartContext.cpp
@@ -23,8 +23,7 @@
 
 #include "RobotStatechartContext.h"
 
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
 #include <Core/core/Component.h>
 #include <Core/core/system/ImportExportComponent.h>
diff --git a/source/RobotAPI/libraries/core/RobotStatechartContext.h b/source/RobotAPI/libraries/core/RobotStatechartContext.h
index 7fd7d40b33bea616bbe27d335c99b971d7e66b47..8a817dcb30101275236fdc49e4aa8ef3163f47df 100644
--- a/source/RobotAPI/libraries/core/RobotStatechartContext.h
+++ b/source/RobotAPI/libraries/core/RobotStatechartContext.h
@@ -25,7 +25,7 @@
 #ifndef ARMARX_COMPONENT_RobotApi_StatechartContext_H
 #define ARMARX_COMPONENT_RobotApi_StatechartContext_H
 
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
 #include <RobotAPI/interface/units/HandUnitInterface.h>
 #include <RobotAPI/interface/units/TCPControlUnit.h>
diff --git a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPose.h b/source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPose.h
similarity index 96%
rename from source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPose.h
rename to source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPose.h
index 42a683456f77128c6f12aa32543f92fbdd7f7960..fec76fafd8aff7ac61532ba3eb04f3f116989111 100644
--- a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPose.h
+++ b/source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPose.h
@@ -1,9 +1,9 @@
-#ifndef _ARMARX_CORE_CONDITIONCHECKEQUALSPOSE_H
-#define _ARMARX_CORE_CONDITIONCHECKEQUALSPOSE_H
+#ifndef _ARMARX_ROBOTAPI_CONDITIONCHECKEQUALSPOSE_H
+#define _ARMARX_ROBOTAPI_CONDITIONCHECKEQUALSPOSE_H
 
 #include <Core/core/system/ImportExport.h>
 #include <Core/observers/ConditionCheck.h>
-#include <Core/robotstate/remote/ArmarPose.h>
+#include <Core/core/FramedPose.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPoseWithTolerance.h b/source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPoseWithTolerance.h
similarity index 96%
rename from source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPoseWithTolerance.h
rename to source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPoseWithTolerance.h
index af54bdc61ffe2f3868720ceb4c4d37c8d0ffdc73..a224702cc8e79e07ce072609089bcacf0b65cdef 100644
--- a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckEqualsPoseWithTolerance.h
+++ b/source/RobotAPI/libraries/core/checks/ConditionCheckEqualsPoseWithTolerance.h
@@ -1,9 +1,9 @@
-#ifndef CONDITIONCHECKEQUALSPOSITIONWITHTOLERANCE_H
-#define CONDITIONCHECKEQUALSPOSITIONWITHTOLERANCE_H
+#ifndef ARMARX_ROBOTAPI_CONDITIONCHECKEQUALSPOSITIONWITHTOLERANCE_H
+#define ARMARX_ROBOTAPI_CONDITIONCHECKEQUALSPOSITIONWITHTOLERANCE_H
 
 #include <Core/core/system/ImportExport.h>
 #include <Core/observers/ConditionCheck.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.cpp b/source/RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.cpp
similarity index 100%
rename from source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.cpp
rename to source/RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.cpp
diff --git a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h b/source/RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h
similarity index 78%
rename from source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h
rename to source/RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h
index f59c6d70eee7ecf9fcf0d2e6fd7f2f86031dadf0..988f73f10391d4162044edee6101c5333fdf3c2c 100644
--- a/source/RobotAPI/libraries/robotstate/remote/checks/ConditionCheckMagnitudeChecks.h
+++ b/source/RobotAPI/libraries/core/checks/ConditionCheckMagnitudeChecks.h
@@ -3,8 +3,8 @@
 
 #include <Core/core/system/ImportExport.h>
 #include <Core/observers/ConditionCheck.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-#include <RobotAPI/libraries/robotstate/remote/LinkedPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
+#include <RobotAPI/libraries/core/LinkedPose.h>
 
 namespace armarx {
     
diff --git a/source/RobotAPI/libraries/robotstate/remote/observerfilters/OffsetFilter.h b/source/RobotAPI/libraries/core/observerfilters/OffsetFilter.h
similarity index 98%
rename from source/RobotAPI/libraries/robotstate/remote/observerfilters/OffsetFilter.h
rename to source/RobotAPI/libraries/core/observerfilters/OffsetFilter.h
index 63c433c980d0afe509f1f94aeb62ebac1dac4be1..018513302d1022b0ab9915b6ab66ab00684aff3b 100644
--- a/source/RobotAPI/libraries/robotstate/remote/observerfilters/OffsetFilter.h
+++ b/source/RobotAPI/libraries/core/observerfilters/OffsetFilter.h
@@ -26,7 +26,7 @@
 
 #include <RobotAPI/interface/observers/ObserverFilters.h>
 #include <Core/observers/filters/DatafieldFilter.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 namespace armarx {
     namespace filters {
diff --git a/source/RobotAPI/libraries/robotstate/remote/observerfilters/PoseMedianFilter.h b/source/RobotAPI/libraries/core/observerfilters/PoseMedianFilter.h
similarity index 96%
rename from source/RobotAPI/libraries/robotstate/remote/observerfilters/PoseMedianFilter.h
rename to source/RobotAPI/libraries/core/observerfilters/PoseMedianFilter.h
index 74068f8162bee9aa8c28e004791105f855f258d3..8bfd2fde7ffcb763a74343d558cd0755754eb142 100644
--- a/source/RobotAPI/libraries/robotstate/remote/observerfilters/PoseMedianFilter.h
+++ b/source/RobotAPI/libraries/core/observerfilters/PoseMedianFilter.h
@@ -2,8 +2,8 @@
 #define _ARMARX_ROBOTAPI_MEDIANFILTER_H
 
 #include <Core/observers/filters/MedianFilter.h>
-#include "../ArmarPose.h"
-#include <RobotAPI/interface/robotstate/PoseBase.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
+#include <RobotAPI/interface/core/PoseBase.h>
 
 namespace armarx {
     namespace filters {
diff --git a/source/RobotAPI/libraries/robotstate/remote/RemoteRobot.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
similarity index 100%
rename from source/RobotAPI/libraries/robotstate/remote/RemoteRobot.cpp
rename to source/RobotAPI/libraries/core/remoterobot/RemoteRobot.cpp
diff --git a/source/RobotAPI/libraries/robotstate/remote/RemoteRobot.h b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
similarity index 98%
rename from source/RobotAPI/libraries/robotstate/remote/RemoteRobot.h
rename to source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
index a21845b8db105d41f0abd7456ac10be9ba0bdc48..8b8b5c151f602d5976400e52dc63a670767650a4 100644
--- a/source/RobotAPI/libraries/robotstate/remote/RemoteRobot.h
+++ b/source/RobotAPI/libraries/core/remoterobot/RemoteRobot.h
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
- * @package    ExampleClient::
+ * @package    RobotAPI::
  * @author     (stefan dot ulbrich at kit dot edu)
  * @date
  * @copyright  http://www.gnu.org/licenses/gpl.txt
@@ -33,9 +33,9 @@
 #include <VirtualRobot/Nodes/RobotNodePrismatic.h>
 #include <VirtualRobot/Nodes/RobotNodeFixed.h>
 #include <VirtualRobot/CollisionDetection/CollisionChecker.h>
-#include "ArmarPose.h"
+#include <RobotAPI/libraries/core/FramedPose.h>
 
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/RobotState.h>
 
 // boost
 #include <boost/thread/mutex.hpp>
diff --git a/source/RobotAPI/libraries/robotstate/remote/RemoteRobotNode.cpp b/source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp
similarity index 100%
rename from source/RobotAPI/libraries/robotstate/remote/RemoteRobotNode.cpp
rename to source/RobotAPI/libraries/core/remoterobot/RemoteRobotNode.cpp
diff --git a/source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.cpp b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
similarity index 97%
rename from source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.cpp
rename to source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
index b6bf7c812cc479b6187a24b6e5ca677b22a824e9..4635b94aba1cc7a442e5662cce7633291ad3fcc9 100644
--- a/source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.cpp
@@ -22,13 +22,13 @@
 */
 
 #include "RobotStateObserver.h"
-#include <RobotAPI/libraries/robotstate/RobotStateComponent.h>
+#include <RobotAPI/interface/core/RobotState.h>
 #include <Core/observers/checks/ConditionCheckEquals.h>
 #include <Core/observers/checks/ConditionCheckInRange.h>
 #include <Core/observers/checks/ConditionCheckLarger.h>
 #include <Core/observers/checks/ConditionCheckSmaller.h>
 
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/RobotNodeSet.h>
@@ -177,6 +177,6 @@ void RobotStateObserver::updatePoses()
 
 PropertyDefinitionsPtr RobotStateObserver::createPropertyDefinitions()
 {
-    return PropertyDefinitionsPtr(new RobotStatePropertyDefinitions(
+    return PropertyDefinitionsPtr(new RobotStateObserverPropertyDefinitions(
                                            getConfigIdentifier()));
 }
diff --git a/source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.h b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
similarity index 81%
rename from source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.h
rename to source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
index 19991b4556c6d2eaa8c58e97a636a965a29aa89b..3e75142fb43bc4599f123bf1343d7daecb8f0bf6 100644
--- a/source/RobotAPI/libraries/robotstate/remote/RobotStateObserver.h
+++ b/source/RobotAPI/libraries/core/remoterobot/RobotStateObserver.h
@@ -28,8 +28,8 @@
 #include <Core/core/Component.h>
 #include <Core/interface/observers/VariantBase.h>
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
-#include <RobotAPI/interface/robotstate/RobotStateObserverInterface.h>
-#include <RobotAPI/interface/robotstate/RobotState.h>
+#include <RobotAPI/interface/core/RobotStateObserverInterface.h>
+#include <RobotAPI/interface/core/RobotState.h>
 #include <Core/observers/ConditionCheck.h>
 #include <Core/observers/Observer.h>
 
@@ -46,6 +46,22 @@ namespace VirtualRobot
 namespace armarx
 {
 
+    /**
+     * RobotStatePropertyDefinition Property Definitions
+     */
+    class RobotStateObserverPropertyDefinitions:
+            public ComponentPropertyDefinitions
+    {
+    public:
+       RobotStateObserverPropertyDefinitions(std::string prefix):
+            ComponentPropertyDefinitions(prefix)
+        {
+            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");
+        }
+    };
+
    /**
     * ArmarX RobotStateObserver.
     *
diff --git a/source/RobotAPI/libraries/robotstate/remote/test/ArmarPoseTest.cpp b/source/RobotAPI/libraries/core/remoterobot/test/ArmarPoseTest.cpp
similarity index 90%
rename from source/RobotAPI/libraries/robotstate/remote/test/ArmarPoseTest.cpp
rename to source/RobotAPI/libraries/core/remoterobot/test/ArmarPoseTest.cpp
index fb0832a849f066b08d0191c157b7b40a7046b5e6..553f2ff8a458cb2331fa81bbc3f64f7344210acd 100644
--- a/source/RobotAPI/libraries/robotstate/remote/test/ArmarPoseTest.cpp
+++ b/source/RobotAPI/libraries/core/remoterobot/test/ArmarPoseTest.cpp
@@ -14,18 +14,18 @@
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
-* @package    ArmarXCore::core::Test
+* @package    ArmarX::RobotAPI::Test
 * @author     Nils Adermann (naderman at naderman dot de)
 * @date       2010
 * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
 *             GNU General Public License
 */
 
-#define BOOST_TEST_MODULE RobotAPI::ArmarPose::Test
+#define BOOST_TEST_MODULE RobotAPI::FramedPose::Test
 #define ARMARX_BOOST_TEST
 #include <RobotAPI/Test.h>
 #include <Core/util/json/JSONObject.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 
 using namespace armarx;
diff --git a/source/RobotAPI/libraries/robotstate/remote/test/CMakeLists.txt b/source/RobotAPI/libraries/core/remoterobot/test/CMakeLists.txt
similarity index 73%
rename from source/RobotAPI/libraries/robotstate/remote/test/CMakeLists.txt
rename to source/RobotAPI/libraries/core/remoterobot/test/CMakeLists.txt
index af47d3245d9205e05c2530d7692445355e3b9585..9e295f6332728b99763b0aa3a534801c03b2c6ae 100644
--- a/source/RobotAPI/libraries/robotstate/remote/test/CMakeLists.txt
+++ b/source/RobotAPI/libraries/core/remoterobot/test/CMakeLists.txt
@@ -7,7 +7,7 @@ if (jsoncpp_FOUND)
 endif()
 
 
-set(LIBS ${LIBS} RobotAPIRemoteRobot ArmarXCoreJsonObject ${jsoncpp_LIBRARIES})
+set(LIBS ${LIBS} RobotAPICore ArmarXCoreJsonObject ${jsoncpp_LIBRARIES})
 
 armarx_add_test(ArmarPoseTest ArmarPoseTest.cpp "${LIBS}")
 
diff --git a/source/RobotAPI/libraries/robotstate/remote/CMakeLists.txt b/source/RobotAPI/libraries/robotstate/remote/CMakeLists.txt
deleted file mode 100644
index f49a6b357b61df272451a44380f13a3328f984c2..0000000000000000000000000000000000000000
--- a/source/RobotAPI/libraries/robotstate/remote/CMakeLists.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-armarx_set_target("Core Library: RobotAPIRemoteRobot")
-find_package(Eigen3 QUIET)
-if (NOT Simox_FOUND)
-    find_package(Simox ${ArmarX_Simox_VERSION} QUIET)
-endif()
-
-armarx_build_if(Eigen3_FOUND "Eigen3 not available")
-armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available")
-
-include_directories(${Eigen3_INCLUDE_DIR})
-include_directories(${Simox_INCLUDE_DIRS})
-
-set(LIB_NAME       RobotAPIRemoteRobot)
-set(LIB_VERSION    0.1.0)
-set(LIB_SOVERSION  0)
-
-set(LIBS ArmarXCore ArmarXCoreObservers RobotAPIInterfaces ${Simox_LIBRARIES} )
-
-set(LIB_FILES
-            ArmarPose.cpp
-            LinkedPose.cpp
-            RobotStateObserver.cpp
-            RemoteRobot.cpp
-            RemoteRobotNode.cpp
-            checks/ConditionCheckMagnitudeChecks.cpp
-            RobotStateObjectFactories.cpp
-            )
-set(LIB_HEADERS ArmarPose.h
-            LinkedPose.h
-            RobotStateObserver.h
-            RemoteRobot.h
-            observerfilters/PoseMedianFilter.h
-            observerfilters/OffsetFilter.h
-            checks/ConditionCheckEqualsPose.h
-            checks/ConditionCheckEqualsPoseWithTolerance.h
-            checks/ConditionCheckMagnitudeChecks.h
-            RobotStateObjectFactories.h)
-
-armarx_add_library("${LIB_NAME}" "${LIB_VERSION}" "${LIB_SOVERSION}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}")
-
-add_subdirectory(test)
diff --git a/source/RobotAPI/statecharts/deprecated/OpenHand/OpenHand.cpp b/source/RobotAPI/statecharts/deprecated/OpenHand/OpenHand.cpp
index 6459e8cd7d8811acb492d97b7d79917119e75972..af03e8db22284cb3448c9ad7b8f4e47c78c35b91 100644
--- a/source/RobotAPI/statecharts/deprecated/OpenHand/OpenHand.cpp
+++ b/source/RobotAPI/statecharts/deprecated/OpenHand/OpenHand.cpp
@@ -25,7 +25,7 @@
 #include "OpenHand.h"
 #include <RobotAPI/libraries/core/RobotStatechartContext.h>
 
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/Pose.h>
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
 #include <RobotAPI/libraries/core/RobotStatechartContext.h>
 
diff --git a/source/RobotAPI/statecharts/deprecated/graspingwithtorques/GraspingWithTorques.cpp b/source/RobotAPI/statecharts/deprecated/graspingwithtorques/GraspingWithTorques.cpp
index f669e5f098e2924e5faeca769b258161cd615407..f35b67278d26deb004a874b51f0f5510561bfa1c 100644
--- a/source/RobotAPI/statecharts/deprecated/graspingwithtorques/GraspingWithTorques.cpp
+++ b/source/RobotAPI/statecharts/deprecated/graspingwithtorques/GraspingWithTorques.cpp
@@ -29,7 +29,7 @@
 #include <Core/observers/variant/ChannelRef.h>
 #include <Core/observers/variant/DatafieldRef.h>
 #include <Core/observers/variant/SingleTypeVariantList.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/libraries/core/Pose.h>
 #include <VirtualRobot/IK/DifferentialIK.h>
 #include <VirtualRobot/Robot.h>
 
diff --git a/source/RobotAPI/statecharts/deprecated/motioncontrol/MotionControl.cpp b/source/RobotAPI/statecharts/deprecated/motioncontrol/MotionControl.cpp
index 10ec9a97711826ddd828b5b3d060ebb375db2173..78fa4d04336a252176d15487be83f88488a72765 100644
--- a/source/RobotAPI/statecharts/deprecated/motioncontrol/MotionControl.cpp
+++ b/source/RobotAPI/statecharts/deprecated/motioncontrol/MotionControl.cpp
@@ -1,7 +1,7 @@
 #include "MotionControl.h"
 
 // Core
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 #include <Core/observers/variant/ChannelRef.h>
 #include <Core/observers/ConditionCheck.h>
 #include <Core/core/system/ArmarXDataPath.h>
@@ -543,7 +543,7 @@ void CalculateJointAngleConfiguration::run()
     ikSolver->setMaximumError(maxError,maxErrorRot);
     ikSolver->setupJacobian(0.6f, 10);
 
-    VirtualRobot::LinkedCoordinate target = ArmarPose::createLinkedCoordinate(robot, getInput<FramedPosition>("targetTCPPosition"), getInput<FramedOrientation>("targetTCPOrientation"));
+    VirtualRobot::LinkedCoordinate target = FramedPose::createLinkedCoordinate(robot, getInput<FramedPosition>("targetTCPPosition"), getInput<FramedOrientation>("targetTCPOrientation"));
     ARMARX_INFO << "IK target: " << target.getPose() << armarx::flush;
     Eigen::Matrix4f goalInRoot = target.getInFrame(robot->getRootNode());
 
@@ -613,7 +613,7 @@ void ValidateJointAngleConfiguration::onEnter()
     Quaternionf actualOrientation(actualPose.getPose().block<3,3>(0,0));
 
 
-    VirtualRobot::LinkedCoordinate targetPose = ArmarPose::createLinkedCoordinate(robot, getInput<FramedPosition>("targetTCPPosition"), getInput<FramedOrientation>("targetTCPOrientation"));
+    VirtualRobot::LinkedCoordinate targetPose = FramedPose::createLinkedCoordinate(robot, getInput<FramedPosition>("targetTCPPosition"), getInput<FramedOrientation>("targetTCPOrientation"));
     targetPose.changeFrame(robot->getRootNode());
     Vector3f targetPosition = targetPose.getPosition();
     Quaternionf targetOrientation(targetPose.getPose().block<3,3>(0,0));
@@ -1079,7 +1079,7 @@ void CalculateHeadIK::run()
 
     Eigen::Matrix3f m = Eigen::Matrix3f::Identity();
     FramedOrientationPtr targetOri = new FramedOrientation(m, targetPosition->frame);
-    VirtualRobot::LinkedCoordinate target = ArmarPose::createLinkedCoordinate(robot, targetPosition, targetOri);
+    VirtualRobot::LinkedCoordinate target = FramedPose::createLinkedCoordinate(robot, targetPosition, targetOri);
     ARMARX_VERBOSE << "Target: " << target.getPose() << armarx::flush;
     Eigen::Matrix4f goalInRoot = target.getInFrame(robot->getRootNode());
     //Eigen::Matrix4f goalGlobal = robot->getRootNode()->toGlobalCoordinateSystem(goalInRoot);
diff --git a/source/RobotAPI/statecharts/deprecated/motioncontrol/ZeroForceControl.cpp b/source/RobotAPI/statecharts/deprecated/motioncontrol/ZeroForceControl.cpp
index 06ed58b15f9238063c9d2a6df0b0b86159a2a411..4ada2489045d9e70f80016e078695896bf43249f 100644
--- a/source/RobotAPI/statecharts/deprecated/motioncontrol/ZeroForceControl.cpp
+++ b/source/RobotAPI/statecharts/deprecated/motioncontrol/ZeroForceControl.cpp
@@ -23,7 +23,7 @@
 
 #include "ZeroForceControl.h"
 
-#include <RobotAPI/libraries/robotstate/remote/RobotStateObjectFactories.h>
+#include <RobotAPI/libraries/core/RobotAPIObjectFactories.h>
 #include <Core/core/exceptions/local/ExpressionException.h>
 
 #include <RobotAPI/libraries/core/RobotStatechartContext.h>
diff --git a/source/RobotAPI/statecharts/deprecated/placeobject/PlaceObject.cpp b/source/RobotAPI/statecharts/deprecated/placeobject/PlaceObject.cpp
index b5429097077bcaec9a0b62661fb241bd64f6f5e9..1e45d3d25b71096304a41f290d47536125746004 100644
--- a/source/RobotAPI/statecharts/deprecated/placeobject/PlaceObject.cpp
+++ b/source/RobotAPI/statecharts/deprecated/placeobject/PlaceObject.cpp
@@ -27,8 +27,8 @@
 
 #include <RobotAPI/interface/units/KinematicUnitInterface.h>
 #include <RobotAPI/libraries/core/RobotStatechartContext.h>
-#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
-#include <RobotAPI/libraries/robotstate/remote/RemoteRobot.h>
+#include <RobotAPI/libraries/core/Pose.h>
+#include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 
 #include <Core/observers/variant/ChannelRef.h>
 #include <Core/observers/variant/SingleTypeVariantList.h>