diff --git a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp
index d1e48cdea6aa941033225c291e50a3da312f9475..a4525305d6e0e73fef7e58d9b6c83f04a957c520 100644
--- a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp
+++ b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp
@@ -50,8 +50,8 @@
 namespace armarx::articulated_object
 {
     ArticulatedObjectLocalizerExample::ArticulatedObjectLocalizerExample() :
-        articulatedObjectWriter(new ::armarx::armem::articulated_object::Writer(*this)),
-        articulatedObjectReader(new ::armarx::armem::articulated_object::Reader(*this)) {}
+        articulatedObjectWriter(new ::armarx::armem::articulated_object::Writer(memoryNameSystem)),
+        articulatedObjectReader(new ::armarx::armem::articulated_object::Reader(memoryNameSystem)) {}
 
     armarx::PropertyDefinitionsPtr ArticulatedObjectLocalizerExample::createPropertyDefinitions()
     {
diff --git a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
index 87a2b7030613e8e4d8ebe8a95bb5c316235652f1..76e8cff37853683592ede4d13a473d10bceca4d7 100644
--- a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
+++ b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
@@ -76,7 +76,8 @@ namespace armarx
         ARMARX_IMPORTANT << "Waiting for memory '" << p.usedMemoryName << "' ...";
         try
         {
-            armem::client::ComponentPluginUser::setMemoryServer(memoryNameSystem.useServer(p.usedMemoryName));
+            memoryReader = memoryNameSystem.useReader(p.usedMemoryName);
+            memoryWriter = memoryNameSystem.useWriter(p.usedMemoryName);
         }
         catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
diff --git a/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp b/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp
index 85ca85f48ca62c7bc686bd9286d52fae5480ebc7..6650e573785cce732f0f2bbe7c128aa34fc58626 100644
--- a/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp
+++ b/source/RobotAPI/components/armem/client/VirtualRobotReaderExampleClient/VirtualRobotReaderExampleClient.cpp
@@ -31,7 +31,7 @@
 namespace armarx::robot_state
 {
     VirtualRobotReaderExampleClient::VirtualRobotReaderExampleClient() :
-        virtualRobotReader(*this) {}
+        virtualRobotReader(this->memoryNameSystem) {}
 
     armarx::PropertyDefinitionsPtr VirtualRobotReaderExampleClient::createPropertyDefinitions()
     {
diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 22399191b3ec0ad3e87468f615662fefdf8e7dd9..97695cb636128cea00e129ddf71e6ff41da626dd 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -168,6 +168,7 @@ set(LIB_HEADERS
     client/Writer.h
     client/WriterComponentPlugin.h
 
+    client/query.h
     client/Query.h
     client/query/Builder.h
     client/query/query_fns.h
diff --git a/source/RobotAPI/libraries/armem/client.h b/source/RobotAPI/libraries/armem/client.h
index baf0ca232e5447048939aa062ee122a1d4f936b2..834d62ab45d88d18e4277929c47acd55c5825263 100644
--- a/source/RobotAPI/libraries/armem/client.h
+++ b/source/RobotAPI/libraries/armem/client.h
@@ -1,6 +1,8 @@
 #pragma once
 
 #include "client/ComponentPlugin.h"
+#include "client/MemoryNameSystem.h"
+#include "client/MemoryNameSystemComponentPlugin.h"
 #include "client/Query.h"
 #include "client/query/Builder.h"
 #include "client/query/query_fns.h"
diff --git a/source/RobotAPI/libraries/armem/client/query.h b/source/RobotAPI/libraries/armem/client/query.h
new file mode 100644
index 0000000000000000000000000000000000000000..99606089e06952dd2f5006b628c69f3644acd674
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/client/query.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "Query.h"
+#include "query/Builder.h"
+#include "query/query_fns.h"
+#include "query/selectors.h"
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
index d11b7421313e4586e4347b31c9f8c79c09f169f5..1457fc466ae12031d22482703c0037787c6d0a62 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
@@ -3,14 +3,15 @@
 #include <mutex>
 #include <optional>
 
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/PackagePath.h>
 
-#include "RobotAPI/libraries/armem/client/query/Builder.h"
-#include "RobotAPI/libraries/armem/core/Time.h"
-#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h"
-#include "RobotAPI/libraries/armem_robot/aron_conversions.h"
-#include "RobotAPI/libraries/armem_robot/robot_conversions.h"
+#include <RobotAPI/libraries/armem/client/query/Builder.h>
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/core/Time.h>
+#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 
 namespace fs = ::std::filesystem;
@@ -18,7 +19,9 @@ namespace fs = ::std::filesystem;
 namespace armarx::armem::articulated_object
 {
 
-    Reader::Reader(armem::ClientReaderComponentPluginUser& component) : component(component) {}
+    Reader::Reader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem)
+    {}
 
     void Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
     {
@@ -41,17 +44,17 @@ namespace armarx::armem::articulated_object
     {
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "Reader: Waiting for memory '" << properties.memoryName << "' ...";
-        auto result = component.useMemory(properties.memoryName);
-        if (not result.success)
+        try
         {
-            ARMARX_ERROR << result.errorMessage;
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
+        {
+            ARMARX_ERROR << e.what();
             return;
         }
 
-        ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName;
-
-        memoryReader.setReadingMemory(result.proxy);
-
         armem::MemoryID id = armem::MemoryID();
         id.memoryName      = properties.memoryName;
         id.coreSegmentName = properties.coreClassSegmentName;
@@ -321,4 +324,4 @@ namespace armarx::armem::articulated_object
         return descriptions;
     }
 
-} // namespace armarx::armem::articulated_object
\ No newline at end of file
+} // namespace armarx::armem::articulated_object
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
index 21a4591cd2f1f5c9a125177e50285b3802f561b9..b4c908a3629e7dbecaddeb668dd95442be33a310 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.h
@@ -24,18 +24,21 @@
 #include <mutex>
 #include <optional>
 
-#include "RobotAPI/libraries/armem/client.h"
-#include "RobotAPI/libraries/armem/client/Reader.h"
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/Reader.h>
 
 #include "interfaces.h"
 
+
 namespace armarx::armem::articulated_object
 {
     class Reader:
         virtual public ReaderInterface
     {
     public:
-        Reader(armem::ClientReaderComponentPluginUser& component);
+        Reader(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~Reader() = default;
 
         void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def);
@@ -72,11 +75,11 @@ namespace armarx::armem::articulated_object
 
         const std::string propertyPrefix = "mem.obj.articulated.";
 
+        armem::client::MemoryNameSystem memoryNameSystem;
+
         armem::client::Reader memoryReader;
         std::mutex memoryWriterMutex;
-
-        armem::ClientReaderComponentPluginUser& component;
     };
 
 
-}  // namespace armarx::armem::articulated_object
\ No newline at end of file
+}  // namespace armarx::armem::articulated_object
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
index 9062747de124ac3db5ba37e3f14f2b8cdfc7b692..d74c8d86593df0f7d5a3ee5617403a1ccd1cc769 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
@@ -5,20 +5,24 @@
 #include <mutex>
 #include <optional>
 
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/logging/Logging.h>
 
-#include "RobotAPI/libraries/armem/core/MemoryID.h"
-#include "RobotAPI/libraries/armem_objects/aron_conversions.h"
-#include "RobotAPI/libraries/armem_robot/aron_conversions.h"
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/client/query.h>
+#include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 #include <RobotAPI/libraries/armem/core/aron_conversions.h>
-#include "RobotAPI/libraries/armem_robot/robot_conversions.h"
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 
 
 namespace armarx::armem::articulated_object
 {
-    Writer::Writer(armem::ClientComponentPluginUser& component): component(component) {}
+    Writer::Writer(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem)
+    {}
 
     void Writer::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
     {
@@ -41,18 +45,18 @@ namespace armarx::armem::articulated_object
     {
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "Writer: Waiting for memory '" << properties.memoryName << "' ...";
-        auto result = component.useMemory(properties.memoryName);
-        if (not result.success)
+        try
+        {
+            memoryWriter = memoryNameSystem.useWriter(properties.memoryName);
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
-            ARMARX_ERROR << result.errorMessage;
+            ARMARX_ERROR << e.what();
             return;
         }
 
-        ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName;
-
-        memoryWriter.setWritingMemory(result.proxy);
-        memoryReader.setReadingMemory(result.proxy);
-
         const auto resultCoreClassSegment = memoryWriter.addSegment(properties.coreClassSegmentName, properties.providerName);
 
         const auto resultCoreInstanceSegmentName =
@@ -323,4 +327,4 @@ namespace armarx::armem::articulated_object
     }
 
 
-} // namespace armarx::armem::articulated_object
\ No newline at end of file
+} // namespace armarx::armem::articulated_object
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
index f2031dd402e546a21a80a17c28f8b2e4107f9059..d9ce15069e8fe2e23f8f841a38323d66e0080d19 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.h
@@ -23,9 +23,11 @@
 
 #include <mutex>
 
-#include "RobotAPI/libraries/armem/client/Reader.h"
-#include "RobotAPI/libraries/armem/client/Writer.h"
-#include "RobotAPI/libraries/armem/client.h"
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/Reader.h>
+#include <RobotAPI/libraries/armem/client/Writer.h>
 
 #include "interfaces.h"
 
@@ -37,7 +39,7 @@ namespace armarx::armem::articulated_object
         virtual public WriterInterface
     {
     public:
-        Writer(armem::ClientComponentPluginUser& component);
+        Writer(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~Writer() = default;
 
 
@@ -77,6 +79,8 @@ namespace armarx::armem::articulated_object
 
         const std::string propertyPrefix = "mem.obj.articulated.";
 
+        armem::client::MemoryNameSystem memoryNameSystem;
+
         armem::client::Writer memoryWriter;
         std::mutex memoryWriterMutex;
 
@@ -85,9 +89,7 @@ namespace armarx::armem::articulated_object
 
         // key: name of object: RobotDescription::name
         std::unordered_map<std::string, MemoryID> knownObjects;
-
-        armem::ClientComponentPluginUser& component;
     };
 
 
-}  // namespace armarx::armem::articulated_object
\ No newline at end of file
+}  // namespace armarx::armem::articulated_object
diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp
index e3ce169b9ef41292b7ad565f94b74faf141ee7ad..64d8003fb7fe06dd8bd819f71bcbfc97357f6929 100644
--- a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.cpp
@@ -3,19 +3,21 @@
 #include <mutex>
 #include <optional>
 
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/PackagePath.h>
 
-#include "RobotAPI/libraries/armem/core/Time.h"
-#include "RobotAPI/libraries/armem/client/query/Builder.h"
-#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h"
-#include "RobotAPI/libraries/armem/util/util.h"
-#include "RobotAPI/libraries/armem_robot/robot_conversions.h"
-#include "RobotAPI/libraries/armem_robot/aron_conversions.h"
+#include <RobotAPI/libraries/armem/core/Time.h>
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/client/query/Builder.h>
+#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h>
+#include <RobotAPI/libraries/armem/util/util.h>
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron/Attachment.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron_conversions.h>
-#include "RobotAPI/libraries/aron/common/aron_conversions.h"
+#include <RobotAPI/libraries/aron/common/aron_conversions.h>
+
 
 namespace armarx::armem::attachment
 {
@@ -72,7 +74,9 @@ namespace armarx::armem::attachment
         }
     }  // namespace
 
-    Reader::Reader(armem::ClientReaderComponentPluginUser& component) : component(component) {}
+    Reader::Reader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem)
+    {}
 
     void Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
     {
@@ -92,16 +96,16 @@ namespace armarx::armem::attachment
     {
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "Reader: Waiting for memory '" << properties.memoryName << "' ...";
-        auto result = component.useMemory(properties.memoryName);
-        if (not result.success)
+        try
+        {
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
-            ARMARX_ERROR << result.errorMessage;
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "Reader: Connected to memory '" << properties.memoryName;
-
-        memoryReader.setReadingMemory(result.proxy);
     }
 
 
@@ -207,4 +211,4 @@ namespace armarx::armem::attachment
 
 
 
-}  // namespace armarx::armem::attachment
\ No newline at end of file
+}  // namespace armarx::armem::attachment
diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h
index bcfb3d1a135a2446f255a0038a2aaad85c2a3412..9149cbd5a52aedc03cea2a1af8482883637960cb 100644
--- a/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h
+++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Reader.h
@@ -24,16 +24,19 @@
 #include <mutex>
 #include <optional>
 
-#include "RobotAPI/libraries/armem/client.h"
-#include "RobotAPI/libraries/armem/client/Reader.h"
-#include "RobotAPI/libraries/armem_objects/types.h"
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/Reader.h>
+#include <RobotAPI/libraries/armem_objects/types.h>
+
 
 namespace armarx::armem::attachment
 {
     class Reader
     {
     public:
-        Reader(armem::ClientReaderComponentPluginUser& component);
+        Reader(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~Reader() = default;
 
         void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def);
@@ -56,11 +59,10 @@ namespace armarx::armem::attachment
 
         const std::string propertyPrefix = "mem.obj.attachment.";
 
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Reader memoryReader;
         std::mutex memoryWriterMutex;
-
-        armem::ClientReaderComponentPluginUser& component;
     };
 
 
-}  // namespace armarx::armem::attachment
\ No newline at end of file
+}  // namespace armarx::armem::attachment
diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp
index f4d16070b84e4d29aca1742ce0356fb0c69ea5b0..dc520d22601308fd780a09448f69c2a82d8f1948 100644
--- a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.cpp
@@ -5,20 +5,23 @@
 #include <mutex>
 #include <optional>
 
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/logging/Logging.h>
 
-#include "RobotAPI/libraries/armem/core/MemoryID.h"
-#include "RobotAPI/libraries/armem_objects/aron_conversions.h"
-#include "RobotAPI/libraries/armem_robot/aron_conversions.h"
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 #include <RobotAPI/libraries/armem/core/aron_conversions.h>
-#include "RobotAPI/libraries/armem_robot/robot_conversions.h"
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 
 
 namespace armarx::armem::attachment
 {
-    Writer::Writer(armem::ClientComponentPluginUser& component): component(component) {}
+    Writer::Writer(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem)
+    {}
 
     void Writer::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
     {
@@ -38,17 +41,17 @@ namespace armarx::armem::attachment
     {
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "Writer: Waiting for memory '" << properties.memoryName << "' ...";
-        auto result = component.useMemory(properties.memoryName);
-        if (not result.success)
+        try
+        {
+            memoryWriter = memoryNameSystem.useWriter(properties.memoryName);
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
-            ARMARX_ERROR << result.errorMessage;
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName;
-
-        memoryWriter.setWritingMemory(result.proxy);
-        memoryReader.setReadingMemory(result.proxy);
     }
 
 
@@ -141,4 +144,4 @@ namespace armarx::armem::attachment
 
 
 
-}  // namespace armarx::armem::attachment
\ No newline at end of file
+}  // namespace armarx::armem::attachment
diff --git a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h
index f20421d4b27d9e2fc10e106e238a9684fca9d2cf..df85beca85be4523f2010a9c0b743517aae297a4 100644
--- a/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h
+++ b/source/RobotAPI/libraries/armem_objects/client/attachment/Writer.h
@@ -23,13 +23,14 @@
 
 #include <mutex>
 
-#include "RobotAPI/libraries/armem/client/Reader.h"
-#include "RobotAPI/libraries/armem/client/Writer.h"
-#include "RobotAPI/libraries/armem/client.h"
+#include <RobotAPI/libraries/armem/client/Reader.h>
+#include <RobotAPI/libraries/armem/client/Writer.h>
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 
-#include "RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h"
+#include <RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h>
+
+#include <RobotAPI/libraries/armem_objects/types.h>
 
-#include "RobotAPI/libraries/armem_objects/types.h"
 
 namespace armarx::armem::attachment
 {
@@ -37,7 +38,7 @@ namespace armarx::armem::attachment
     class Writer
     {
     public:
-        Writer(armem::ClientComponentPluginUser& component);
+        Writer(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~Writer() = default;
 
 
@@ -60,14 +61,14 @@ namespace armarx::armem::attachment
 
         const std::string propertyPrefix = "mem.obj.articulated.";
 
+        armem::client::MemoryNameSystem memoryNameSystem;
+
         armem::client::Writer memoryWriter;
         std::mutex memoryWriterMutex;
 
         armem::client::Reader memoryReader;
         std::mutex memoryReaderMutex;
-
-        armem::ClientComponentPluginUser& component;
     };
 
 
-}  // namespace armarx::armem::attachment
\ No newline at end of file
+}  // namespace armarx::armem::attachment
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
index fd8250c5b2b086f3869729e2bf6836e5e3c5dc32..a2394a26a15e6059005b30f634e3cbdbb9e83cf2 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp
@@ -37,6 +37,7 @@
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/client/query/selectors.h>
 
+#include <RobotAPI/libraries/armem/core/error.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/Memory.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h>
@@ -52,9 +53,10 @@
 namespace armarx::armem
 {
 
-    MappingDataReader::MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient)
-        : memoryClient(memoryClient) {}
-
+    MappingDataReader::MappingDataReader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem)
+    {
+    }
     MappingDataReader::~MappingDataReader() = default;
 
     void MappingDataReader::registerPropertyDefinitions(
@@ -74,19 +76,18 @@ namespace armarx::armem
     void MappingDataReader::connect()
     {
         // Wait for the memory to become available and add it as dependency.
-        ARMARX_IMPORTANT << "TransformReader: Waiting for memory '"
+        ARMARX_IMPORTANT << "MappingDataReader: Waiting for memory '"
                          << properties.memoryName << "' ...";
-        auto result = memoryClient.useMemory(properties.memoryName);
-        if (not result.success)
+        try
         {
-            ARMARX_ERROR << result.errorMessage;
+            memoryReader = memoryNameSystem.useReader(MemoryID().withMemoryName(properties.memoryName));
+            ARMARX_IMPORTANT << "MappingDataReader: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
+        {
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "TransformReader: Connected to memory '"
-                         << properties.memoryName;
-
-        memoryReader.setReadingMemory(result.proxy);
     }
 
     armem::client::query::Builder
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
index aee783764f4b5720e4ae0d8d69fbf6faed297e98..39332417b0ff92fa7aa6149209d768c549bc03fc 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h
@@ -30,6 +30,7 @@
 #include <RobotAPI/libraries/armem/client.h>
 #include <RobotAPI/libraries/armem/client/Reader.h>
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem_robot_mapping/types.h>
 
 
@@ -62,8 +63,8 @@ namespace armarx::armem
     class MappingDataReader
     {
     public:
-        MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient);
 
+        MappingDataReader(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~MappingDataReader();
 
         void connect();
@@ -107,6 +108,7 @@ namespace armarx::armem
 
     private:
 
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Reader memoryReader;
 
         // Properties
@@ -118,8 +120,6 @@ namespace armarx::armem
 
 
         const std::string propertyPrefix = "mem.mapping.";
-
-        armem::ClientReaderComponentPluginUser& memoryClient;
     };
 
 }  // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
index 351d71398a6959f346aadf45c6c604edcd865a53..82a365295236041f9bc457eaf34acc237f81ce18 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp
@@ -1,14 +1,15 @@
 #include "MappingDataWriter.h"
 
-#include "RobotAPI/libraries/armem_robot_mapping/aron_conversions.h"
+#include <RobotAPI/libraries/armem_robot_mapping/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot_mapping/aron/LaserScan.aron.generated.h>
+#include <RobotAPI/libraries/armem/core/error.h>
 
 
 namespace armarx::armem
 {
 
-    MappingDataWriter::MappingDataWriter(armem::ClientWriterComponentPluginUser& component)
-        : component(component) {}
+    MappingDataWriter::MappingDataWriter(const armem::client::MemoryNameSystem& memoryNameSystem)
+        : memoryNameSystem(memoryNameSystem) {}
 
     MappingDataWriter::~MappingDataWriter() = default;
 
@@ -30,16 +31,16 @@ namespace armarx::armem
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "MappingDataWriter: Waiting for memory '" << properties.memoryName
                          << "' ...";
-        auto result = component.useMemory(properties.memoryName);
-        if (not result.success)
+        try
         {
-            ARMARX_ERROR << result.errorMessage;
+            memoryWriter = memoryNameSystem.useWriter(MemoryID().withMemoryName(properties.memoryName));
+            ARMARX_IMPORTANT << "MappingDataWriter: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
+        {
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName;
-
-        memoryWriter.setWritingMemory(result.proxy);
     }
 
 
@@ -93,4 +94,4 @@ namespace armarx::armem
         return updateResult.success;
     }
 
-} // namespace armarx::armem
\ No newline at end of file
+} // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
index e5de996746b7d54b46faa891cf2cd26007fbaf02..c7d8ba57719bf7d6004040d6487aa5cc32c5a621 100644
--- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h
@@ -24,10 +24,12 @@
 
 #include <mutex>
 
+#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+
 #include <RobotAPI/interface/units/LaserScannerUnit.h>
 
 #include <RobotAPI/libraries/armem/client/Writer.h>
-#include <RobotAPI/libraries/armem/client.h>
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 
 
 namespace armarx::armem
@@ -47,7 +49,8 @@ namespace armarx::armem
     class MappingDataWriter
     {
     public:
-        MappingDataWriter(armem::ClientWriterComponentPluginUser& component);
+
+        MappingDataWriter(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~MappingDataWriter();
 
         void connect();
@@ -62,6 +65,7 @@ namespace armarx::armem
         bool storeSensorData(const LaserScan& laserScan, const std::string& frame, const std::string& agentName, const std::int64_t& timestamp);
 
     private:
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Writer memoryWriter;
 
         // Properties
@@ -75,8 +79,6 @@ namespace armarx::armem
 
 
         const std::string propertyPrefix = "mem.mapping.";
-
-        armem::ClientWriterComponentPluginUser& component;
     };
 
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
index 2d8319dc9f6517c41e9a38225ad4dbd11b9ae607..07fa4333c37a80b52569d1c54e3e4e843b13e4ef 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
@@ -3,25 +3,27 @@
 #include <mutex>
 #include <optional>
 
-#include "ArmarXCore/core/exceptions/LocalException.h"
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/exceptions/LocalException.h>
+#include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/PackagePath.h>
 
-#include "RobotAPI/libraries/armem/client/query/Builder.h"
-#include "RobotAPI/libraries/armem/core/Time.h"
-#include "RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h"
-#include "RobotAPI/libraries/armem_robot/aron_conversions.h"
-#include "RobotAPI/libraries/armem_robot/robot_conversions.h"
+#include <RobotAPI/libraries/armem/client/query/Builder.h>
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/core/Time.h>
+#include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h>
 
+
 namespace fs = ::std::filesystem;
 
 namespace armarx::armem::robot_state
 {
 
-    RobotReader::RobotReader(armem::ClientReaderComponentPluginUser& component) :
-        memoryClient(component), transformReader(component)
+    RobotReader::RobotReader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem), transformReader(memoryNameSystem)
     {
     }
 
@@ -42,16 +44,16 @@ namespace armarx::armem::robot_state
 
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "RobotReader: Waiting for memory '" << properties.memoryName << "' ...";
-        auto result = memoryClient.useMemory(properties.memoryName);
-        if (not result.success)
+        try
+        {
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "RobotReader: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
-            ARMARX_ERROR << result.errorMessage;
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "RobotReader: Connected to memory '" << properties.memoryName;
-
-        memoryReader.setReadingMemory(result.proxy);
     }
 
     std::optional<robot::Robot> RobotReader::get(const std::string& name,
@@ -327,4 +329,4 @@ namespace armarx::armem::robot_state
         return robot::convertRobotDescription(instance);
     }
 
-} // namespace armarx::armem::robot_state
\ No newline at end of file
+} // namespace armarx::armem::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
index b5bd01e5d182a88cc6d36e8c8112e1683c017d16..9847996cd08621f20e7e35276f5141ff0589f20c 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h
@@ -24,13 +24,14 @@
 #include <mutex>
 #include <optional>
 
-#include "RobotAPI/libraries/armem/client.h"
-#include "RobotAPI/libraries/armem/client/Reader.h"
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/Reader.h>
 
-#include "RobotAPI/libraries/armem_robot/client/interfaces.h"
-#include "RobotAPI/libraries/armem_robot/types.h"
+#include <RobotAPI/libraries/armem_robot/client/interfaces.h>
+#include <RobotAPI/libraries/armem_robot/types.h>
+
+#include <RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h>
 
-#include "RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h"
 
 namespace armarx::armem::robot_state
 {
@@ -43,7 +44,7 @@ namespace armarx::armem::robot_state
     class RobotReader : virtual public robot::ReaderInterface
     {
     public:
-        RobotReader(armem::ClientReaderComponentPluginUser& component);
+        RobotReader(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~RobotReader() = default;
 
         void connect();
@@ -89,12 +90,11 @@ namespace armarx::armem::robot_state
 
         const std::string propertyPrefix = "mem.robot_state.";
 
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Reader memoryReader;
         std::mutex memoryWriterMutex;
 
-        armem::ClientReaderComponentPluginUser& memoryClient;
-
         client::robot_state::localization::TransformReader transformReader;
     };
 
-} // namespace armarx::armem::robot_state
\ No newline at end of file
+} // namespace armarx::armem::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
index a3655fee1ae2597b768424f0b89fd581a1bb0680..a59d7c6564e588a8f97a3b8d42b5538042567327 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp
@@ -14,8 +14,8 @@
 namespace armarx::armem::robot_state
 {
 
-    VirtualRobotReader::VirtualRobotReader(armem::ClientReaderComponentPluginUser& component) :
-        RobotReader(component)
+    VirtualRobotReader::VirtualRobotReader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        RobotReader(memoryNameSystem)
     {
     }
 
@@ -83,4 +83,4 @@ namespace armarx::armem::robot_state
     }
 
 
-} // namespace armarx::armem::robot_state
\ No newline at end of file
+} // namespace armarx::armem::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
index a280e71b6132f065aec28a008ebb5ab803845dad..373cacf7bedee74c7174c7a5f31a47a4908f82e1 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h
@@ -27,6 +27,7 @@
 #include <VirtualRobot/VirtualRobot.h>
 #include <VirtualRobot/XML/RobotIO.h>
 
+
 namespace armarx::armem::robot_state
 {
     /**
@@ -40,7 +41,7 @@ namespace armarx::armem::robot_state
     class VirtualRobotReader : virtual public RobotReader
     {
     public:
-        VirtualRobotReader(armem::ClientReaderComponentPluginUser& component);
+        VirtualRobotReader(const armem::client::MemoryNameSystem& memoryNameSystem);
         virtual ~VirtualRobotReader() = default;
 
         void connect();
@@ -61,4 +62,4 @@ namespace armarx::armem::robot_state
                                  VirtualRobot::RobotIO::RobotDescription::eStructure);
     };
 
-} // namespace armarx::armem::robot_state
\ No newline at end of file
+} // namespace armarx::armem::robot_state
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
index 8a37b2dec14cfc6721b7458fce984dac59bdfb21..cdbfc5a366ca6c019bd0afa18d8af160243ec893 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
@@ -47,6 +47,7 @@
 // this package
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/client/query/query_fns.h>
+#include <RobotAPI/libraries/armem/core/error.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/Memory.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
@@ -61,7 +62,8 @@
 namespace armarx::armem::client::robot_state::localization
 {
 
-    TransformReader::TransformReader(armem::ClientReaderComponentPluginUser& memoryClient) : memoryClient(memoryClient) {}
+    TransformReader::TransformReader(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem) {}
 
     TransformReader::~TransformReader() = default;
 
@@ -83,16 +85,16 @@ namespace armarx::armem::client::robot_state::localization
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "TransformReader: Waiting for memory '" << properties.memoryName
                          << "' ...";
-        auto result = memoryClient.useMemory(properties.memoryName);
-        if (not result.success)
+        try
         {
-            ARMARX_ERROR << result.errorMessage;
+            memoryReader = memoryNameSystem.useReader(properties.memoryName);
+            ARMARX_IMPORTANT << "TransformReader: Connected to memory '" << properties.memoryName;
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
+        {
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "TransformReader: Connected to memory '" << properties.memoryName;
-
-        memoryReader.setReadingMemory(result.proxy);
     }
 
     TransformResult TransformReader::getGlobalPose(const std::string& agentName,
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
index 2d1d98ddf82c5c137b934b3be91079bb87298503..14186e55199f89ad0bb5ea1222200cf2fc85120a 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.h
@@ -22,10 +22,9 @@
 
 #pragma once
 
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem/client/Reader.h>
 
-#include <RobotAPI/libraries/armem/client.h>
-
 #include "interfaces.h"
 
 namespace armarx::armem::client::robot_state::localization
@@ -45,7 +44,7 @@ namespace armarx::armem::client::robot_state::localization
         virtual public TransformReaderInterface
     {
     public:
-        TransformReader(armem::ClientReaderComponentPluginUser& memoryClient);
+        TransformReader(const armem::client::MemoryNameSystem& memoryNameSystem);
 
         ~TransformReader() override;
 
@@ -61,6 +60,7 @@ namespace armarx::armem::client::robot_state::localization
 
     private:
 
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Reader memoryReader;
 
         // Properties
@@ -72,8 +72,5 @@ namespace armarx::armem::client::robot_state::localization
 
 
         const std::string propertyPrefix = "mem.robot_state.";
-
-        armem::ClientReaderComponentPluginUser& memoryClient;
-
     };
 }  // namespace armarx::armem::client::robot_state::localization
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
index 2327c141840bc74f8b43ab14df03b03f2b98ccdf..87f9ac31d7161f6e53ec877c94bae9dcb15ac048 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.cpp
@@ -46,14 +46,16 @@
 
 #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/aron_conversions.h>
-#include "RobotAPI/libraries/armem/core/MemoryID.h"
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
+#include <RobotAPI/libraries/armem/core/error.h>
 
 
 
 namespace armarx::armem::client::robot_state::localization
 {
 
-    TransformWriter::TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient) : memoryClient(memoryClient) {}
+    TransformWriter::TransformWriter(const armem::client::MemoryNameSystem& memoryNameSystem) :
+        memoryNameSystem(memoryNameSystem) {}
 
     TransformWriter::~TransformWriter() = default;
 
@@ -73,16 +75,16 @@ namespace armarx::armem::client::robot_state::localization
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "TransformWriter: Waiting for memory '" << properties.memoryName
                          << "' ...";
-        auto result = memoryClient.useMemory(properties.memoryName);
-        if (not result.success)
+        try
         {
-            ARMARX_ERROR << result.errorMessage;
+            memoryWriter = memoryNameSystem.useWriter(properties.memoryName);
+            ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName << "'";
+        }
+        catch (const armem::error::CouldNotResolveMemoryServer& e)
+        {
+            ARMARX_ERROR << e.what();
             return;
         }
-
-        ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName;
-
-        memoryWriter.setWritingMemory(result.proxy);
     }
 
     bool TransformWriter::commitTransform(const ::armarx::armem::robot_state::Transform& transform)
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
index 0402d8188e52b9a967805a7ddb9ca5df9c14320c..d0895f3b8957d56548100f9544fdb7e282416a5a 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformWriter.h
@@ -24,13 +24,12 @@
 
 #include <mutex>
 
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem/client/Writer.h>
-// #include <RobotAPI/libraries/armem/client/MemoryConnector.h>
-
-#include <RobotAPI/libraries/armem/client.h>
 
 #include "interfaces.h"
 
+
 namespace armarx::armem::client::robot_state::localization
 {
 
@@ -49,8 +48,8 @@ namespace armarx::armem::client::robot_state::localization
         virtual public TransformWriterInterface
     {
     public:
-        TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient);
 
+        TransformWriter(const armem::client::MemoryNameSystem& memoryNameSystem);
         ~TransformWriter() override;
 
         // TransformWriterInterface
@@ -63,6 +62,8 @@ namespace armarx::armem::client::robot_state::localization
         bool commitTransform(const ::armarx::armem::robot_state::Transform& transform) override;
 
     private:
+
+        armem::client::MemoryNameSystem memoryNameSystem;
         armem::client::Writer memoryWriter;
         std::mutex memoryWriterMutex;
 
@@ -74,8 +75,6 @@ namespace armarx::armem::client::robot_state::localization
         } properties;
 
         const std::string propertyPrefix = "mem.robot_state.";
-
-        armem::ClientWriterComponentPluginUser& memoryClient;
     };
 
 }  // namespace armarx::armem::client::robot_state::localization