diff --git a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
index 1559cd1cd6e29dc17397c48f20848759620a39d9..14343e6b918853b7b5e36ca4cb07789d8ece238f 100644
--- a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
+++ b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
@@ -20,6 +20,7 @@ namespace armarx::armem::client
 
 
     MemoryNameSystem::MemoryNameSystem(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component) :
+        util::MemoryListener(component),
         mns(mns), component(component)
     {
     }
@@ -28,7 +29,7 @@ namespace armarx::armem::client
     void MemoryNameSystem::initialize(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component)
     {
         this->mns = mns;
-        this->component = component;
+        setComponent(component);
     }
 
 
@@ -407,8 +408,10 @@ namespace armarx::armem::client
         this->mns = mns;
     }
 
+
     void MemoryNameSystem::setComponent(ManagedIceObject* component)
     {
+        util::MemoryListener::setComponent(component);
         this->component = component;
     }
 
diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp
index 463c6443e11ddd0ec92d6c5bb4b1001e4e97dfed..96126b71241148187068990a18e61776cef5ba4a 100644
--- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp
+++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp
@@ -14,8 +14,9 @@ namespace armarx::armem::client::plugins
 
     void ListeningPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties)
     {
+        // This is now done by the client::util::MemoryListener class on subscription of a memory ID.
         // Subscribe topics by single servers, use this as a prefix.
-        properties->topic<MemoryListenerInterface>("MemoryUpdates");
+        // properties->topic<MemoryListenerInterface>("MemoryUpdates");
     }
 
 }
diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp
index 3a40a9ffe27b1116fe5a78f5d1a3088652818b38..95eed974f77513f9186aed0d8b2633394b73f3be 100644
--- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp
+++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp
@@ -26,4 +26,3 @@ namespace armarx::armem::client::plugins
     }
 
 }
-
diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp
index a4aa21483fa16ddf471466ec6c1f2ba6da0d8bce..c8a7c6c683467194d6e2248edc0e5be57d3b547b 100644
--- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp
+++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp
@@ -5,6 +5,7 @@
 #include <ArmarXCore/core/exceptions/LocalException.h>
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h>
+#include <ArmarXCore/core/ManagedIceObject.h>
 
 #include <RobotAPI/libraries/armem/core/ice_conversions.h>
 #include <RobotAPI/libraries/armem/core/error.h>
@@ -13,8 +14,21 @@
 namespace armarx::armem::client::util
 {
 
-    MemoryListener::MemoryListener()
+    std::string MemoryListener::MakeMemoryTopicName(const MemoryID& memoryID)
     {
+        return "MemoryUpdates." + memoryID.memoryName;
+    }
+
+
+    MemoryListener::MemoryListener(ManagedIceObject* component) :
+        component(component)
+    {
+    }
+
+
+    void MemoryListener::setComponent(ManagedIceObject* component)
+    {
+        this->component = component;
     }
 
 
@@ -109,6 +123,10 @@ namespace armarx::armem::client::util
     MemoryListener::subscribe(const MemoryID& id, Callback callback)
     {
         callbacks[id].push_back(callback);
+        if (component)
+        {
+            component->usingTopic(MakeMemoryTopicName(id));
+        }
     }
 
 
diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h
index 2d530097ce6394ddcf4cc815f8e44f93e057d916..ceb765e60db13404fbe170900342cff554b3affe 100644
--- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h
+++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h
@@ -11,6 +11,12 @@
 #include <RobotAPI/libraries/armem/core/MemoryID.h>
 
 
+
+namespace armarx
+{
+    class ManagedIceObject;
+}
+
 namespace armarx::armem::client::util
 {
 
@@ -20,6 +26,7 @@ namespace armarx::armem::client::util
      */
     class MemoryListener
     {
+    public:
 
         using Callback = std::function<void(const MemoryID& subscriptionID, const std::vector<MemoryID>& updatedSnapshotIDs)>;
         using CallbackUpdatedOnly = std::function<void(const std::vector<MemoryID>& updatedSnapshotIDs)>;
@@ -29,11 +36,14 @@ namespace armarx::armem::client::util
         template <class CalleeT>
         using MemberCallbackUpdatedOnly = void(CalleeT::*)(const std::vector<MemoryID>& updatedSnapshotIDs);
 
+        static std::string MakeMemoryTopicName(const MemoryID& memoryID);
+
 
     public:
 
-        MemoryListener();
+        MemoryListener(ManagedIceObject* component = nullptr);
 
+        void setComponent(ManagedIceObject* component);
 
         void subscribe(const MemoryID& subscriptionID, Callback Callback);
         void subscribe(const MemoryID& subscriptionID, CallbackUpdatedOnly Callback);
@@ -73,6 +83,10 @@ namespace armarx::armem::client::util
 
         std::unordered_map<MemoryID, std::vector<Callback>> callbacks;
 
+    private:
+
+        armarx::ManagedIceObject* component;
+
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
index 2b2e744a426898c575ce9468b5fcd64d3e3d7673..1400107eaa926207ce2cc7b1a07f508897038c88 100644
--- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
+++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
@@ -123,7 +123,7 @@ namespace armarx::armem::server
         armem::Commit commit;
         try
         {
-            fromIce(commitIce, commit, timeArrived);
+            ::armarx::armem::fromIce(commitIce, commit, timeArrived);
         }
         catch (const aron::error::AronNotValidException& e)
         {
diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp
index 298983e478fbc03f5ec6187e9394da128e2a5171..40d22cead44dea33a993364415ea6cbe59d6413a 100644
--- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp
+++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp
@@ -1,6 +1,7 @@
 #include "Plugin.h"
 
 #include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/client/util/MemoryListener.h>
 #include <RobotAPI/libraries/armem/client/plugins/Plugin.h>
 
 #include <ArmarXCore/core/Component.h>
@@ -37,9 +38,13 @@ namespace armarx::armem::server::plugins
             properties->optional(longtermMemory.enabled, prefix + "ltm.enabled");
         }
         longtermMemory.createPropertyDefinitions(properties, prefix + "ltm.");
+    }
+
 
-        // Publish memory updates topic
-        properties->topic(memoryTopic, memoryTopicDefaultName);
+    void Plugin::preOnInitComponent()
+    {
+        memoryTopicName = client::util::MemoryListener::MakeMemoryTopicName(MemoryID(workingMemory.name()));
+        parent().offeringTopic(memoryTopicName);
     }
 
 
@@ -52,6 +57,7 @@ namespace armarx::armem::server::plugins
         {
             registerServer(parent);
         }
+        parent.getTopic(memoryTopic, memoryTopicName);
         iceAdapter.setMemoryListener(memoryTopic);
     }
 
diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h
index 8a5a68934003997a9588117ecc985f2fa9dfe456..dcbe7adc4c3b519a55da2b234f6f3b28338fd74f 100644
--- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h
+++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h
@@ -33,6 +33,7 @@ namespace armarx::armem::server::plugins
 
         virtual void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
 
+        virtual void preOnInitComponent() override;
         virtual void postOnConnectComponent() override;
         virtual void preOnDisconnectComponent() override;
 
@@ -74,7 +75,9 @@ namespace armarx::armem::server::plugins
 
         // Working Memory Updates (publishing)
 
-        std::string memoryTopicDefaultName = "MemoryUpdates";
+        /// Available at onInit().
+        std::string memoryTopicName;
+        /// Available after onConnect().
         client::MemoryListenerInterfacePrx memoryTopic;