diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 6898b8e364aa449e87fdb7dac83735f933cb1e1d..475bfbcf1a87ba81e569d8aacd388b4ba630108d 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -25,6 +25,7 @@ set(LIB_FILES
     core/Commit.cpp
     core/MemoryID.cpp
     core/MemoryID_operators.cpp
+    core/operations.cpp
     core/SuccessHeader.cpp
     core/Time.cpp
     core/ice_conversions.cpp
@@ -138,6 +139,7 @@ set(LIB_HEADERS
     core/DataMode.h
     core/MemoryID.h
     core/MemoryID_operators.h
+    core/operations.h
     core/SuccessHeader.h
     core/Time.h
     core/aron_conversions.h
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h
index 76bb297e76d268ce8517449686ffae1cdb3ed2cd..cccf81b00ca35a42247bf7370ba46008404608a9 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h
@@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm
     public:
 
         using Base::CoreSegmentBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h b/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h
index 35022275570c93378cbe0c767aad1776da594838..09b8ab78ce246c4173593f08edb30e12ce7af168 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h
@@ -38,7 +38,6 @@ namespace armarx::armem::d_ltm
     public:
 
         using Base::EntityBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
index d22310fb2385d223439a4c563e526549c818234a..e3bff18fa2b85f9650f8b35cff823ec9f7eebf88 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
@@ -15,12 +15,6 @@
 namespace armarx::armem::d_ltm
 {
 
-    EntityInstance::EntityInstance(const EntityInstance& other) :
-        Base(other),
-        path(other.path)
-    {
-    }
-
     bool EntityInstance::equalsDeep(const EntityInstance& other) const
     {
         return id() == other.id();
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
index c27f49951e8d672590a961c05c8713290a31db52..c94ee5dcd243dfd23fb49a917a376784f80ff40f 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
@@ -22,11 +22,6 @@ namespace armarx::armem::d_ltm
 
         using Base::EntityInstanceBase;
 
-        EntityInstance(const EntityInstance& other);
-        EntityInstance(EntityInstance&& other) = default;
-        EntityInstance& operator=(const EntityInstance& other) = default;
-        EntityInstance& operator=(EntityInstance&& other) = default;
-
 
         /**
          * @brief Fill `*this` with the update's values.
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
index be36a8a7756f45617e55a2b56777b8d8abea6f56..5005af5f7e26cd12963529fe2f2cf0e060d92c19 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
@@ -24,7 +24,6 @@ namespace armarx::armem::d_ltm
     public:
 
         using Base::EntitySnapshotBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h b/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h
index 7f7872f7a638cc31122f09b00a95755ede4d9606..de2cae3c7381cb05daab3f9cd01a21f1e7df4deb 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h
@@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm
     public:
 
         using Base::MemoryBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h
index 8ad96ea0630af0d5aba8b7270fe229c235c2a010..eb7d300e08143e958ffd17586fa97b6f3eb61b8f 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h
@@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm
     public:
 
         using Base::ProviderSegmentBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
index adb3257919abbd9743bc06a0a8b3f7ddacb09144..797b9df1ffab72fa45e22d4fd887a3370167967a 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
@@ -21,7 +21,6 @@ namespace armarx::armem::ltm
     public:
 
         using Base::CoreSegmentBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
index c564e60b6471b02c32e08ab366a8047e5b6c9d3c..79c783de9d40b7eeda7d1057f5b531adcd8d5013 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
@@ -36,7 +36,6 @@ namespace armarx::armem::ltm
     public:
 
         using Base::EntityBase;
-        using Base::operator=;
 
         Entity()
         {
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
index ba72d68bf6e758f4770b5215754a6c73f2fa3e66..6046f6ac50902d6f7f770361915dbd30d5a15ec1 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
@@ -21,11 +21,6 @@ namespace armarx::armem::ltm
 
         using Base::EntityInstanceBase;
 
-        EntityInstance(const EntityInstance& other) = default;
-        EntityInstance(EntityInstance&& other) = default;
-        EntityInstance& operator=(const EntityInstance& other) = default;
-        EntityInstance& operator=(EntityInstance&& other) = default;
-
 
         /**
          * @brief Fill `*this` with the update's values.
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
index b557602473e937ccad8f962308e6bf8634290d0f..b3d6211bd18e882d2a31864995a11208e5f23cfa 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
@@ -23,7 +23,6 @@ namespace armarx::armem::ltm
     public:
 
         using Base::EntitySnapshotBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
index c18100e96a1d0b471ce03b181ce35b60afb2b63e..ed48ff071b93386306baba134e8b473574dca978 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
@@ -21,7 +21,6 @@ namespace armarx::armem::ltm
     public:
 
         using Base::ProviderSegmentBase;
-        using Base::operator=;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/operations.cpp b/source/RobotAPI/libraries/armem/core/operations.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e43995730554ea5045bcb5c40a3fa66a9a562a0a
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/core/operations.cpp
@@ -0,0 +1,34 @@
+#include "operations.h"
+
+#include "workingmemory/EntityInstance.h"
+
+
+namespace armarx
+{
+
+    std::vector<aron::datanavigator::DictNavigatorPtr>
+    armem::getAronData(const wm::EntitySnapshot& snapshot)
+    {
+        std::vector<aron::datanavigator::DictNavigatorPtr> result;
+        snapshot.forEachChild([&result](const wm::EntityInstance& instance)
+        {
+            result.push_back(instance.data());
+            return true;
+        });
+        return result;
+    }
+
+
+    armem::EntityUpdate armem::toEntityUpdate(const wm::EntitySnapshot& snapshot)
+    {
+        EntityUpdate up;
+        up.entityID = snapshot.id().getEntityID();
+        up.timeCreated = snapshot.time();
+        up.instancesData = getAronData(snapshot);
+        return up;
+    }
+
+}
+
+
+
diff --git a/source/RobotAPI/libraries/armem/core/operations.h b/source/RobotAPI/libraries/armem/core/operations.h
new file mode 100644
index 0000000000000000000000000000000000000000..9fc479dcf5a573eff83124e5f1df35b728b2bd1e
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/core/operations.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#if 0  // Not need at the moment.
+#include "workingmemory/Memory.h"
+#include "workingmemory/CoreSegment.h"
+#include "workingmemory/ProviderSegment.h"
+#include "workingmemory/Entity.h"
+#include "workingmemory/EntityInstance.h"
+#endif
+
+#include "workingmemory/EntitySnapshot.h"
+
+
+/*
+ * Functions performing some "advanced" operations on the memory
+ * data structure, which are using their public API but should not
+ * be part of it.
+ */
+
+namespace armarx::armem
+{
+
+    std::vector<aron::datanavigator::DictNavigatorPtr>
+    getAronData(const wm::EntitySnapshot& snapshot);
+
+    EntityUpdate toEntityUpdate(const wm::EntitySnapshot& snapshot);
+
+
+    template <class ContainerT>
+    Commit toCommit(const ContainerT& container)
+    {
+        Commit commit;
+        container.forEachSnapshot([&commit](const wm::EntitySnapshot & snapshot)
+        {
+            commit.add(toEntityUpdate(snapshot));
+            return true;
+        });
+        return commit;
+    }
+
+}
+
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
index 9e87538e0ed513ccab7feaa34592869b7fc694b1..eb437eb1637da451fd76439fd0a1a70314edaf4c 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
@@ -39,17 +39,6 @@ namespace armarx::armem::wm
     }
 
 
-    Commit CoreSegment::toCommit() const
-    {
-        Commit c;
-        for (const auto& [k, s] : _container)
-        {
-            c.append(s.toCommit());
-        }
-        return c;
-    }
-
-
     std::mutex& CoreSegment::mutex() const
     {
         return _mutex;
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
index 27661a6ce7975ebbd0be0b2745945943d5e22e7a..e212c0d36c502b0dddb5196b62aceeb4249e2a78 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
@@ -4,17 +4,5 @@
 namespace armarx::armem::wm
 {
 
-    Commit Entity::toCommit() const
-    {
-        Commit c;
-        for (const auto& [k, s] : _container)
-        {
-            EntityUpdate& up = c.add();
-            up.entityID = id();
-            up.timeCreated = k;
-            up.instancesData = s.getAronData();
-        }
-        return c;
-    }
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
index 450a95c819b49726dac2b6e85a5cd7625e854551..34e9b2abd0e21ec92c9581a4777af42fb968a74f 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
@@ -29,22 +29,9 @@ namespace armarx::armem::wm
     class Entity :
         public base::EntityBase<EntitySnapshot, Entity>
     {
-        using Base = base::EntityBase<EntitySnapshot, Entity>;
-
     public:
 
-        using Base::EntityBase;
-
-        Entity(const Entity& other) = default;
-        Entity(Entity&& other) = default;
-        Entity& operator=(const Entity& other) = default;
-        Entity& operator=(Entity&& other) = default;
-
-        /**
-         * @brief Convert the content of this segmnet into a commit
-         * @return The resulting commit
-         */
-        Commit toCommit() const;
+        using base::EntityBase<EntitySnapshot, Entity>::EntityBase;
 
     };
 
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
index 18d744c59731331e010d8ebea257e7d51aa5ed0b..158b1c0f88144248e3bfc4b60d43832c8c246e12 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
@@ -23,11 +23,6 @@ namespace armarx::armem::wm
 
         using Base::EntityInstanceBase;
 
-        EntityInstance(const EntityInstance& other) = default;
-        EntityInstance(EntityInstance&& other) = default;
-        EntityInstance& operator=(const EntityInstance& other) = default;
-        EntityInstance& operator=(EntityInstance&& other) = default;
-
 
         /**
          * @brief Fill `*this` with the update's values.
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
index 5d7506a0f84a574367ff9e7bed10161ed776c6f1..b5daa319226c0b16d1d4b3336efaead6e8c9406e 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
@@ -1,20 +1,7 @@
 #include "EntitySnapshot.h"
 
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
-
-#include "error.h"
-
 
 namespace armarx::armem::wm
 {
-    std::vector<aron::datanavigator::DictNavigatorPtr> EntitySnapshot::getAronData() const
-    {
-        std::vector<aron::datanavigator::DictNavigatorPtr> ret;
-        for (const auto& aron : _container)
-        {
-            ret.push_back(aron.data());
-        }
-        return ret;
-    }
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
index 90b03d1ae67ae2a0640d8f5381365040e04aeed0..c19a2f83019c3a208c7d7474c42d3b6ae28dda70 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
@@ -14,20 +14,9 @@ namespace armarx::armem::wm
     class EntitySnapshot :
         public base::EntitySnapshotBase<EntityInstance, EntitySnapshot>
     {
-        using Base = base::EntitySnapshotBase<EntityInstance, EntitySnapshot>;
-
     public:
 
-        using Base::EntitySnapshotBase;
-        // using Base::operator=;
-
-        EntitySnapshot(const EntitySnapshot& other) = default;
-        EntitySnapshot(EntitySnapshot&& other) = default;
-        EntitySnapshot& operator=(const EntitySnapshot& other) = default;
-        EntitySnapshot& operator=(EntitySnapshot&& other) = default;
-
-
-        std::vector<aron::datanavigator::DictNavigatorPtr> getAronData() const;
+        using base::EntitySnapshotBase<EntityInstance, EntitySnapshot>::EntitySnapshotBase;
 
     };
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
index c69a222b3e0f3e9809744becb80f33a70da78e83..7bff4f19e39dfb0e2bd796be39714af86cd656f1 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
@@ -71,15 +71,4 @@ namespace armarx::armem::wm
         return result;
     }
 
-
-    Commit Memory::toCommit() const
-    {
-        Commit c;
-        for (const auto& [k, s] : _container)
-        {
-            c.append(s.toCommit());
-        }
-        return c;
-    }
-
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
index b6595c83d3a7a2129e0f330894cce9d0044e42e0..e3684b3b6c851c756d78528d38e72f1c3f6a3364 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
@@ -20,10 +20,6 @@ namespace armarx::armem::wm
 
         using Base::MemoryBase;
 
-        Memory(const Memory& other) = default;
-        Memory(Memory&& other) = default;
-        Memory& operator=(const Memory& other) = default;
-        Memory& operator=(Memory&& other) = default;
 
         /**
          * @brief Perform the commit, locking the core segments.
@@ -38,12 +34,5 @@ namespace armarx::armem::wm
          */
         Base::UpdateResult updateLocking(const EntityUpdate& update);
 
-
-        /**
-         * @brief Convert the content of this memory into a commit
-         * @return The resulting commit
-         */
-        Commit toCommit() const;
-
     };
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
index b67fa10f5ba4afc363ee4b83d523b9476f054553..01aa4e39b9f9b10ad855032b1c95c90c317fb75e 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
@@ -1,21 +1,8 @@
 #include "ProviderSegment.h"
 
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
-
-#include "error.h"
-
 
 namespace armarx::armem::wm
 {
 
-    Commit ProviderSegment::toCommit() const
-    {
-        Commit c;
-        for (const auto& [k, s] : _container)
-        {
-            c.append(s.toCommit());
-        }
-        return c;
-    }
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
index e837469d8b44ce76ad624ee6adea93285705c474..75b5d3b3687994b2626d63c7044d37fec4cb7102 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
@@ -14,22 +14,9 @@ namespace armarx::armem::wm
     class ProviderSegment :
         public base::ProviderSegmentBase<Entity, ProviderSegment>
     {
-        using Base = base::ProviderSegmentBase<Entity, ProviderSegment>;
-
     public:
 
-        using Base::ProviderSegmentBase;
-
-        ProviderSegment(const ProviderSegment& other) = default;
-        ProviderSegment(ProviderSegment&& other) = default;
-        ProviderSegment& operator=(const ProviderSegment& other) = default;
-        ProviderSegment& operator=(ProviderSegment&& other) = default;
-
-        /**
-         * @brief Convert the content of this segmnet into a commit
-         * @return The resulting commit
-         */
-        Commit toCommit() const;
+        using base::ProviderSegmentBase<Entity, ProviderSegment>::ProviderSegmentBase;
 
     };
 
diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
index b61a3ba136e1bc015886983589e6d43d7d9c1665..60f134edc6cdced8e5ea2b08e45c22d9973eee2e 100644
--- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
+++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
@@ -279,7 +279,7 @@ namespace armarx::armem::server
             result.memory = toIce<data::MemoryPtr>(merged_result);
 
             // also move results of ltm to wm
-            //this->commit(ltm_converted.toCommit());
+            //this->commit(toCommit(ltm_converted));
 
             // mark removed entries of wm in viewer
             // TODO