diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
index 51fb57e6896277be3538672fce00c1096bc60951..a6ebdbe351b4d5cb035cbec830579a02d0cfb4e6 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.cpp
@@ -32,15 +32,20 @@ namespace armarx::objpose
         isStatic = ice.isStatic;
         armarx::fromIce(ice.objectID, objectID);
 
-        objectPoseRobot = ::armarx::fromIce(ice.objectPoseRobot);
-        objectPoseGlobal = ::armarx::fromIce(ice.objectPoseGlobal);
-        objectPoseOriginal = ::armarx::fromIce(ice.objectPoseOriginal);
+        armarx::fromIce(ice.objectPoseRobot, objectPoseRobot);
+        objpose::fromIce(ice.objectPoseRobotCovariance, objectPoseRobotCovariance);
+
+        armarx::fromIce(ice.objectPoseGlobal, objectPoseGlobal);
+        objpose::fromIce(ice.objectPoseGlobalCovariance, objectPoseGlobalCovariance);
+
+        armarx::fromIce(ice.objectPoseOriginal, objectPoseOriginal);
         objectPoseOriginalFrame = ice.objectPoseOriginalFrame;
+        objpose::fromIce(ice.objectPoseOriginalCovariance, objectPoseOriginalCovariance);
 
         objectJointValues = ice.objectJointValues;
 
         robotConfig = ice.robotConfig;
-        robotPose = ::armarx::fromIce(ice.robotPose);
+        armarx::fromIce(ice.robotPose, robotPose);
 
         objpose::fromIce(ice.attachment, this->attachment);
 
@@ -64,10 +69,16 @@ namespace armarx::objpose
         ice.isStatic = isStatic;
         armarx::toIce(ice.objectID, objectID);
 
-        ice.objectPoseRobot = new Pose(objectPoseRobot);
-        ice.objectPoseGlobal = new Pose(objectPoseGlobal);
-        ice.objectPoseOriginal = new Pose(objectPoseOriginal);
+        armarx::toIce(ice.objectPoseRobot, objectPoseRobot);
+        objpose::toIce(ice.objectPoseRobotCovariance, objectPoseRobotCovariance);
+
+        armarx::toIce(ice.objectPoseGlobal, objectPoseGlobal);
+        objpose::toIce(ice.objectPoseGlobalCovariance, objectPoseGlobalCovariance);
+
+        armarx::toIce(ice.objectPoseOriginal, objectPoseOriginal);
         ice.objectPoseOriginalFrame = objectPoseOriginalFrame;
+        objpose::toIce(ice.objectPoseOriginalCovariance, objectPoseOriginalCovariance);
+
         ice.objectJointValues = objectJointValues;
 
         ice.robotConfig = robotConfig;
@@ -88,15 +99,20 @@ namespace armarx::objpose
         isStatic = provided.isStatic;
         armarx::fromIce(provided.objectID, objectID);
 
-        objectPoseOriginal = ::armarx::fromIce(provided.objectPose);
+        armarx::fromIce(provided.objectPose, objectPoseOriginal);
+        objpose::fromIce(provided.objectPoseCovariance, objectPoseOriginalCovariance);
         objectPoseOriginalFrame = provided.objectPoseFrame;
+
         objectJointValues = provided.objectJointValues;
 
         armarx::FramedPose framed(objectPoseOriginal, objectPoseOriginalFrame, robot->getName());
         framed.changeFrame(robot, robot->getRootNode()->getName());
         objectPoseRobot = framed.toEigen();
+        objectPoseRobotCovariance = std::nullopt;  // ToDo: Transform covariance matrices
+
         framed.changeToGlobal(robot);
         objectPoseGlobal = framed.toEigen();
+        objectPoseGlobalCovariance = std::nullopt;  // ToDo: Transform covariance matrices
 
         robotConfig = robot->getConfig()->getRobotNodeJointValueMap();
         robotPose = robot->getGlobalPose();
@@ -174,6 +190,7 @@ namespace armarx::objpose
         robotPose = agent->getGlobalPose();
         robotConfig = agent->getConfig()->getRobotNodeJointValueMap();
     }
+
 }
 
 
@@ -211,7 +228,6 @@ namespace armarx
         return info;
     }
 
-
     void objpose::toIce(data::ObjectAttachmentInfo& ice, const ObjectAttachmentInfo& attachment)
     {
         ice.agentName = attachment.agentName;
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
index ca5754aa0dff87780e913f7c255bf2b9067e2258..8bcd7b52e71dfb84197fedf73c2cae68cd5e5f78 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPose.h
@@ -8,13 +8,17 @@
 #include <Eigen/Core>
 
 #include <SimoxUtility/shapes/OrientedBox.h>
+
 #include <VirtualRobot/VirtualRobot.h>
-#include "ArmarXCore/core/PackagePath.h"
+
+#include <ArmarXCore/core/PackagePath.h>
 
 #include <IceUtil/Time.h>
 
 #include <RobotAPI/interface/objectpose/object_pose_types.h>
+#include <RobotAPI/libraries/ArmarXObjects/forward_declarations.h>
 #include <RobotAPI/libraries/ArmarXObjects/ObjectID.h>
+#include <RobotAPI/libraries/ArmarXObjects/PoseCovariance.h>
 
 
 namespace armarx::objpose
@@ -33,6 +37,8 @@ namespace armarx::objpose
      */
     struct ObjectPose
     {
+    public:
+
         ObjectPose();
         ObjectPose(const data::ObjectPose& ice);
 
@@ -47,6 +53,8 @@ namespace armarx::objpose
         void setObjectPoseGlobal(const Eigen::Matrix4f& objectPoseGlobal, bool updateObjectPoseRobot = true);
 
 
+    public:
+
         /// Name of the providing component.
         std::string providerName;
         /// Known or unknown object.
@@ -58,9 +66,14 @@ namespace armarx::objpose
         armarx::ObjectID objectID;
 
         Eigen::Matrix4f objectPoseRobot;
+        std::optional<PoseCovariance> objectPoseRobotCovariance;
+
         Eigen::Matrix4f objectPoseGlobal;
+        std::optional<PoseCovariance> objectPoseGlobalCovariance;
+
         Eigen::Matrix4f objectPoseOriginal;
         std::string objectPoseOriginalFrame;
+        std::optional<PoseCovariance> objectPoseOriginalCovariance;
 
         /// The object's joint values if it is articulated.
         std::map<std::string, float> objectJointValues;
@@ -102,8 +115,6 @@ namespace armarx::objpose
         std::optional<PackagePath> articulatedSimoxXmlPath;
 
     };
-    using ObjectPoseSeq = std::vector<ObjectPose>;
-    using ObjectPoseMap = std::map<ObjectID, ObjectPose>;
 
 
     void fromIce(const data::ObjectAttachmentInfo& ice, ObjectAttachmentInfo& attachment);