diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.cpp b/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.cpp
index 5de81875dcae6d626f74974a2582e6dd376136e1..b8715d2ad35f7fd389b77e73b130c81ea13b5a87 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.cpp
@@ -1,10 +1,11 @@
-// Header
 #include "CoreSegment.h"
 
-// ArmarX
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
+
+
 namespace armarx::armem::server::ltm::disk
 {
     namespace
@@ -88,13 +89,24 @@ namespace armarx::armem::server::ltm::disk
         });
     }
 
-    void CoreSegment::store(const armem::wm::CoreSegment& c)
+    template <class CoreSegmentT>
+    void CoreSegment::_store(const CoreSegmentT& c)
     {
-        c.forEachProviderSegment([this](const armem::wm::ProviderSegment& e)
+        c.forEachProviderSegment([this](const auto& provSegment)
         {
-            util::ensureFolderExists(std::filesystem::path(path) / e.id().providerSegmentName);
-            ProviderSegment c(std::filesystem::path(path) / e.id().providerSegmentName);
-            c.store(e);
+            util::ensureFolderExists(std::filesystem::path(path) / provSegment.id().providerSegmentName);
+            ProviderSegment c(std::filesystem::path(path) / provSegment.id().providerSegmentName);
+            c.store(provSegment);
         });
     }
+
+    void CoreSegment::store(const armem::wm::CoreSegment& c)
+    {
+        this->_store(c);
+    }
+
+    void CoreSegment::store(const armem::server::wm::CoreSegment& c)
+    {
+        this->_store(c);
+    }
 }
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.h b/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.h
index a0d3872ce5fca928cf1669f1526bb519def7e4ea..5fe95ba664b2ce5cd8d227f09d5e67f920683118 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/CoreSegment.h
@@ -20,7 +20,8 @@ namespace armarx::armem::server::ltm::disk
 
         armem::wm::CoreSegment loadAll() override;
         void convert(armem::wm::CoreSegment&) override;
-        void store(const armem::wm::CoreSegment&) override;
+        void store(const armem::wm::CoreSegment& coreSegment) override;
+        void store(const armem::server::wm::CoreSegment& coreSegment);
 
         bool forEachProviderSegment(std::function<void(ProviderSegment&)>&& func) const override;
 
@@ -28,6 +29,10 @@ namespace armarx::armem::server::ltm::disk
 
     protected:
         std::string getExpectedFolderName() const override;
+
+    private:
+        template <class CoreSegmentT> void _store(const CoreSegmentT& coreSegment);
+
     };
 
 } // namespace armarx::armem::server::ltm::disk
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.cpp b/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.cpp
index 5ddabc38e2686938d85f2815576b2305c2787604..42acf001bedb7bfc97a500c64acf9b931ae3e499 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.cpp
@@ -5,6 +5,9 @@
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
+
+
 namespace armarx::armem::server::ltm::disk
 {
 
@@ -136,13 +139,24 @@ namespace armarx::armem::server::ltm::disk
         });
     }
 
-    void Entity::store(const armem::wm::Entity& c)
+    template <class EntityT>
+    void Entity::_store(const EntityT& entity)
     {
-        c.forEachSnapshot([this](armem::wm::EntitySnapshot& e)
+        entity.forEachSnapshot([this](armem::wm::EntitySnapshot& e)
         {
             util::ensureFolderExists(std::filesystem::path(path) / std::to_string(e.id().timestamp.toMicroSeconds()));
             EntitySnapshot c(std::filesystem::path(path) / std::to_string(e.id().timestamp.toMicroSeconds()));
             c.store(e);
         });
     }
+
+    void Entity::store(const armem::wm::Entity& c)
+    {
+        this->_store(c);
+    }
+    void Entity::store(const armem::server::wm::Entity& c)
+    {
+        this->_store(c);
+    }
+
 }
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.h b/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.h
index 48b46c34e6591f9b61bea581d419d38e8bb6b628..e07e50b943526da25a995a0f4b688d9235b5c335 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.h
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/Entity.h
@@ -22,6 +22,7 @@ namespace armarx::armem::server::ltm::disk
         armem::wm::Entity loadAll() override;
         void convert(armem::wm::Entity&) override;
         void store(const armem::wm::Entity&) override;
+        void store(const armem::server::wm::Entity&);
 
         bool forEachSnapshot(std::function<void(EntitySnapshot&)>&& func) const override;
         bool forEachSnapshotInIndexRange(long first, long last, std::function<void(EntitySnapshot&)>&& func) const override;
@@ -38,6 +39,10 @@ namespace armarx::armem::server::ltm::disk
 
     protected:
         std::string getExpectedFolderName() const override;
+
+    private:
+        template <class EntityT> void _store(const EntityT& entity);
+
     };
 
 } // namespace armarx::armem::server::ltm::disk
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/EntitySnapshot.h b/source/RobotAPI/libraries/armem/server/ltm/disk/EntitySnapshot.h
index d93a62c9c7dba00d8aaa1a236b1dbb71cbabc647..eef8d674f723569d64e147f1aa7c29ec4abdfea1 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/EntitySnapshot.h
@@ -23,6 +23,7 @@ namespace armarx::armem::server::ltm::disk
 
     protected:
         std::string getExpectedFolderName() const override;
+
     };
 
 } // namespace armarx::armem::server::ltm::disk
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.cpp b/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.cpp
index b75a3f5571fa2eab9147dca1a4ca6707b4e72c60..aef82fa5f57d5d2907e3e59e38dbf83e7329d681 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.cpp
@@ -1,10 +1,11 @@
-// Header
 #include "Memory.h"
 
-// ArmarX
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
+
+
 namespace armarx::armem::server::ltm::disk
 {
     namespace
@@ -116,7 +117,8 @@ namespace armarx::armem::server::ltm::disk
         TIMING_END_STREAM(LTM_Memory_Convert, ARMARX_DEBUG);
     }
 
-    void Memory::store(const armem::wm::Memory& m)
+    template <class MemoryT>
+    void Memory::_store(const MemoryT& memory)
     {
         TIMING_START(LTM_Memory_Store);
 
@@ -127,11 +129,11 @@ namespace armarx::armem::server::ltm::disk
 
         std::lock_guard l(ltm_mutex);
 
-        m.forEachCoreSegment([this](const armem::wm::CoreSegment& e)
+        memory.forEachCoreSegment([this](const auto& core)
         {
-            util::ensureFolderExists(std::filesystem::path(path) / e.id().coreSegmentName);
-            CoreSegment c(std::filesystem::path(path) / e.id().coreSegmentName);
-            c.store(e);
+            util::ensureFolderExists(std::filesystem::path(path) / core.id().coreSegmentName);
+            CoreSegment c(std::filesystem::path(path) / core.id().coreSegmentName);
+            c.store(core);
         });
 
         // Finaly clear cache and put reference to lut
@@ -139,4 +141,15 @@ namespace armarx::armem::server::ltm::disk
 
         TIMING_END_STREAM(LTM_Memory_Store, ARMARX_DEBUG);
     }
+
+    void Memory::store(const armem::wm::Memory& m)
+    {
+        this->_store(m);
+    }
+
+    void Memory::store(const armem::server::wm::Memory& m)
+    {
+        this->_store(m);
+    }
+
 }
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.h b/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.h
index e9e4225779b972672e70d693f10f50f863088804..26ca95817d5d5440bef3db2d31aa4298f00afdbd 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.h
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/Memory.h
@@ -3,7 +3,7 @@
 #include <filesystem>
 
 // Base Class
-#include "../base/detail/BufferedMemoryBase.h"
+#include <RobotAPI/libraries/armem/server/ltm/base/detail/BufferedMemoryBase.h>
 #include "detail/DiskStorage.h"
 
 #include "CoreSegment.h"
@@ -22,7 +22,9 @@ namespace armarx::armem::server::ltm::disk
 
         armem::wm::Memory loadAll() override;
         void convert(armem::wm::Memory&) override;
+
         void store(const armem::wm::Memory&) override;
+        void store(const armem::server::wm::Memory&);
 
         bool forEachCoreSegment(std::function<void(CoreSegment&)>&& func) const override;
 
@@ -30,5 +32,9 @@ namespace armarx::armem::server::ltm::disk
 
     protected:
         std::string getExpectedFolderName() const override;
+
+    private:
+        template <class MemoryT> void _store(const MemoryT& memory);
+
     };
 } // namespace armarx::armem::server::ltm::disk
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.cpp
index bc3310c11290cdde901cb4c9b0a47834a5fb8d2e..d5690e359095b6fc4b274967e70169b6a01b008a 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.cpp
@@ -5,6 +5,9 @@
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
+
+
 namespace armarx::armem::server::ltm::disk
 {
     namespace
@@ -89,13 +92,25 @@ namespace armarx::armem::server::ltm::disk
         });
     }
 
-    void ProviderSegment::store(const armem::wm::ProviderSegment& p)
+
+    template <class ProviderSegmentT>
+    void ProviderSegment::_store(const ProviderSegmentT& providerSegment)
     {
-        p.forEachEntity([this](const armem::wm::Entity& e)
+        providerSegment.forEachEntity([this](const auto& entity)
         {
-            util::ensureFolderExists(std::filesystem::path(path) / e.id().entityName);
-            Entity c(std::filesystem::path(path) / e.id().entityName);
-            c.store(e);
+            util::ensureFolderExists(std::filesystem::path(path) / entity.id().entityName);
+            Entity c(std::filesystem::path(path) / entity.id().entityName);
+            c.store(entity);
         });
     }
+
+    void ProviderSegment::store(const armem::wm::ProviderSegment& p)
+    {
+        this->_store(p);
+    }
+
+    void ProviderSegment::store(const armem::server::wm::ProviderSegment& p)
+    {
+        this->_store(p);
+    }
 }
diff --git a/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.h b/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.h
index 45ed5c8acf388d93a24cbb64149b6c59871cca42..52cef6f1699b0647d5ae93923b4dc4edea16b8f3 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/server/ltm/disk/ProviderSegment.h
@@ -21,6 +21,7 @@ namespace armarx::armem::server::ltm::disk
         armem::wm::ProviderSegment loadAll() override;
         void convert(armem::wm::ProviderSegment&) override;
         void store(const armem::wm::ProviderSegment&) override;
+        void store(const armem::server::wm::ProviderSegment&);
 
         bool forEachEntity(std::function<void(Entity&)>&& func) const override;
 
@@ -28,6 +29,11 @@ namespace armarx::armem::server::ltm::disk
 
     protected:
         std::string getExpectedFolderName() const override;
+
+
+    private:
+        template <class ProviderSegmentT> void _store(const ProviderSegmentT& providerSegment);
+
     };
 
 } // namespace armarx::armem::server::ltm::disk