From af2f811c784be575a9c2595d738caf7ca6b841da Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Thu, 10 Jun 2021 11:35:57 +0200
Subject: [PATCH] Update client reader/writers

---
 .../ArticulatedObjectLocalizerExample.cpp     |  4 +-
 .../ExampleMemoryClient.cpp                   |  3 +-
 .../VirtualRobotReaderExampleClient.cpp       |  2 +-
 .../RobotAPI/libraries/armem/CMakeLists.txt   |  1 +
 source/RobotAPI/libraries/armem/client.h      |  2 +
 .../RobotAPI/libraries/armem/client/query.h   |  6 +++
 .../client/articulated_object/Reader.cpp      | 33 ++++++++--------
 .../client/articulated_object/Reader.h        | 15 +++++---
 .../client/articulated_object/Writer.cpp      | 34 +++++++++--------
 .../client/articulated_object/Writer.h        | 16 ++++----
 .../client/attachment/Reader.cpp              | 38 ++++++++++---------
 .../armem_objects/client/attachment/Reader.h  | 16 ++++----
 .../client/attachment/Writer.cpp              | 33 ++++++++--------
 .../armem_objects/client/attachment/Writer.h  | 19 +++++-----
 .../armem_robot_mapping/MappingDataReader.cpp | 25 ++++++------
 .../armem_robot_mapping/MappingDataReader.h   |  6 +--
 .../armem_robot_mapping/MappingDataWriter.cpp | 23 +++++------
 .../armem_robot_mapping/MappingDataWriter.h   | 10 +++--
 .../client/common/RobotReader.cpp             | 36 +++++++++---------
 .../client/common/RobotReader.h               | 18 ++++-----
 .../client/common/VirtualRobotReader.cpp      |  6 +--
 .../client/common/VirtualRobotReader.h        |  5 ++-
 .../client/localization/TransformReader.cpp   | 18 +++++----
 .../client/localization/TransformReader.h     |  9 ++---
 .../client/localization/TransformWriter.cpp   | 20 +++++-----
 .../client/localization/TransformWriter.h     | 11 +++---
 26 files changed, 224 insertions(+), 185 deletions(-)
 create mode 100644 source/RobotAPI/libraries/armem/client/query.h

diff --git a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp
index d1e48cdea..a4525305d 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 87a2b7030..76e8cff37 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 85ca85f48..6650e5737 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 22399191b..97695cb63 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 baf0ca232..834d62ab4 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 000000000..99606089e
--- /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 d11b74213..1457fc466 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 21a4591cd..b4c908a36 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 9062747de..d74c8d865 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 f2031dd40..d9ce15069 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 e3ce169b9..64d8003fb 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 bcfb3d1a1..9149cbd5a 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 f4d16070b..dc520d226 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 f20421d4b..df85beca8 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 fd8250c5b..a2394a26a 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 aee783764..39332417b 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 351d71398..82a365295 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 e5de99674..c7d8ba577 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 2d8319dc9..07fa4333c 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 b5bd01e5d..9847996cd 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 a3655fee1..a59d7c656 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 a280e71b6..373cacf7b 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 8a37b2dec..cdbfc5a36 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 2d1d98ddf..14186e551 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 2327c1418..87f9ac31d 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 0402d8188..d0895f3b8 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
-- 
GitLab