diff --git a/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp b/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp
index 43f32295717ff031d2ac9b6f54184c21b8c60e73..6359111c24ef51d35360ff8def6853f9fdae55ae 100644
--- a/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp
+++ b/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp
@@ -70,7 +70,9 @@ namespace armarx
 
         while (objectProcessingTask && !objectProcessingTask->isStopped())
         {
-            const objpose::ObjectPoseSeq objectPoses = ObjectPoseClient::getObjectPoses();
+            // This client can be copied to other classes to give them access to the object pose storage.
+            objpose::ObjectPoseClient client = getClient();
+            const objpose::ObjectPoseSeq objectPoses = client.fetchObjectPoses();
 
             ARMARX_VERBOSE << "Received poses of " << objectPoses.size() << " objects.";
 
diff --git a/source/RobotAPI/libraries/ArmarXObjects/Scene.h b/source/RobotAPI/libraries/ArmarXObjects/Scene.h
index a4cc41d80b5fccc87b1e9d871808c685ce332401..635ff62897e54f669f3c01ca3879666332f6a0a8 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/Scene.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/Scene.h
@@ -43,6 +43,7 @@ namespace armarx::objects
         Eigen::Vector3f position = Eigen::Vector3f::Zero();
         Eigen::Quaternionf orientation = Eigen::Quaternionf::Identity();
 
+        std::optional<bool> isStatic;
         std::map<std::string, float> jointValues;
 
         ObjectID getClassID() const;
diff --git a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp
index 617baca941ebb86be7e3b05ecac1e79efc23490c..161983900123a6848d2e667258236f2bd95aa33a 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp
@@ -79,31 +79,51 @@ void armarx::objpose::from_json(const nlohmann::json& j, ObjectPose& op)
 
 void armarx::objects::to_json(nlohmann::json& j, const SceneObject& rhs)
 {
-    //     j["instanceID"] = rhs.instanceID;
     j["class"] = rhs.className;
     j["instanceName"] = rhs.instanceName;
     j["collection"] = rhs.collection;
     j["position"] = rhs.position;
     j["orientation"] = rhs.orientation;
+    if (rhs.isStatic.has_value())
+    {
+        j["isStatic"] = rhs.isStatic.value();
+    }
     j["jointValues"] = rhs.jointValues;
 }
 
 
 void armarx::objects::from_json(const nlohmann::json& j, SceneObject& rhs)
 {
-    //     j.at("instanceID").get_to(rhs.instanceID);
     j.at("class").get_to(rhs.className);
     if (j.count("instanceName"))
     {
         j["instanceName"].get_to(rhs.instanceName);
     }
+    else
+    {
+        rhs.instanceName.clear();
+    }
     j.at("collection").get_to(rhs.collection);
     j.at("position").get_to(rhs.position);
     j.at("orientation").get_to(rhs.orientation);
+
+    if (j.count("isStatic"))
+    {
+        rhs.isStatic = j.at("isStatic").get<bool>();
+    }
+    else
+    {
+        rhs.isStatic = std::nullopt;
+    }
+
     if (j.count("jointValues"))
     {
         j.at("jointValues").get_to(rhs.jointValues);
     }
+    else
+    {
+        rhs.jointValues.clear();
+    }
 }
 
 
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
index 485715690f3fdbfe089f3557582bae86ef7210ad..9f0d717489ab6012f1a812e1a1ad1c3f8499ead5 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
@@ -936,7 +936,8 @@ namespace armarx::armem::server::obj::instance
 
             pose.providerName = sceneName;
             pose.objectType = objpose::ObjectType::KnownObject;
-            pose.isStatic = true;  // Objects loaded from prior knowledge are considerd static to exclude them from decay.
+            // If not specified, assume loaded objects are static.
+            pose.isStatic = object.isStatic.has_value() ? object.isStatic.value() : true;
             pose.objectID = classID.withInstanceName(
                                 object.instanceName.empty()
                                 ? std::to_string(idCounters[classID]++)