diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp
index a6b0afcdd5b61d39917be0b440c440472f31af79..474423c079562ff4e1d653d3322f94297717b37a 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp
@@ -542,6 +542,22 @@ namespace armarx
     }
 
 
+    objpose::AgentFramesSeq ObjectPoseObserver::getAttachableFrames(const Ice::Current&)
+    {
+        std::scoped_lock lock(dataMutex);
+
+        objpose::AgentFramesSeq output;
+        std::vector<VirtualRobot::RobotPtr> agents = { robot };
+        for (VirtualRobot::RobotPtr agent : agents)
+        {
+            objpose::AgentFrames& frames = output.emplace_back();
+            frames.agent = agent->getName();
+            frames.frames = agent->getRobotNodeNames();
+        }
+        return output;
+    }
+
+
 
     void ObjectPoseObserver::handleProviderUpdate(const std::string& providerName)
     {
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h
index ad7d2e3de5016685a58e2a65f1921b59cf16d2c7..a9db3aeeb213a101179accccd0fa4ffaad4da10e 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h
+++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h
@@ -88,28 +88,30 @@ namespace armarx
         // ObjectPoseObserverInterface interface
     public:
 
-        // READING
+        // OBJECT POSES
 
         objpose::data::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override;
         objpose::data::ObjectPoseSeq getObjectPosesByProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
 
-        Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override;
+        // PROVIDER INFORMATION
+
+        bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
         objpose::ProviderInfo getProviderInfo(const std::string& providerName, ICE_CURRENT_ARG) override;
+        Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override;
         objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override;
-        bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
 
 
-        // MODIFICATION
+        // REQUESTING
 
         objpose::observer::RequestObjectsOutput requestObjects(const objpose::observer::RequestObjectsInput& input, ICE_CURRENT_ARG) override;
 
+        // ATTACHING
+
         objpose::AttachObjectToRobotNodeOutput attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input, ICE_CURRENT_ARG) override;
         objpose::DetachObjectFromRobotNodeOutput detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input, ICE_CURRENT_ARG) override;
         objpose::DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(ICE_CURRENT_ARG) override;
 
-
-        //Ice::Int getUpdateCounterByProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
-        //StringIntDictionary getAllUpdateCounters(ICE_CURRENT_ARG) override;
+        objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override;
 
 
         // Remote GUI
diff --git a/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice b/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice
index 9004c2afcc900c2f0a35d1134f1d100d551ff0ad..602043ab3b17e3afbdfbbd87b835dda80f264f29 100644
--- a/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice
+++ b/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice
@@ -97,21 +97,33 @@ module armarx
             int numDetached;
         };
 
+        struct AgentFrames
+        {
+            string agent;
+            Ice::StringSeq frames;
+        };
+        sequence<AgentFrames> AgentFramesSeq;
+
         interface ObjectPoseObserverInterface extends ObserverInterface, ObjectPoseTopic
         {
-            // Reading
+            // Object poses
+
             data::ObjectPoseSeq getObjectPoses();
             data::ObjectPoseSeq getObjectPosesByProvider(string providerName);
 
+            // Provider information
+
             bool hasProvider(string providerName);
             Ice::StringSeq getAvailableProviderNames();
             ProviderInfoMap getAvailableProvidersInfo();
             ProviderInfo getProviderInfo(string providerName);
 
+            // Requesting
 
-            // Modifying
             observer::RequestObjectsOutput requestObjects(observer::RequestObjectsInput input);
 
+            // Attaching
+
             /// Attach an object to a robot node.
             AttachObjectToRobotNodeOutput attachObjectToRobotNode(AttachObjectToRobotNodeInput input);
             /// Detach an attached object from a robot node.
@@ -119,6 +131,8 @@ module armarx
             /// Detach all objects from robot nodes.
             DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes();
 
+            AgentFramesSeq getAttachableFrames();
+
         };
     };