diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
index 6aef209e68f06d66eae2a5a9a94fde6d084e04bd..ca1aab83a67594f3d66f129aa475afdb2adc6147 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.cpp
@@ -2,43 +2,48 @@
 
 #include <ArmarXCore/core/Component.h>
 
-
 namespace armarx::plugins
 {
 
-    void ObjectPoseProviderPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties)
+    void
+    ObjectPoseProviderPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties)
     {
         if (!properties->hasDefinition(makePropertyName(PROPERTY_NAME)))
         {
             properties->defineOptionalProperty<std::string>(
-                makePropertyName(PROPERTY_NAME),
-                "ObjectPoseTopic",
-                "Name of the object pose topic.");
+                makePropertyName(PROPERTY_NAME), "ObjectMemory", "Name of the object memory.");
         }
     }
 
-    void ObjectPoseProviderPlugin::preOnInitComponent()
+    void
+    ObjectPoseProviderPlugin::preOnInitComponent()
     {
-        parent<Component>().offeringTopicFromProperty(makePropertyName(PROPERTY_NAME));
+        parent<Component>().usingProxyFromProperty(makePropertyName(PROPERTY_NAME));
     }
 
-    void ObjectPoseProviderPlugin::preOnConnectComponent()
+    void
+    ObjectPoseProviderPlugin::preOnConnectComponent()
     {
-        parent<ObjectPoseProviderPluginUser>().objectPoseTopic = createObjectPoseTopic();
+        parent<ObjectPoseProviderPluginUser>().objectPoseTopic =
+            parent<Component>().getProxyFromProperty<objpose::ObjectPoseStorageInterfacePrx>(
+                makePropertyName(PROPERTY_NAME));
     }
 
-    void ObjectPoseProviderPlugin::postOnConnectComponent()
+    void
+    ObjectPoseProviderPlugin::postOnConnectComponent()
     {
-        ObjectPoseProviderPluginUser& parent = this->parent<ObjectPoseProviderPluginUser>();
-        objpose::ObjectPoseTopicPrx& topic = parent.objectPoseTopic;
-        if (topic)
+        auto& parent = this->parent<ObjectPoseProviderPluginUser>();
+        if (parent.objectPoseTopic)
         {
             objpose::ProviderInfo info = parent.getProviderInfo();
             if (!info.proxy)
             {
-                info.proxy = ::armarx::objpose::ObjectPoseProviderPrx::checkedCast(parent.getProxy());
+                info.proxy =
+                    ::armarx::objpose::ObjectPoseProviderPrx::checkedCast(parent.getProxy());
             }
-            topic->reportProviderAvailable(parent.getName(), info);
+
+            ARMARX_INFO << "Reporting provider `" << parent.getName() << "` availability.";
+            parent.objectPoseTopic->reportProviderAvailable(parent.getName(), info);
         }
         else
         {
@@ -46,13 +51,7 @@ namespace armarx::plugins
         }
     }
 
-    objpose::ObjectPoseTopicPrx ObjectPoseProviderPlugin::createObjectPoseTopic()
-    {
-        return parent<Component>().getTopicFromProperty<objpose::ObjectPoseTopicPrx>(makePropertyName(PROPERTY_NAME));
-    }
-
-}
-
+} // namespace armarx::plugins
 
 namespace armarx
 {
@@ -62,7 +61,10 @@ namespace armarx
         addPlugin(plugin);
     }
 
-    objpose::provider::RequestObjectsOutput ObjectPoseProviderPluginUser::requestObjects(const objpose::provider::RequestObjectsInput& input, const Ice::Current&)
+    objpose::provider::RequestObjectsOutput
+    ObjectPoseProviderPluginUser::requestObjects(
+        const objpose::provider::RequestObjectsInput& input,
+        const Ice::Current&)
     {
         // ARMARX_INFO << "Requested " << input.objectIDs.size() << " objects for " << input.relativeTimeoutMS << " ms.";
         objpose::provider::RequestObjectsOutput output;
@@ -73,9 +75,5 @@ namespace armarx
         return output;
     }
 
-    objpose::ObjectPoseTopicPrx ObjectPoseProviderPluginUser::createObjectPoseTopic()
-    {
-        return plugin->createObjectPoseTopic();
-    }
 
-}
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
index 1d0191ed6c32cc912efcb683155d465bdbfa0ff2..6e7fd2ebb28c330c81ec378acc3eb218329e4fb5 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseProviderPlugin.h
@@ -3,7 +3,7 @@
 #include <ArmarXCore/core/ComponentPlugin.h>
 
 #include <RobotAPI/interface/objectpose/ObjectPoseProvider.h>
-
+#include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h>
 
 namespace armarx::plugins
 {
@@ -11,7 +11,6 @@ namespace armarx::plugins
     class ObjectPoseProviderPlugin : public ComponentPlugin
     {
     public:
-
         using ComponentPlugin::ComponentPlugin;
 
         void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
@@ -20,17 +19,12 @@ namespace armarx::plugins
         void preOnConnectComponent() override;
         void postOnConnectComponent() override;
 
-        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
-
-
     private:
-
-        static constexpr const char* PROPERTY_NAME = "ObjectPoseTopicName";
+        static constexpr const char* PROPERTY_NAME = "ObjectMemoryName";
 
     };
 
-}
-
+} // namespace armarx::plugins
 
 #include <ArmarXCore/core/ManagedIceObject.h>
 
@@ -41,24 +35,22 @@ namespace armarx
      * @brief Provides an `objpose::ObjectPoseTopicPrx objectPoseTopic` as member variable.
      */
     class ObjectPoseProviderPluginUser :
-        virtual public ManagedIceObject
-        , virtual public objpose::ObjectPoseProvider
+        virtual public ManagedIceObject,
+        virtual public objpose::ObjectPoseProvider
     {
     public:
-
         ObjectPoseProviderPluginUser();
 
         /// Implement to process object requests (empty default implementation).
-        objpose::provider::RequestObjectsOutput requestObjects(const objpose::provider::RequestObjectsInput& input, const Ice::Current&) override;
-
-        objpose::ObjectPoseTopicPrx createObjectPoseTopic();
+        objpose::provider::RequestObjectsOutput
+        requestObjects(const objpose::provider::RequestObjectsInput& input,
+                       const Ice::Current&) override;
 
-        objpose::ObjectPoseTopicPrx objectPoseTopic;
+        // objpose::ObjectPoseStorageInterfacePrx createObjectPoseStorage();
 
+        objpose::ObjectPoseStorageInterfacePrx objectPoseTopic;
 
     private:
-
         armarx::plugins::ObjectPoseProviderPlugin* plugin = nullptr;
-
     };
-}
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
index 3eb3e1bf3bb51703214dbb107a60ac46c96486dd..818a04491c9d6f3d3d520c4f64d8ffdc40011d7c 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
@@ -32,6 +32,7 @@
 
 #include "ArmarXCore/core/time/Clock.h"
 #include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h>
+#include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/time/CycleUtil.h>
 #include <ArmarXCore/core/time/ice_conversions.h>
 #include <ArmarXCore/observers/variant/Variant.h>
@@ -110,6 +111,7 @@ namespace armarx::armem::server::obj::instance
 
     void SegmentAdapter::reportProviderAvailable(const std::string& providerName, const objpose::ProviderInfo& info, const Ice::Current&)
     {
+        ARMARX_IMPORTANT << "Provider `" << providerName << "` is (now) available."; 
         updateProviderInfo(providerName, info);
     }
 
@@ -266,6 +268,8 @@ namespace armarx::armem::server::obj::instance
     objpose::observer::RequestObjectsOutput SegmentAdapter::requestObjects(
         const objpose::observer::RequestObjectsInput& input, const Ice::Current&)
     {
+        ARMARX_INFO << "Requesting objects ...";
+
         std::map<std::string, objpose::provider::RequestObjectsInput> providerRequests;
         std::map<std::string, objpose::ObjectPoseProviderPrx> proxies;
 
@@ -287,7 +291,7 @@ namespace armarx::armem::server::obj::instance
             }
         };
 
-        if (input.provider.size() > 0)
+        if (not input.provider.empty())
         {
             providerRequests[input.provider] = input.request;
             updateProxy(input.provider);
@@ -296,6 +300,9 @@ namespace armarx::armem::server::obj::instance
         {
             segment.doLocked([&]()
             {
+
+                ARMARX_INFO << "Known providers are: " << simox::alg::get_keys(segment.providers);
+
                 for (const auto& objectID : input.request.objectIDs)
                 {
                     bool found = true;
@@ -304,6 +311,8 @@ namespace armarx::armem::server::obj::instance
                         // ToDo: optimize look up.
                         if (std::find(info.supportedObjects.begin(), info.supportedObjects.end(), objectID) != info.supportedObjects.end())
                         {
+                            ARMARX_INFO << "Found provider for " << objectID << ": " << providerName;
+                            providerRequests[providerName].relativeTimeoutMS = input.request.relativeTimeoutMS;
                             providerRequests[providerName].objectIDs.push_back(objectID);
                             updateProxy(providerName);
                             break;
@@ -318,6 +327,8 @@ namespace armarx::armem::server::obj::instance
             });
         }
 
+        ARMARX_INFO << VAROUT(simox::alg::get_keys(providerRequests));
+
         for (const auto& [providerName, request] : providerRequests)
         {
             if (objpose::ObjectPoseProviderPrx proxy = proxies.at(providerName); proxy)