diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d684da402ca704e30e1d7219a24accd0e5f1742..100538b7b7a1e37d867cadf03cd1c6fe8240bb39 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,6 +17,9 @@ set(ARMARX_ENABLE_AUTO_CODE_FORMATTING TRUE)
 armarx_project("RobotAPI")
 depends_on_armarx_package(ArmarXGui)
 
+find_package(DMP QUIET)
+
+
 add_subdirectory(source)
 
 install_project()
diff --git a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/CMakeLists.txt b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/CMakeLists.txt
index 9340296c089e80e1be44039534555519936551ba..7f3ad39c47742664118f7f4de02a32d6d85aa8a2 100644
--- a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/CMakeLists.txt
@@ -9,7 +9,9 @@ armarx_add_component(
     LIBS
         ArmarXCore ArmarXCoreInterfaces  # for DebugObserverInterface
         ArmarXGuiComponentPlugins
-        RobotAPICore RobotAPIInterfaces armem armem_robot_state
+        RobotAPICore RobotAPIInterfaces
+        RobotAPI::armem
+        armem_robot_state
 )
 
 #generate the application
diff --git a/source/RobotAPI/components/armem/client/ExampleMemoryClient/CMakeLists.txt b/source/RobotAPI/components/armem/client/ExampleMemoryClient/CMakeLists.txt
index 667e5d5ad070e08f331d505fa4e742ce61b39df7..b9434aeb6575293b01482473f3467403e969ab86 100644
--- a/source/RobotAPI/components/armem/client/ExampleMemoryClient/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/client/ExampleMemoryClient/CMakeLists.txt
@@ -7,7 +7,9 @@ armarx_build_if(OpenCV_FOUND "OpenCV not available")
 set(COMPONENT_LIBS
     ArmarXCore ArmarXCoreInterfaces  # for DebugObserverInterface
     ArmarXGuiComponentPlugins
-    RobotAPICore RobotAPIInterfaces armem aronopencvconverter aronjsonconverter
+    RobotAPICore RobotAPIInterfaces
+    armem
+    aronopencvconverter aronjsonconverter
 
     ${OpenCV_LIBRARIES}
 )
diff --git a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
index eae52c5054369e599acebfa5378075b7a448d6e5..d5ffd4c911804296d10c756577b3c573b3174235 100644
--- a/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
+++ b/source/RobotAPI/components/armem/client/ExampleMemoryClient/ExampleMemoryClient.cpp
@@ -597,7 +597,6 @@ namespace armarx
 
         if (tab.queryResult)
         {
-            tab.queryResultGroup = armem::server::MemoryRemoteGui().makeGroupBox(*tab.queryResult);
         }
 
         VBoxLayout root = {tab.queryResultGroup, VSpacer()};
diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/ExampleMemory/CMakeLists.txt
index de9b660b2175a34c4cd3aeb90152370f222ceb11..b1a5224421ff0147e3fd990c5c17917334dd61a9 100644
--- a/source/RobotAPI/components/armem/server/ExampleMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/ExampleMemory/CMakeLists.txt
@@ -6,7 +6,8 @@ armarx_build_if(OpenCV_FOUND "OpenCV not available")
 set(COMPONENT_LIBS
     ArmarXCore ArmarXCoreInterfaces  # for DebugObserverInterface
     ArmarXGuiComponentPlugins
-    RobotAPICore RobotAPIInterfaces armem
+    RobotAPICore RobotAPIInterfaces
+    armem_server
 )
 
 set(SOURCES
diff --git a/source/RobotAPI/components/armem/server/GeneralPurposeMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/GeneralPurposeMemory/CMakeLists.txt
index f0521043e0891a4b42b3fd75e612b607b3e421aa..278e9c29a43c0d8d42de5d512b128354481d89b9 100644
--- a/source/RobotAPI/components/armem/server/GeneralPurposeMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/GeneralPurposeMemory/CMakeLists.txt
@@ -4,7 +4,7 @@ armarx_component_set_name("GeneralPurposeMemory")
 set(COMPONENT_LIBS
     ArmarXCore ArmarXCoreInterfaces  # for DebugObserverInterface
     ArmarXGuiComponentPlugins
-    RobotAPICore RobotAPIInterfaces armem
+    RobotAPICore RobotAPIInterfaces armem_server
     # RobotAPIComponentPlugins  # for ArViz and other plugins
 
     ${IVT_LIBRARIES}
diff --git a/source/RobotAPI/components/armem/server/GraspMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/GraspMemory/CMakeLists.txt
index 7bac572cd11bae463d2349529691f2ff5d6b79b2..6f09f46f79512819800b879bbd7701677fde1118 100644
--- a/source/RobotAPI/components/armem/server/GraspMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/GraspMemory/CMakeLists.txt
@@ -4,7 +4,7 @@ armarx_component_set_name("GraspMemory")
 set(COMPONENT_LIBS
     ArmarXCore ArmarXCoreInterfaces  # for DebugObserverInterface
     ArmarXGuiComponentPlugins
-    RobotAPICore RobotAPIInterfaces armem
+    RobotAPICore RobotAPIInterfaces armem_server
     RobotAPIComponentPlugins  # for ArViz and other plugins
 
     ${IVT_LIBRARIES}
diff --git a/source/RobotAPI/components/armem/server/MotionMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/MotionMemory/CMakeLists.txt
index 4b9a866f9c3be383e589ba9e0bafbc60368f0f57..2762e4152f4a3711b4d49fd8022ef5f5a90bcbe4 100644
--- a/source/RobotAPI/components/armem/server/MotionMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/MotionMemory/CMakeLists.txt
@@ -7,21 +7,20 @@ armarx_add_component(
         ArmarXGuiComponentPlugins
         RobotAPICore
         RobotAPIInterfaces
-        RobotAPI::ArMem
-        RobotAPI::ArMemMotions
-        RobotAPI::armem_mps
+        RobotAPI::armem_server
+        RobotAPI::armem_motions_server
+        RobotAPI::armem_mps_server
+
     SOURCES
         MotionMemory.cpp
+
     HEADERS
         MotionMemory.h
 )
 
 
 # add unit tests
-add_subdirectory(test)
+# add_subdirectory(test)
 
 #generate the application
 armarx_generate_and_add_component_executable()
-
-
-
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/ObjectMemory/CMakeLists.txt
index 1c90c244bf872fdc4931e0b9067a92c189d9b694..ac589f21a49e3b86f01d413b023dc3825fbf9f7c 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/CMakeLists.txt
@@ -8,7 +8,9 @@ set(COMPONENT_LIBS
     ArmarXGuiComponentPlugins
     # RobotAPI
     RobotAPI::ComponentPlugins
+    RobotAPI::armem_server
     RobotAPI::armem_objects
+    RobotAPI::armem_objects_server
 
     # This project
     ${PROJECT_NAME}Interfaces
diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/RobotStateMemory/CMakeLists.txt
index f49cb33c231a20857aa30458b4f7f5f14c05acdc..24c6616942f86aa4a6e828675db83f59b14aff72 100644
--- a/source/RobotAPI/components/armem/server/RobotStateMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/RobotStateMemory/CMakeLists.txt
@@ -10,8 +10,8 @@ set(COMPONENT_LIBS
     # RobotAPI
     RobotAPICore RobotAPIInterfaces
     RobotAPIComponentPlugins
-    armem
-    armem_robot_state
+    RobotAPI::armem_server
+    RobotAPI::armem_robot_state_server
 )
 
 set(SOURCES
diff --git a/source/RobotAPI/components/armem/server/SkillsMemory/CMakeLists.txt b/source/RobotAPI/components/armem/server/SkillsMemory/CMakeLists.txt
index eee41fad2917ac3689f98d103f1a927a0715d205..dda3d1f24a956c0d1882af2fea2ef056183abc96 100644
--- a/source/RobotAPI/components/armem/server/SkillsMemory/CMakeLists.txt
+++ b/source/RobotAPI/components/armem/server/SkillsMemory/CMakeLists.txt
@@ -4,7 +4,7 @@ armarx_component_set_name("SkillsMemory")
 set(COMPONENT_LIBS
     ArmarXCore ArmarXCoreInterfaces
     RobotAPICore RobotAPIInterfaces
-    armem armem_skills
+    armem_server armem_skills
 
     ${IVT_LIBRARIES}
 )
diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt
index 7ccd3c5dfe0ca69fc1dbb4f7b48cf854bdff8fa1..c449d1100f0ed75d7ccabe34e7ab6446b2996a1a 100644
--- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt
+++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt
@@ -22,7 +22,8 @@ set(GUI_UIS
 # Add more libraries you depend on here, e.g. ${QT_LIBRARIES}.
 set(COMPONENT_LIBS
     SimpleConfigDialog
-    armem armem_gui
+    RobotAPI::armem
+    RobotAPI::armem_gui
 )
 
 if(ArmarXGui_FOUND)
diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 18ddb34929d22aacf507a5a162ab65d30245d585..ba231f670b3342011fd228da611d2e9d1b8d87cc 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -3,26 +3,12 @@ set(LIB_NAME armem)
 armarx_component_set_name("${LIB_NAME}")
 armarx_set_target("Library: ${LIB_NAME}")
 
-SET(INSTALL_SCRIPT_MSG
-    "Please use the installation script in RobotAPI/etc/mongocxx to install libmongocxx and libbsoncxx."
-)
-
-find_package(libmongocxx QUIET)
-armarx_build_if(libmongocxx_FOUND "libmongocxx not available. ${INSTALL_SCRIPT_MSG}")
-find_package(libbsoncxx QUIET)
-armarx_build_if(libbsoncxx_FOUND "libbsoncxx not available. ${INSTALL_SCRIPT_MSG}")
-
 
 set(LIBS
-    ArmarXCoreInterfaces ArmarXCore
+    ArmarXCoreInterfaces
+    ArmarXCore
     RemoteGui
     aron
-
-    # Needed for LTM
-    RobotAPI::aron::converter::json
-    RobotAPI::aron::converter::opencv
-    ${LIBMONGOCXX_LIBRARIES}
-    ${LIBBSONCXX_LIBRARIES}
 )
 
 set(LIB_FILES
@@ -79,74 +65,6 @@ set(LIB_FILES
     client/query/Builder.cpp
     client/query/selectors.cpp
 
-
-    server/MemoryToIceAdapter.cpp
-    server/MemoryRemoteGui.cpp
-    server/RemoteGuiAronDataVisitor.cpp
-
-    server/ltm/base/detail/MemoryItem.cpp
-    server/ltm/base/detail/MemoryBase.cpp
-    server/ltm/base/detail/BufferedMemoryBase.cpp
-    server/ltm/base/detail/LUTMemoryBase.cpp
-    server/ltm/base/detail/CoreSegmentBase.cpp
-    server/ltm/base/detail/ProviderSegmentBase.cpp
-    server/ltm/base/detail/EntityBase.cpp
-    server/ltm/base/detail/EntitySnapshotBase.cpp
-
-    server/ltm/base/filter/Filter.cpp
-    server/ltm/base/filter/frequencyFilter/FrequencyFilter.cpp
-
-    server/ltm/base/extractor/Extractor.cpp
-    server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp
-    server/ltm/base/extractor/noExtractor/NoExtractor.cpp
-
-    server/ltm/base/converter/dict/Converter.cpp
-    server/ltm/base/converter/dict/json/JsonConverter.cpp
-    server/ltm/base/converter/dict/bson/BsonConverter.cpp
-    server/ltm/base/converter/image/Converter.cpp
-    server/ltm/base/converter/image/png/PngConverter.cpp
-
-    server/ltm/base/forgetter/Forgetter.cpp
-    server/ltm/base/forgetter/LRUForgetter/LRUForgetter.cpp
-
-    server/ltm/disk/detail/Data.cpp
-    server/ltm/disk/detail/DiskStorage.cpp
-    server/ltm/disk/Memory.cpp
-    server/ltm/disk/CoreSegment.cpp
-    server/ltm/disk/ProviderSegment.cpp
-    server/ltm/disk/Entity.cpp
-    server/ltm/disk/EntitySnapshot.cpp
-
-    server/wm/memory_definitions.cpp
-    server/wm/ice_conversions.cpp
-    server/wm/detail/MaxHistorySize.cpp
-
-    server/plugins/Plugin.cpp
-    server/plugins/ReadOnlyPluginUser.cpp
-    server/plugins/ReadWritePluginUser.cpp
-
-    server/segment/Segment.cpp
-    server/segment/SpecializedSegment.cpp
-
-    server/query_proc/base/BaseQueryProcessorBase.cpp
-    server/query_proc/base/EntityQueryProcessorBase.cpp
-    server/query_proc/base/ProviderSegmentQueryProcessorBase.cpp
-    server/query_proc/base/CoreSegmentQueryProcessorBase.cpp
-    server/query_proc/base/MemoryQueryProcessorBase.cpp
-
-    server/query_proc/ltm/detail/EntityQueryProcessorBase.cpp
-    server/query_proc/ltm/detail/ProviderSegmentQueryProcessorBase.cpp
-    server/query_proc/ltm/detail/CoreSegmentQueryProcessorBase.cpp
-    server/query_proc/ltm/detail/MemoryQueryProcessorBase.cpp
-    server/query_proc/ltm/disk/ltm.cpp
-
-    server/query_proc/wm/detail/EntityQueryProcessorBase.cpp
-    server/query_proc/wm/detail/ProviderSegmentQueryProcessorBase.cpp
-    server/query_proc/wm/detail/CoreSegmentQueryProcessorBase.cpp
-    server/query_proc/wm/detail/MemoryQueryProcessorBase.cpp
-    server/query_proc/wm/wm.cpp
-
-
     mns/MemoryNameSystem.cpp
     mns/Registry.cpp
     mns/plugins/Plugin.cpp
@@ -225,81 +143,7 @@ set(LIB_HEADERS
     client/util/SimpleReaderBase.h
     client/util/SimpleWriterBase.h
 
-
     server.h
-    server/forward_declarations.h
-
-    server/MemoryToIceAdapter.h
-    server/MemoryRemoteGui.h
-    server/RemoteGuiAronDataVisitor.h
-
-    server/ltm/base/detail/MemoryItem.h
-    server/ltm/base/detail/MemoryBase.h
-    server/ltm/base/detail/BufferedMemoryBase.h
-    server/ltm/base/detail/LUTMemoryBase.h
-    server/ltm/base/detail/CoreSegmentBase.h
-    server/ltm/base/detail/ProviderSegmentBase.h
-    server/ltm/base/detail/EntityBase.h
-    server/ltm/base/detail/EntitySnapshotBase.h
-
-    server/ltm/base/filter/Filter.h
-    server/ltm/base/filter/frequencyFilter/FrequencyFilter.h
-
-    server/ltm/base/extractor/Extractor.h
-    server/ltm/base/extractor/imageExtractor/ImageExtractor.h
-    server/ltm/base/extractor/noExtractor/NoExtractor.h
-
-    server/ltm/base/converter/dict/Converter.h
-    server/ltm/base/converter/dict/json/JsonConverter.h
-    server/ltm/base/converter/dict/bson/BsonConverter.h
-    server/ltm/base/converter/image/Converter.h
-    server/ltm/base/converter/image/png/PngConverter.h
-
-
-    server/ltm/base/forgetter/Forgetter.h
-    server/ltm/base/forgetter/LRUForgetter/LRUForgetter.h
-
-    server/ltm/disk/detail/Data.h
-    server/ltm/disk/detail/DiskStorage.h
-    server/ltm/disk/Memory.h
-    server/ltm/disk/CoreSegment.h
-    server/ltm/disk/ProviderSegment.h
-    server/ltm/disk/Entity.h
-    server/ltm/disk/EntitySnapshot.h
-
-    server/wm/memory_definitions.h
-    server/wm/ice_conversions.h
-    server/wm/detail/MaxHistorySize.h
-
-    server/plugins.h
-    server/plugins/Plugin.h
-    server/plugins/ReadOnlyPluginUser.h
-    server/plugins/ReadWritePluginUser.h
-
-    server/segment/Segment.h
-    server/segment/SpecializedSegment.h
-
-    server/query_proc.h
-
-    server/query_proc/base.h
-    server/query_proc/base/BaseQueryProcessorBase.h
-    server/query_proc/base/EntityQueryProcessorBase.h
-    server/query_proc/base/ProviderSegmentQueryProcessorBase.h
-    server/query_proc/base/CoreSegmentQueryProcessorBase.h
-    server/query_proc/base/MemoryQueryProcessorBase.h
-
-    server/query_proc/ltm/detail/EntityQueryProcessorBase.h
-    server/query_proc/ltm/detail/ProviderSegmentQueryProcessorBase.h
-    server/query_proc/ltm/detail/CoreSegmentQueryProcessorBase.h
-    server/query_proc/ltm/detail/MemoryQueryProcessorBase.h
-    server/query_proc/ltm/disk/ltm.h
-
-    server/query_proc/wm/detail/EntityQueryProcessorBase.h
-    server/query_proc/wm/detail/ProviderSegmentQueryProcessorBase.h
-    server/query_proc/wm/detail/CoreSegmentQueryProcessorBase.h
-    server/query_proc/wm/detail/MemoryQueryProcessorBase.h
-    server/query_proc/wm/wm.h
-
 
     mns.h
     mns/MemoryNameSystem.h
@@ -327,8 +171,7 @@ armarx_add_library(
 add_library(RobotAPI::armem ALIAS "${LIB_NAME}")
 add_library(RobotAPI::ArMem ALIAS "${LIB_NAME}")
 
-target_include_directories("${LIB_NAME}" PUBLIC ${LIBMONGOCXX_INCLUDE_DIRS})
-target_include_directories("${LIB_NAME}" PUBLIC ${LIBBSONCXX_INCLUDE_DIRS})
-
 # add unit tests
 add_subdirectory(test)
+
+add_subdirectory(server)
diff --git a/source/RobotAPI/libraries/armem/server/CMakeLists.txt b/source/RobotAPI/libraries/armem/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..00e51e9e99a1fb0b518f88e5685bfa7069dc8667
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/server/CMakeLists.txt
@@ -0,0 +1,194 @@
+set(LIB_NAME armem_server)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+SET(INSTALL_SCRIPT_MSG
+    "Please use the installation script in RobotAPI/etc/mongocxx to install libmongocxx and libbsoncxx."
+)
+
+find_package(libmongocxx QUIET)
+armarx_build_if(libmongocxx_FOUND "libmongocxx not available. ${INSTALL_SCRIPT_MSG}")
+find_package(libbsoncxx QUIET)
+armarx_build_if(libbsoncxx_FOUND "libbsoncxx not available. ${INSTALL_SCRIPT_MSG}")
+
+
+set(LIBS
+    ArmarXCoreInterfaces
+    ArmarXCore
+    RemoteGui
+    aron
+    RobotAPI::armem
+
+    # Needed for LTM
+    RobotAPI::aron::converter::json
+    RobotAPI::aron::converter::opencv
+    ${LIBMONGOCXX_LIBRARIES}
+    ${LIBBSONCXX_LIBRARIES}
+)
+
+set(LIB_FILES
+    MemoryToIceAdapter.cpp
+    MemoryRemoteGui.cpp
+    RemoteGuiAronDataVisitor.cpp
+
+    ltm/base/detail/MemoryItem.cpp
+    ltm/base/detail/MemoryBase.cpp
+    ltm/base/detail/BufferedMemoryBase.cpp
+    ltm/base/detail/LUTMemoryBase.cpp
+    ltm/base/detail/CoreSegmentBase.cpp
+    ltm/base/detail/ProviderSegmentBase.cpp
+    ltm/base/detail/EntityBase.cpp
+    ltm/base/detail/EntitySnapshotBase.cpp
+
+    ltm/base/filter/Filter.cpp
+    ltm/base/filter/frequencyFilter/FrequencyFilter.cpp
+
+    ltm/base/extractor/Extractor.cpp
+    ltm/base/extractor/imageExtractor/ImageExtractor.cpp
+    ltm/base/extractor/noExtractor/NoExtractor.cpp
+
+    ltm/base/converter/dict/Converter.cpp
+    ltm/base/converter/dict/json/JsonConverter.cpp
+    ltm/base/converter/dict/bson/BsonConverter.cpp
+    ltm/base/converter/image/Converter.cpp
+    ltm/base/converter/image/png/PngConverter.cpp
+
+    ltm/base/forgetter/Forgetter.cpp
+    ltm/base/forgetter/LRUForgetter/LRUForgetter.cpp
+
+    ltm/disk/detail/Data.cpp
+    ltm/disk/detail/DiskStorage.cpp
+    ltm/disk/Memory.cpp
+    ltm/disk/CoreSegment.cpp
+    ltm/disk/ProviderSegment.cpp
+    ltm/disk/Entity.cpp
+    ltm/disk/EntitySnapshot.cpp
+
+    wm/memory_definitions.cpp
+    wm/ice_conversions.cpp
+    wm/detail/MaxHistorySize.cpp
+
+    plugins/Plugin.cpp
+    plugins/ReadOnlyPluginUser.cpp
+    plugins/ReadWritePluginUser.cpp
+
+    segment/Segment.cpp
+    segment/SpecializedSegment.cpp
+
+    query_proc/base/BaseQueryProcessorBase.cpp
+    query_proc/base/EntityQueryProcessorBase.cpp
+    query_proc/base/ProviderSegmentQueryProcessorBase.cpp
+    query_proc/base/CoreSegmentQueryProcessorBase.cpp
+    query_proc/base/MemoryQueryProcessorBase.cpp
+
+    query_proc/ltm/detail/EntityQueryProcessorBase.cpp
+    query_proc/ltm/detail/ProviderSegmentQueryProcessorBase.cpp
+    query_proc/ltm/detail/CoreSegmentQueryProcessorBase.cpp
+    query_proc/ltm/detail/MemoryQueryProcessorBase.cpp
+    query_proc/ltm/disk/ltm.cpp
+
+    query_proc/wm/detail/EntityQueryProcessorBase.cpp
+    query_proc/wm/detail/ProviderSegmentQueryProcessorBase.cpp
+    query_proc/wm/detail/CoreSegmentQueryProcessorBase.cpp
+    query_proc/wm/detail/MemoryQueryProcessorBase.cpp
+    query_proc/wm/wm.cpp
+)
+
+set(LIB_HEADERS
+    forward_declarations.h
+
+    MemoryToIceAdapter.h
+    MemoryRemoteGui.h
+    RemoteGuiAronDataVisitor.h
+
+    ltm/base/detail/MemoryItem.h
+    ltm/base/detail/MemoryBase.h
+    ltm/base/detail/BufferedMemoryBase.h
+    ltm/base/detail/LUTMemoryBase.h
+    ltm/base/detail/CoreSegmentBase.h
+    ltm/base/detail/ProviderSegmentBase.h
+    ltm/base/detail/EntityBase.h
+    ltm/base/detail/EntitySnapshotBase.h
+
+    ltm/base/filter/Filter.h
+    ltm/base/filter/frequencyFilter/FrequencyFilter.h
+
+    ltm/base/extractor/Extractor.h
+    ltm/base/extractor/imageExtractor/ImageExtractor.h
+    ltm/base/extractor/noExtractor/NoExtractor.h
+
+    ltm/base/converter/dict/Converter.h
+    ltm/base/converter/dict/json/JsonConverter.h
+    ltm/base/converter/dict/bson/BsonConverter.h
+    ltm/base/converter/image/Converter.h
+    ltm/base/converter/image/png/PngConverter.h
+
+
+    ltm/base/forgetter/Forgetter.h
+    ltm/base/forgetter/LRUForgetter/LRUForgetter.h
+
+    ltm/disk/detail/Data.h
+    ltm/disk/detail/DiskStorage.h
+    ltm/disk/Memory.h
+    ltm/disk/CoreSegment.h
+    ltm/disk/ProviderSegment.h
+    ltm/disk/Entity.h
+    ltm/disk/EntitySnapshot.h
+
+    wm/memory_definitions.h
+    wm/ice_conversions.h
+    wm/detail/MaxHistorySize.h
+
+    plugins.h
+    plugins/Plugin.h
+    plugins/ReadOnlyPluginUser.h
+    plugins/ReadWritePluginUser.h
+
+    segment/Segment.h
+    segment/SpecializedSegment.h
+
+    query_proc.h
+
+    query_proc/base.h
+    query_proc/base/BaseQueryProcessorBase.h
+    query_proc/base/EntityQueryProcessorBase.h
+    query_proc/base/ProviderSegmentQueryProcessorBase.h
+    query_proc/base/CoreSegmentQueryProcessorBase.h
+    query_proc/base/MemoryQueryProcessorBase.h
+
+    query_proc/ltm/detail/EntityQueryProcessorBase.h
+    query_proc/ltm/detail/ProviderSegmentQueryProcessorBase.h
+    query_proc/ltm/detail/CoreSegmentQueryProcessorBase.h
+    query_proc/ltm/detail/MemoryQueryProcessorBase.h
+    query_proc/ltm/disk/ltm.h
+
+    query_proc/wm/detail/EntityQueryProcessorBase.h
+    query_proc/wm/detail/ProviderSegmentQueryProcessorBase.h
+    query_proc/wm/detail/CoreSegmentQueryProcessorBase.h
+    query_proc/wm/detail/MemoryQueryProcessorBase.h
+    query_proc/wm/wm.h
+)
+
+# Clear variable set by CMakeLists.txt in parent directory.
+set(ARON_FILES "")
+
+armarx_add_library(
+    LIB_NAME
+        "${LIB_NAME}"
+    SOURCES
+        "${LIB_FILES}"
+    HEADERS
+        "${LIB_HEADERS}"
+    LIBS
+        "${LIBS}"
+)
+
+
+add_library(RobotAPI::armem_server ALIAS "${LIB_NAME}")
+
+target_include_directories("${LIB_NAME}" PUBLIC ${LIBMONGOCXX_INCLUDE_DIRS})
+target_include_directories("${LIB_NAME}" PUBLIC ${LIBBSONCXX_INCLUDE_DIRS})
+
+# add unit tests
+add_subdirectory(test)
diff --git a/source/RobotAPI/libraries/armem/test/ArMemLTMBenchmark.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemLTMBenchmark.cpp
similarity index 100%
rename from source/RobotAPI/libraries/armem/test/ArMemLTMBenchmark.cpp
rename to source/RobotAPI/libraries/armem/server/test/ArMemLTMBenchmark.cpp
diff --git a/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp
similarity index 100%
rename from source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp
rename to source/RobotAPI/libraries/armem/server/test/ArMemLTMTest.cpp
diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp
similarity index 100%
rename from source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
rename to source/RobotAPI/libraries/armem/server/test/ArMemMemoryTest.cpp
diff --git a/source/RobotAPI/libraries/armem/test/ArMemQueryTest.cpp b/source/RobotAPI/libraries/armem/server/test/ArMemQueryTest.cpp
similarity index 100%
rename from source/RobotAPI/libraries/armem/test/ArMemQueryTest.cpp
rename to source/RobotAPI/libraries/armem/server/test/ArMemQueryTest.cpp
diff --git a/source/RobotAPI/libraries/armem/server/test/CMakeLists.txt b/source/RobotAPI/libraries/armem/server/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c8f646815ccd1838019cc74e2d2358451d8ec4c1
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/server/test/CMakeLists.txt
@@ -0,0 +1,8 @@
+
+# Libs required for the tests
+SET(LIBS ${LIBS} ArmarXCore ${LIB_NAME})
+
+armarx_add_test(ArMemLTMTest ArMemLTMTest.cpp "${LIBS}")
+armarx_add_test(ArMemLTMBenchmark ArMemLTMBenchmark.cpp "${LIBS}")
+armarx_add_test(ArMemMemoryTest ArMemMemoryTest.cpp "${LIBS}")
+armarx_add_test(ArMemQueryTest ArMemQueryTest.cpp "${LIBS}")
diff --git a/source/RobotAPI/libraries/armem/test/CMakeLists.txt b/source/RobotAPI/libraries/armem/test/CMakeLists.txt
index a80618cee37da7a0ab0e3198d8f9eda431964bfb..592b9aef3105bd7fc780c92348cae11e60f65a6d 100644
--- a/source/RobotAPI/libraries/armem/test/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/test/CMakeLists.txt
@@ -5,9 +5,5 @@ SET(LIBS ${LIBS} ArmarXCore ${LIB_NAME})
 armarx_add_test(ArMemForEachTest ArMemForEachTest.cpp "${LIBS}")
 armarx_add_test(ArMemGetFindTest ArMemGetFindTest.cpp "${LIBS}")
 armarx_add_test(ArMemIceConversionsTest ArMemIceConversionsTest.cpp "${LIBS}")
-armarx_add_test(ArMemLTMTest ArMemLTMTest.cpp "${LIBS}")
-armarx_add_test(ArMemLTMBenchmark ArMemLTMBenchmark.cpp "${LIBS}")
-armarx_add_test(ArMemMemoryTest ArMemMemoryTest.cpp "${LIBS}")
 armarx_add_test(ArMemMemoryIDTest ArMemMemoryIDTest.cpp "${LIBS}")
 armarx_add_test(ArMemQueryBuilderTest ArMemQueryBuilderTest.cpp "${LIBS}")
-armarx_add_test(ArMemQueryTest ArMemQueryTest.cpp "${LIBS}")
diff --git a/source/RobotAPI/libraries/armem_gui/CMakeLists.txt b/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
index 0f8462be52eb11c82bc4d981ac38dfcefad1e2bb..b75fa106e2c89434d1032ba3a0173421fa7e1bc6 100644
--- a/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
@@ -10,8 +10,10 @@ set(LIBRARIES
     # ArmarXGui
     SimpleConfigDialog
     # RobotAPI
-    aroneigenconverter armem
     aroncommon
+    aroneigenconverter
+    armem
+    armem_server  # for disk LTM
 )
 
 set(SOURCES
@@ -96,5 +98,9 @@ set(HEADERS
 armarx_gui_library("${LIB_NAME}" "${SOURCES}" "${GUI_MOC_HDRS}" "${GUI_UIS}" "" "${LIBRARIES}")
 
 
+add_library(${PROJECT_NAME}::armem_gui ALIAS armem_gui)
+
+
 # add unit tests
 add_subdirectory(test)
+
diff --git a/source/RobotAPI/libraries/armem_gui/server/CMakeLists.txt b/source/RobotAPI/libraries/armem_gui/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..46fce90ac352efc0ed0870d4988fb1eea80dfa0e
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_gui/server/CMakeLists.txt
@@ -0,0 +1,99 @@
+set(LIB_NAME       armem_gui)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+
+set(LIBRARIES
+    # ArmarXCore
+    ArmarXCoreInterfaces ArmarXCore
+    # ArmarXGui
+    SimpleConfigDialog
+    # RobotAPI
+    aroneigenconverter armem
+)
+
+set(SOURCES
+
+    gui_utils.cpp
+    lifecycle.cpp
+
+    MemoryViewer.cpp
+    PeriodicUpdateWidget.cpp
+
+    disk/ControlWidget.cpp
+
+    instance/GroupBox.cpp
+    instance/ImageView.cpp
+    instance/InstanceView.cpp
+    instance/MemoryIDTreeWidgetItem.cpp
+    instance/WidgetsWithToolbar.cpp
+    instance/sanitize_typename.cpp
+    instance/serialize_path.cpp
+
+    instance/display_visitors/DataDisplayVisitor.cpp
+    instance/display_visitors/TypedDataDisplayVisitor.cpp
+
+    instance/tree_builders/DataTreeBuilder.cpp
+    instance/tree_builders/DataTreeBuilderBase.cpp
+    instance/tree_builders/TypedDataTreeBuilder.cpp
+
+    instance/tree_visitors/TreeDataVisitorBase.cpp
+    instance/tree_visitors/TreeDataVisitor.cpp
+    instance/tree_visitors/TreeTypedDataVisitor.cpp
+    instance/tree_visitors/TreeTypedJSONConverter.cpp
+
+    memory/GroupBox.cpp
+    memory/TreeWidget.cpp
+
+    query_widgets/QueryWidget.cpp
+    query_widgets/SnapshotForm.cpp
+    query_widgets/SnapshotSelectorWidget.cpp
+)
+set(HEADERS
+
+    gui_utils.h
+    lifecycle.h
+
+    MemoryViewer.h
+    PeriodicUpdateWidget.h
+    TreeWidgetBuilder.h
+
+    PeriodicUpdateWidget.h
+    TreeWidgetBuilder.h
+
+    disk/ControlWidget.h
+
+    instance/GroupBox.h
+    instance/ImageView.h
+    instance/InstanceView.h
+    instance/MemoryIDTreeWidgetItem.h
+    instance/WidgetsWithToolbar.h
+    instance/sanitize_typename.h
+    instance/serialize_path.h
+
+    instance/display_visitors/DataDisplayVisitor.h
+    instance/display_visitors/TypedDataDisplayVisitor.h
+
+    instance/tree_builders/DataTreeBuilder.h
+    instance/tree_builders/DataTreeBuilderBase.h
+    instance/tree_builders/TypedDataTreeBuilder.h
+
+    instance/tree_visitors/TreeDataVisitorBase.h
+    instance/tree_visitors/TreeDataVisitor.h
+    instance/tree_visitors/TreeTypedDataVisitor.h
+    instance/tree_visitors/TreeTypedJSONConverter.h
+
+    memory/GroupBox.h
+    memory/TreeWidget.h
+
+    query_widgets/QueryWidget.h
+    query_widgets/SnapshotForm.h
+    query_widgets/SnapshotSelectorWidget.h
+)
+
+armarx_gui_library("${LIB_NAME}" "${SOURCES}" "${GUI_MOC_HDRS}" "${GUI_UIS}" "" "${LIBRARIES}")
+
+
+# add unit tests
+add_subdirectory(test)
diff --git a/source/RobotAPI/libraries/armem_motions/CMakeLists.txt b/source/RobotAPI/libraries/armem_motions/CMakeLists.txt
index bf222bcec14b760e988327bd0d038322fce32b97..d82a0952ee75f711fc0c9c067d5ed860d68b25f1 100644
--- a/source/RobotAPI/libraries/armem_motions/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_motions/CMakeLists.txt
@@ -14,15 +14,15 @@ armarx_add_library(
         RobotAPI::PriorKnowledge::Motions
         
     SOURCES
-        ./server/mdb_conversions.cpp
-        ./server/MotionSegment.cpp
+        armem_motions.cpp
     HEADERS
-        ./server/mdb_conversions.h
-        ./server/MotionSegment.h
+        armem_motions.h
     ARON_FILES
-        ./aron/MDBReference.xml
+        aron/MDBReference.xml
 )
 
 
 add_library(RobotAPI::ArMemMotions ALIAS armem_motions)
 add_library(RobotAPI::armem_motions ALIAS armem_motions)
+
+add_subdirectory(server)
diff --git a/source/RobotAPI/libraries/armem_motions/armem_motions.cpp b/source/RobotAPI/libraries/armem_motions/armem_motions.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a675039efc6efeb0220ea11ee11f61cc60ed24e1
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_motions/armem_motions.cpp
@@ -0,0 +1,6 @@
+#include "armem_motions.h"
+
+namespace armarx::armem::motions::mdb
+{
+
+}
diff --git a/source/RobotAPI/libraries/armem_motions/armem_motions.h b/source/RobotAPI/libraries/armem_motions/armem_motions.h
new file mode 100644
index 0000000000000000000000000000000000000000..f9dca33dd7b46131ee27c6d52c2cf7e4e579f9c4
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_motions/armem_motions.h
@@ -0,0 +1,7 @@
+#pragma once
+
+
+namespace armarx::armem::motions::mdb
+{
+
+}
diff --git a/source/RobotAPI/libraries/armem_motions/server/CMakeLists.txt b/source/RobotAPI/libraries/armem_motions/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5aaac747df0903aab354366f97d950adce1f1dc1
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_motions/server/CMakeLists.txt
@@ -0,0 +1,31 @@
+set(ARMARX_LIB_NAME "" )
+set(ARON_FILES "")
+
+set(LIB_NAME       armem_motions_server)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+armarx_add_library(
+    LIBS
+        ArmarXCoreInterfaces
+        ArmarXCore
+        ArmarXCoreObservers
+
+        RobotAPI::Core
+        RobotAPI::armem_server
+        RobotAPI::PriorKnowledge::Motions
+        RobotAPI::armem_motions
+        
+    SOURCES
+        mdb_conversions.cpp
+        MotionSegment.cpp
+
+    HEADERS
+        mdb_conversions.h
+        MotionSegment.h
+)
+
+
+add_library(RobotAPI::ArMemMotions_server ALIAS armem_motions_server)
+add_library(RobotAPI::armem_motions_server ALIAS armem_motions_server)
diff --git a/source/RobotAPI/libraries/armem_mps/CMakeLists.txt b/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
index 68cc66e6bb96278954f919b379d15bb03dcf8902..b436f3168cd2f75f8e9e8cc7cae9a04d11f4b6e1 100644
--- a/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
@@ -2,7 +2,6 @@ set(LIB_NAME       armem_mps)
 
 armarx_component_set_name("${LIB_NAME}")
 armarx_set_target("Library: ${LIB_NAME}")
-find_package(DMP QUIET) # needs to be changed to new MP package
 
 armarx_build_if(DMP_FOUND "DMP not available")
 
@@ -11,31 +10,28 @@ armarx_add_library(
         ArmarXCoreInterfaces
         ArmarXCore
         ArmarXCoreObservers
-        ${DMP_LIBRARIES}
+
         RobotAPI::Core
         RobotAPI::armem
         RobotAPI::PriorKnowledge::Motions
         RobotAPI::armem_motions
+
         VirtualRobot
+        ${DMP_LIBRARIES}
+
     SOURCES  
-        ./aron_conversions.cpp
-        #./traj_conversions.cpp
-        ./server/MotionPrimitives/motionprimitives.cpp
-        ./server/MotionPrimitives/Segment.cpp
-    HEADERS  
-        ./aron_conversions.h
-        #./traj_conversions.h
-        ./server/MotionPrimitives/motionprimitives.h
-        ./server/MotionPrimitives/Segment.h
-)
+        aron_conversions.cpp
+        #traj_conversions.cpp
 
+    HEADERS  
+        aron_conversions.h
+        #traj_conversions.h
 
-armarx_enable_aron_file_generation_for_target(
-    TARGET_NAME
-    "${LIB_NAME}"
     ARON_FILES
-    aron/Trajectory.xml
+        aron/Trajectory.xml
 )
 
 
 add_library(RobotAPI::armem_mps ALIAS armem_mps)
+
+add_subdirectory(server)
diff --git a/source/RobotAPI/libraries/armem_mps/server/CMakeLists.txt b/source/RobotAPI/libraries/armem_mps/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c4a5854ce895a7415a6ba21cdd06b8b4b03eb6c8
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_mps/server/CMakeLists.txt
@@ -0,0 +1,36 @@
+set(ARMARX_LIB_NAME "" )
+set(ARON_FILES "")
+
+set(LIB_NAME       armem_mps_server)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+armarx_build_if(DMP_FOUND "DMP not available")
+
+armarx_add_library(
+    LIBS     
+        ArmarXCoreInterfaces
+        ArmarXCore
+        ArmarXCoreObservers
+
+        RobotAPI::Core
+        RobotAPI::armem_server
+        RobotAPI::PriorKnowledge::Motions
+        RobotAPI::armem_motions
+        RobotAPI::armem_mps
+
+        VirtualRobot
+        ${DMP_LIBRARIES}
+
+    SOURCES  
+        MotionPrimitives/motionprimitives.cpp
+        MotionPrimitives/Segment.cpp
+
+    HEADERS  
+        MotionPrimitives/motionprimitives.h
+        MotionPrimitives/Segment.h
+)
+
+
+add_library(RobotAPI::armem_mps_server ALIAS armem_mps_server)
diff --git a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.cpp b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.cpp
index 598cb580af72e4b3e9f40d0e86cb785d7e14c7d5..074f28c76d129a66eeea1b854941583bdb0809c0 100644
--- a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.cpp
+++ b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.cpp
@@ -1,50 +1,61 @@
 #include "motionprimitives.h"
 
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+// #include <iostream>
+// #include <fstream>
 
 #include <SimoxUtility/algorithm/string.h>
 
-#include <RobotAPI/libraries/armem/core/error.h>
-#include <RobotAPI/libraries/armem/server/MemoryRemoteGui.h>
-
-#include <RobotAPI/libraries/armem_mps/aron/Trajectory.aron.generated.h>
+#include <VirtualRobot/MathTools.h>
 
 #include <dmp/representation/trajectory.h>
-#include <ArmarXCore/core/system/ArmarXDataPath.h>
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/logging/Logging.h>
-#include <VirtualRobot/MathTools.h>
+#include <ArmarXCore/core/system/ArmarXDataPath.h>
 
-namespace armarx::armem::mps
-{
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem_mps/aron/Trajectory.aron.generated.h>
 
-std::optional<arondto::Trajectory> createFromFile(const std::filesystem::__cxx11::path &pathToInfoJson, bool taskspace)
+
+namespace armarx::armem::mps
 {
 
-    if (std::filesystem::exists(pathToInfoJson) && std::filesystem::is_regular_file(pathToInfoJson))
+    std::optional<arondto::Trajectory>
+    createFromFile(
+            const std::filesystem::path &pathToInfoJson,
+            bool taskspace)
     {
-        DMP::Vec<DMP::SampledTrajectoryV2 > trajs;
-        DMP::SampledTrajectoryV2 traj;
-        std::string absPath;
-        ArmarXDataPath::getAbsolutePath(pathToInfoJson, absPath);
-        traj.readFromCSVFile(absPath);
-        //traj = DMP::SampledTrajectoryV2::normalizeTimestamps(traj, 0, 1);
-        std::map<double, DMP::DVec> currentTraj = traj.getPositionData();//todo
-        trajs.push_back(traj);
-        arondto::Trajectory trajectory;
-        std::string name = pathToInfoJson.filename();
-        std::string toErase = "taskspace-trajectory-";
-        size_t pos = name.find(toErase);
-        if (pos != std::string::npos)
+        if (std::filesystem::exists(pathToInfoJson) && std::filesystem::is_regular_file(pathToInfoJson))
         {
-            name.erase(pos, toErase.length());
-        }
-        trajectory.name = name;
-        std::map<std::string, std::vector<float>> mapJointSpace;
-        for(DMP::SampledTrajectoryV2 traj: trajs){
-            std::map<double, DMP::DVec> currentTraj = traj.getPositionData(); // todo: add config making data structure clear
+            DMP::Vec<DMP::SampledTrajectoryV2 > trajs;
+            DMP::SampledTrajectoryV2 traj;
+            std::string absPath;
+            ArmarXDataPath::getAbsolutePath(pathToInfoJson, absPath);
+            traj.readFromCSVFile(absPath);
+
+            //traj = DMP::SampledTrajectoryV2::normalizeTimestamps(traj, 0, 1);
+            std::map<double, DMP::DVec> currentTraj = traj.getPositionData();  //todo
+            trajs.push_back(traj);
+
+            arondto::Trajectory trajectory;
+            std::string name = pathToInfoJson.filename();
+            std::string toErase = "taskspace-trajectory-";
+            size_t pos = name.find(toErase);
+            if (pos != std::string::npos)
+            {
+                name.erase(pos, toErase.length());
+            }
+            trajectory.name = name;
 
-            if(taskspace){
-                    for(std::pair<double, DMP::DVec> element: currentTraj){
+            std::map<std::string, std::vector<float>> mapJointSpace;
+            for (const DMP::SampledTrajectoryV2& traj: trajs)
+            {
+                std::map<double, DMP::DVec> currentTraj = traj.getPositionData(); // todo: add config making data structure clear
+
+                if (taskspace)
+                {
+                    for (std::pair<double, DMP::DVec> element: currentTraj)
+                    {
                         Eigen::Vector3f vec(element.second.at(0), element.second.at(1), element.second.at(2));
                         Eigen::Matrix<float, 4, 4> poseMatrix = VirtualRobot::MathTools::quat2eigen4f(element.second.at(4), element.second.at(5), element.second.at(6), element.second.at(3));
                         poseMatrix.block<3, 1>(0, 3) = vec;
@@ -52,33 +63,31 @@ std::optional<arondto::Trajectory> createFromFile(const std::filesystem::__cxx11
                         tselement.timestep = element.first;
                         tselement.pose = poseMatrix;
                         trajectory.taskSpace.steps.push_back(tselement);
-
                     }
-
-
-            }else{
-                for(std::pair<double, DMP::DVec> element: currentTraj){
-                    std::vector<float> configvec;
-                    for(double el: element.second){
-                        configvec.push_back(float(el));
+                }
+                else
+                {
+                    for (auto& [time, pos] : currentTraj)
+                    {
+                        std::vector<float> configvec;
+                        for (double el: pos)
+                        {
+                            configvec.push_back(float(el));
+                        }
+                        arondto::JSElement jselement;
+                        jselement.timestep = time;
+                        jselement.jointValues = configvec;
+                        trajectory.jointSpace.steps.push_back(jselement);
                     }
-                    arondto::JSElement jselement;
-                    jselement.timestep = element.first;
-                    jselement.jointValues = configvec;
-                    trajectory.jointSpace.steps.push_back(jselement);
                 }
             }
 
+            return trajectory;
+        }
+        else
+        {
+            return std::nullopt;
         }
-
-        return trajectory;
-    }
-    else
-    {
-        return std::nullopt;
     }
-}
-
-
 
 }
diff --git a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.h b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.h
index be5b41fab7c04bcc526e9642fd118e7fe8186b1c..dfe9916bbf256b838cf99bb3a2dfe4972a47be55 100644
--- a/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.h
+++ b/source/RobotAPI/libraries/armem_mps/server/MotionPrimitives/motionprimitives.h
@@ -1,19 +1,16 @@
-#ifndef MOTIONPRIMITIVES_H
-#define MOTIONPRIMITIVES_H
+#pragma once
 
 #include <filesystem>
-#include <iostream>
-#include <fstream>
 #include <optional>
 
 // ArmarX
-#include <RobotAPI/libraries/armem_motions/aron/MDBReference.aron.generated.h>
+// #include <RobotAPI/libraries/armem_motions/aron/MDBReference.aron.generated.h>
 #include <RobotAPI/libraries/armem_mps/aron/Trajectory.aron.generated.h>
 
+
 namespace armarx::armem::mps
 {
 
     std::optional<arondto::Trajectory> createFromFile(const std::filesystem::path& pathToInfoJson, bool taskspace);
 
 }
-#endif // MOTIONPRIMITIVES_H
diff --git a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
index ab26b1f8a38b5e18b16dc49a498c9369d6d918db..88fd8cf80f190ee13489c8180e4c4a53f652caff 100644
--- a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
@@ -50,18 +50,6 @@ armarx_add_library(
 
         SceneSnapshot.cpp
 
-        server/class/FloorVis.cpp
-        server/class/Segment.cpp
-
-        server/instance/Segment.cpp
-        server/instance/SegmentAdapter.cpp
-        server/instance/Decay.cpp
-        server/instance/RobotHeadMovement.cpp
-        server/instance/Visu.cpp
-        server/instance/ArticulatedObjectVisu.cpp
-
-        server/attachments/Segment.cpp
-
         client/articulated_object/Reader.cpp
         client/articulated_object/Writer.cpp
         client/articulated_object/ArticulatedObjectReader.cpp
@@ -71,13 +59,6 @@ armarx_add_library(
         client/attachment/Reader.cpp
         client/attachment/Writer.cpp
 
-)
-
-
-
-armarx_enable_aron_file_generation_for_target(
-    TARGET_NAME
-        "${LIB_NAME}"
     ARON_FILES
         aron/ObjectClass.xml
         aron/ObjectInstance.xml
@@ -86,7 +67,7 @@ armarx_enable_aron_file_generation_for_target(
         # aron/Constraint.xml
 )
 
+
 add_library(${PROJECT_NAME}::armem_objects ALIAS armem_objects)
 
-# add unit tests
-# add_subdirectory(test)
+add_subdirectory(server)
diff --git a/source/RobotAPI/libraries/armem_objects/server/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cf92773305aac9c8d4c1ce69abbf86bd3b6789ea
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_objects/server/CMakeLists.txt
@@ -0,0 +1,54 @@
+set(ARMARX_LIB_NAME "" )
+set(ARON_FILES "")
+
+set(LIB_NAME    armem_objects_server)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+
+armarx_add_library(
+    LIBS
+        # ArmarXCore
+        ArmarXCore
+        # ArmarXGui
+        ArmarXGuiComponentPlugins
+        # RobotAPI
+        RobotAPI::ArViz
+        RobotAPI::ComponentPlugins
+        RobotAPI::Core
+        RobotAPI::armem_server
+        RobotAPI::armem_robot
+        RobotAPI::armem_objects
+
+    HEADERS
+
+        class/FloorVis.h
+        class/Segment.h
+
+        instance/Segment.h
+        instance/SegmentAdapter.h
+        instance/Decay.h
+        instance/RobotHeadMovement.h
+        instance/Visu.h
+        instance/ArticulatedObjectVisu.h
+
+        attachments/Segment.h
+
+    SOURCES
+        class/FloorVis.cpp
+        class/Segment.cpp
+
+        instance/Segment.cpp
+        instance/SegmentAdapter.cpp
+        instance/Decay.cpp
+        instance/RobotHeadMovement.cpp
+        instance/Visu.cpp
+        instance/ArticulatedObjectVisu.cpp
+
+        attachments/Segment.cpp
+)
+
+
+add_library(${PROJECT_NAME}::armem_objects_server ALIAS armem_objects_server)
+
diff --git a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
index c86ed671ef17fcd287c05a7083abf3803b852e99..2c46fab4e7f811e979609b96b62ca5a02cb65b15 100644
--- a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt
@@ -3,7 +3,6 @@ set(LIB_NAME armem_robot_state)
 armarx_component_set_name("${LIB_NAME}")
 armarx_set_target("Library: ${LIB_NAME}")
 
-find_package(Eigen3 QUIET)
 armarx_build_if(Eigen3_FOUND "Eigen3 not available")
 
 
@@ -36,26 +35,6 @@ armarx_add_library(
         client/localization/TransformReader.h
         client/localization/TransformWriter.h
 
-        server/forward_declarations.h
-
-        server/common/Visu.h
-        server/common/combine.h
-
-        server/localization/Segment.h
-
-        server/proprioception/Segment.h
-        server/proprioception/aron_conversions.h
-        server/proprioception/RobotStateWriter.h
-        server/proprioception/RobotUnitData.h
-        server/proprioception/RobotUnitReader.h
-
-        server/proprioception/converters/Armar6Converter.h
-        server/proprioception/converters/ConverterTools.h
-        server/proprioception/converters/ConverterRegistry.h
-        server/proprioception/converters/ConverterInterface.h
-
-        server/description/Segment.h
-
         aron_conversions.h
         utils.h
 
@@ -68,24 +47,6 @@ armarx_add_library(
         client/localization/TransformReader.cpp
         client/localization/TransformWriter.cpp
 
-        server/common/Visu.cpp
-        server/common/combine.cpp
-
-        server/localization/Segment.cpp
-
-        server/proprioception/Segment.cpp
-        server/proprioception/aron_conversions.cpp
-        server/proprioception/RobotStateWriter.cpp
-        server/proprioception/RobotUnitData.cpp
-        server/proprioception/RobotUnitReader.cpp
-
-        server/proprioception/converters/Armar6Converter.cpp
-        server/proprioception/converters/ConverterTools.cpp
-        server/proprioception/converters/ConverterRegistry.cpp
-        server/proprioception/converters/ConverterInterface.cpp
-
-        server/description/Segment.cpp
-
         aron_conversions.cpp
         utils.cpp
 )
@@ -104,3 +65,5 @@ armarx_enable_aron_file_generation_for_target(
 
 
 add_library(RobotAPI::armem_robot_state ALIAS armem_robot_state)
+
+add_subdirectory(server)
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_state/server/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..848efe75e0b615f367f5602c9cdfdfb3cdbbd7ea
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_robot_state/server/CMakeLists.txt
@@ -0,0 +1,73 @@
+set(ARMARX_LIB_NAME "" )
+set(ARON_FILES "")
+
+set(LIB_NAME armem_robot_state_server)
+
+armarx_component_set_name("${LIB_NAME}")
+armarx_set_target("Library: ${LIB_NAME}")
+
+armarx_build_if(Eigen3_FOUND "Eigen3 not available")
+
+
+armarx_add_library(
+    LIBS 
+        # ArmarX
+        ArmarXCore 
+        ArmarXCoreInterfaces
+        DebugObserverHelper
+        # ArmarXGui
+        ArmarXGuiComponentPlugins
+        # This package
+        RobotAPICore 
+        RobotAPIInterfaces 
+        RobotAPI::armem_server
+        RobotAPI::armem_robot
+        RobotAPI::armem_robot_state
+        aroncommon
+
+        # System / External
+        Eigen3::Eigen
+
+    HEADERS
+        forward_declarations.h
+
+        common/Visu.h
+        common/combine.h
+
+        localization/Segment.h
+
+        proprioception/Segment.h
+        proprioception/aron_conversions.h
+        proprioception/RobotStateWriter.h
+        proprioception/RobotUnitData.h
+        proprioception/RobotUnitReader.h
+
+        proprioception/converters/Armar6Converter.h
+        proprioception/converters/ConverterTools.h
+        proprioception/converters/ConverterRegistry.h
+        proprioception/converters/ConverterInterface.h
+
+        description/Segment.h
+
+    SOURCES
+        common/Visu.cpp
+        common/combine.cpp
+
+        localization/Segment.cpp
+
+        proprioception/Segment.cpp
+        proprioception/aron_conversions.cpp
+        proprioception/RobotStateWriter.cpp
+        proprioception/RobotUnitData.cpp
+        proprioception/RobotUnitReader.cpp
+
+        proprioception/converters/Armar6Converter.cpp
+        proprioception/converters/ConverterTools.cpp
+        proprioception/converters/ConverterRegistry.cpp
+        proprioception/converters/ConverterInterface.cpp
+
+        description/Segment.cpp
+)
+
+
+add_library(RobotAPI::armem_robot_state_server ALIAS armem_robot_state_server)