diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp
index f7ca54aae57a8c789cb5b425dd5408308542a391..dd24a1ecc8cc9cf390684902112e5ac44a49c624 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.cpp
@@ -1,10 +1,24 @@
 #include "ObjectPose.h"
 
+#include <VirtualRobot/Robot.h>
+#include <VirtualRobot/RobotConfig.h>
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
 #include <RobotAPI/libraries/core/Pose.h>
+#include <RobotAPI/libraries/core/FramedPose.h>
 
 
 namespace armarx::objpose
 {
+
+    Eigen::Matrix4f toEigen(const PoseBasePtr pose)
+    {
+        auto cast = PosePtr::dynamicCast(pose);
+        ARMARX_CHECK_NOT_NULL(cast);
+        return cast->toEigen();
+    }
+
     ObjectPose::ObjectPose()
     {
     }
@@ -20,13 +34,13 @@ namespace armarx::objpose
         objectType = ice.objectType;
         objectID = ice.objectID;
 
-        objectPoseRobot = PosePtr::dynamicCast(ice.objectPoseRobot)->toEigen();
-        objectPoseGlobal = PosePtr::dynamicCast(ice.objectPoseGlobal)->toEigen();
-        objectPoseOriginal = PosePtr::dynamicCast(ice.objectPoseOriginal)->toEigen();
+        objectPoseRobot = toEigen(ice.objectPoseRobot);
+        objectPoseGlobal = toEigen(ice.objectPoseGlobal);
+        objectPoseOriginal = toEigen(ice.objectPoseOriginal);
         objectPoseOriginalFrame = ice.objectPoseOriginalFrame;
 
         robotConfig = ice.robotConfig;
-        robotPose = PosePtr::dynamicCast(ice.robotPose)->toEigen();
+        robotPose = toEigen(ice.robotPose);
 
         confidence = ice.confidence;
         timestamp = IceUtil::Time::microSeconds(ice.timestampMicroSeconds);
@@ -61,17 +75,46 @@ namespace armarx::objpose
         ice.localOOBB = localOOBB;
     }
 
+    void ObjectPose::fromProvidedPose(const data::ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot)
+    {
+        providerName = provided.providerName;
+        objectType = provided.objectType;
+
+        objectID = provided.objectID;
+
+        objectPoseOriginal = toEigen(provided.objectPose);
+        objectPoseOriginalFrame = provided.objectPoseFrame;
+
+        armarx::FramedPose framed(objectPoseOriginal, objectPoseOriginalFrame, robot->getName());
+        framed.changeFrame(robot, robot->getRootNode()->getName());
+        objectPoseRobot = framed.toEigen();
+        framed.changeToGlobal(robot);
+        objectPoseGlobal = framed.toEigen();
+
+        robotConfig = robot->getConfig()->getRobotNodeJointValueMap();
+        robotPose = robot->getGlobalPose();
+
+        confidence = provided.confidence;
+        timestamp = IceUtil::Time::microSeconds(provided.timestampMicroSeconds);
+
+        localOOBB = provided.localOOBB;
+    }
+
+}
+
+namespace armarx
+{
 
-    void fromIce(const data::ObjectPose& ice, ObjectPose& pose)
+    void objpose::fromIce(const data::ObjectPose& ice, ObjectPose& pose)
     {
         pose.fromIce(ice);
     }
-    ObjectPose fromIce(const data::ObjectPose& ice)
+    objpose::ObjectPose objpose::fromIce(const data::ObjectPose& ice)
     {
         return ObjectPose(ice);
     }
 
-    void fromIce(const data::ObjectPoseSeq& ice, ObjectPoseSeq& poses)
+    void objpose::fromIce(const data::ObjectPoseSeq& ice, ObjectPoseSeq& poses)
     {
         poses.clear();
         poses.reserve(ice.size());
@@ -80,7 +123,7 @@ namespace armarx::objpose
             poses.emplace_back(i);
         }
     }
-    ObjectPoseSeq fromIce(const data::ObjectPoseSeq& ice)
+    objpose::ObjectPoseSeq objpose::fromIce(const data::ObjectPoseSeq& ice)
     {
         ObjectPoseSeq poses;
         fromIce(ice, poses);
@@ -88,16 +131,16 @@ namespace armarx::objpose
     }
 
 
-    void toIce(data::ObjectPose& ice, const ObjectPose& pose)
+    void objpose::toIce(data::ObjectPose& ice, const ObjectPose& pose)
     {
         pose.toIce(ice);
     }
-    data::ObjectPose toIce(const ObjectPose& pose)
+    objpose::data::ObjectPose objpose::toIce(const ObjectPose& pose)
     {
         return pose.toIce();
     }
 
-    void toIce(const ObjectPoseSeq& poses, data::ObjectPoseSeq& ice)
+    void objpose::toIce(data::ObjectPoseSeq& ice, const ObjectPoseSeq& poses)
     {
         ice.clear();
         ice.reserve(poses.size());
@@ -106,7 +149,7 @@ namespace armarx::objpose
             ice.emplace_back(p.toIce());
         }
     }
-    data::ObjectPoseSeq toIce(const ObjectPoseSeq& poses)
+    objpose::data::ObjectPoseSeq objpose::toIce(const ObjectPoseSeq& poses)
     {
         data::ObjectPoseSeq ice;
         toIce(ice, poses);
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h
index 76be353c997825fbd2a15a19fa820cfd8021f74a..6a237e319daaae4c6e43ff0d6cd933990d2ae2f2 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPose.h
@@ -1,9 +1,11 @@
 #pragma once
 
-#include <IceUtil/Time.h>
-
 #include <Eigen/Core>
 
+#include <VirtualRobot/VirtualRobot.h>
+
+#include <IceUtil/Time.h>
+
 #include <RobotAPI/interface/objectpose/types.h>
 
 
@@ -23,6 +25,8 @@ namespace armarx::objpose
         data::ObjectPose toIce() const;
         void toIce(data::ObjectPose& ice) const;
 
+        void fromProvidedPose(const data::ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot);
+
 
         /// Name of the providing component.
         std::string providerName;
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
index 958747a46836e4171f5f1987962d548fee2511ce..e40d29d709de816fedbd44e84d54f08961542eff 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
@@ -23,43 +23,6 @@ namespace armarx
         { objpose::ObjectTypeEnum::UnknownObject, "UnknownObject" }
     };
 
-    void objpose::objectPoseFromProvidedPose(
-        ObjectPose& pose,
-        const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot)
-    {
-        pose.providerName = provided.providerName;
-        pose.objectType = provided.objectType;
-
-        pose.objectID = provided.objectID;
-
-        pose.objectPoseOriginal = provided.objectPose;
-        pose.objectPoseOriginalFrame = provided.objectPoseFrame;
-
-        armarx::PosePtr p = armarx::PosePtr::dynamicCast(provided.objectPose);
-        ARMARX_CHECK_NOT_NULL(p);
-        armarx::FramedPose framed(p->toEigen(), provided.objectPoseFrame, robot->getName());
-        framed.changeFrame(robot, robot->getRootNode()->getName());
-        pose.objectPoseRobot = new Pose(framed.toEigen());
-        framed.changeToGlobal(robot);
-        pose.objectPoseGlobal = new Pose(framed.toEigen());
-
-        pose.robotConfig = robot->getConfig()->getRobotNodeJointValueMap();
-        pose.robotPose = new Pose(robot->getGlobalPose());
-
-        pose.confidence = provided.confidence;
-        pose.timestampMicroSeconds = provided.timestampMicroSeconds;
-
-        pose.localOOBB = provided.localOOBB;
-    }
-
-
-    objpose::ObjectPose objpose::objectPoseFromProvidedPose(
-        const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot)
-    {
-        ObjectPose pose;
-        objectPoseFromProvidedPose(pose, provided, robot);
-        return pose;
-    }
 }
 
 
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
index 2b5ee66be9b221f956c3118634fea3cfe6a8ee82..e9a0da5413706e3e53eea0f4fb4fee267c5f8354 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
+++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
@@ -2,10 +2,10 @@
 
 #include <SimoxUtility/meta/enum/EnumNames.hpp>
 
-#include <VirtualRobot/VirtualRobot.h>
-
 #include <RobotAPI/interface/objectpose/types.h>
 
+#include "ObjectPose.h"
+
 
 namespace armarx::objpose
 {
@@ -14,8 +14,4 @@ namespace armarx::objpose
 
     extern const simox::meta::EnumNames<objpose::ObjectTypeEnum> ObjectTypeEnumNames;
 
-
-    void objectPoseFromProvidedPose(ObjectPose& pose, const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot);
-    ObjectPose objectPoseFromProvidedPose(const ProvidedObjectPose& provided, VirtualRobot::RobotPtr robot);
-
 }