diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index a5274706c4f359b45f1e8d7fb925b66479865625..84a5e312a9ef7502b9b3c22fcd7da4ab0f7e725b 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -47,7 +47,6 @@ set(LIB_FILES
     # core/base/ProviderSegmentBase.cpp
 
     core/workingmemory/ice_conversions.cpp
-    core/workingmemory/detail/CopyWithoutData.cpp
     core/workingmemory/CoreSegment.cpp
     core/workingmemory/Entity.cpp
     core/workingmemory/EntityInstance.cpp
@@ -166,7 +165,6 @@ set(LIB_HEADERS
     core/base/MemoryBase.h
     core/base/ProviderSegmentBase.h
 
-    core/workingmemory/detail/CopyWithoutData.h
     core/workingmemory/CoreSegment.h
     core/workingmemory/Entity.h
     core/workingmemory/EntityInstance.h
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
index 8097ab7179a37779ce7c55b0659cd9b535978fc9..7a3ef7efe1d9b7b980331c42d7254a4fd69a2a66 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
@@ -39,25 +39,19 @@ namespace armarx::armem::wm
     }
 
 
-    Commit CoreSegment::toCommit() const
+    CoreSegment::~CoreSegment()
     {
-        Commit c;
-        for (const auto& [k, s] : _container)
-        {
-            c.append(s.toCommit());
-        }
-        return c;
     }
 
 
-    void CoreSegment::_copySelfWithoutData(CoreSegment& other) const
+    Commit CoreSegment::toCommit() const
     {
-        other.id() = _id;
-        other.setMaxHistorySize(_maxHistorySize);
+        Commit c;
         for (const auto& [k, s] : _container)
         {
-            other.addProviderSegment(s.copyWithoutData());
+            c.append(s.toCommit());
         }
+        return c;
     }
 
 
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
index 54df4ff40aa6f19a74e9a8d8e1f968bf111b7711..7dff9a9ad1afa3bf819ef943e0c18179b56f80e0 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
@@ -6,7 +6,6 @@
 #include <RobotAPI/libraries/armem/core/base/CoreSegmentBase.h>
 
 #include "ProviderSegment.h"
-#include "detail/CopyWithoutData.h"
 
 
 namespace armarx::armem::wm
@@ -16,14 +15,14 @@ namespace armarx::armem::wm
      * @brief Data of a core segment containing multiple provider segments.
      */
     class CoreSegment :
-        public base::CoreSegmentBase<ProviderSegment, CoreSegment>,
-        public detail::CopyWithoutData<CoreSegment>
+        public base::CoreSegmentBase<ProviderSegment, CoreSegment>
     {
         using Base = base::CoreSegmentBase<ProviderSegment, CoreSegment>;
 
     public:
 
         using Base::CoreSegmentBase;
+        virtual ~CoreSegment() override;
 
         CoreSegment(const CoreSegment& other);
         CoreSegment(CoreSegment&& other);
@@ -102,8 +101,6 @@ namespace armarx::armem::wm
 
     protected:
 
-        virtual void _copySelfWithoutData(CoreSegment& other) const override;
-
         mutable std::mutex _mutex;
 
     };
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
index e704e96d5454d27bfb095120c1901e000611122a..27661a6ce7975ebbd0be0b2745945943d5e22e7a 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp
@@ -1,5 +1,6 @@
 #include "Entity.h"
 
+
 namespace armarx::armem::wm
 {
 
@@ -16,13 +17,4 @@ namespace armarx::armem::wm
         return c;
     }
 
-    void Entity::_copySelfWithoutData(Entity& other) const
-    {
-        other.id() = _id;
-        other.setMaxHistorySize(_maxHistorySize);
-        for (const auto& [k, s] : _container)
-        {
-            other.addSnapshot(s.copyWithoutData());
-        }
-    }
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
index d8e29a7941dc8a9f0477b2f21bdcf81b97583e57..450a95c819b49726dac2b6e85a5cd7625e854551 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h
@@ -3,7 +3,6 @@
 #include <RobotAPI/libraries/armem/core/base/EntityBase.h>
 
 #include "EntitySnapshot.h"
-#include "detail/CopyWithoutData.h"
 
 
 namespace armarx::armem::wm
@@ -28,8 +27,7 @@ namespace armarx::armem::wm
      * each containing a single `AronData` object of a specific `AronType`.
      */
     class Entity :
-        public base::EntityBase<EntitySnapshot, Entity>,
-        public detail::CopyWithoutData<Entity>
+        public base::EntityBase<EntitySnapshot, Entity>
     {
         using Base = base::EntityBase<EntitySnapshot, Entity>;
 
@@ -48,10 +46,6 @@ namespace armarx::armem::wm
          */
         Commit toCommit() const;
 
-    protected:
-
-        virtual void _copySelfWithoutData(Entity& other) const override;
-
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
index 0962f86fb946eb3cc6a48fddc4a4568a936f1362..1be40a13108fc30ac615a3ed08ec1a64f3245b5f 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
@@ -57,11 +57,4 @@ namespace armarx::armem::wm
         this->_metadata.timeArrived = update.timeArrived;
     }
 
-
-    void EntityInstance::_copySelfWithoutData(EntityInstance& other) const
-    {
-        other._id = _id;
-        other._metadata = _metadata;
-        // no: other._data = _data;
-    }
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
index 06389c3664542e13195083df8f9513047b4f169a..fbeb3f19f93e594604fd9de94da6975584b12745 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h
@@ -2,8 +2,6 @@
 
 #include <RobotAPI/libraries/armem/core/base/EntityInstanceBase.h>
 
-#include "detail/CopyWithoutData.h"
-
 
 namespace armarx::armem::wm
 {
@@ -42,8 +40,7 @@ namespace armarx::armem::wm
      * @brief Data of a single entity instance.
      */
     class EntityInstance :
-        public base::EntityInstanceBase<EntityInstance>,
-        public detail::CopyWithoutData<EntityInstance>
+        public base::EntityInstanceBase<EntityInstance>
     {
         using Base = base::EntityInstanceBase<EntityInstance>;
 
@@ -87,11 +84,6 @@ namespace armarx::armem::wm
         virtual bool equalsDeep(const EntityInstance& other) const override;
 
 
-    protected:
-
-        virtual void _copySelfWithoutData(EntityInstance& other) const override;
-
-
     private:
 
         /// The metadata.
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
index 76d5400131a7ec6a57478f13afb0dfc38a4da174..5d7506a0f84a574367ff9e7bed10161ed776c6f1 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp
@@ -17,12 +17,4 @@ namespace armarx::armem::wm
         return ret;
     }
 
-    void EntitySnapshot::_copySelfWithoutData(EntitySnapshot& other) const
-    {
-        other.id() = _id;
-        for (const auto& s : _container)
-        {
-            other.addInstance(s.copyWithoutData());
-        }
-    }
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
index 226fefd83e6cce5e18233bd8b5bf6c58ca16fcc5..90b03d1ae67ae2a0640d8f5381365040e04aeed0 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h
@@ -3,7 +3,6 @@
 #include <RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h>
 
 #include "EntityInstance.h"
-#include "detail/CopyWithoutData.h"
 
 
 namespace armarx::armem::wm
@@ -13,8 +12,7 @@ namespace armarx::armem::wm
      * @brief Data of an entity at one point in time.
      */
     class EntitySnapshot :
-        public base::EntitySnapshotBase<EntityInstance, EntitySnapshot>,
-        public detail::CopyWithoutData<EntitySnapshot>
+        public base::EntitySnapshotBase<EntityInstance, EntitySnapshot>
     {
         using Base = base::EntitySnapshotBase<EntityInstance, EntitySnapshot>;
 
@@ -31,10 +29,5 @@ namespace armarx::armem::wm
 
         std::vector<aron::datanavigator::DictNavigatorPtr> getAronData() const;
 
-
-    protected:
-
-        virtual void _copySelfWithoutData(EntitySnapshot& other) const override;
-
     };
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
index 70fd41e7c451175d5964a81d48f4e8270c2e611c..c69a222b3e0f3e9809744becb80f33a70da78e83 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp
@@ -82,14 +82,4 @@ namespace armarx::armem::wm
         return c;
     }
 
-
-    void Memory::_copySelfWithoutData(Memory& other) const
-    {
-        other.id() = _id;
-        for (const auto& [k, s] : _container)
-        {
-            other.addCoreSegment(s.copyWithoutData());
-        }
-    }
-
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
index d52bce5ca30d2a464881e73f4cd4994a29429751..b6595c83d3a7a2129e0f330894cce9d0044e42e0 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h
@@ -3,7 +3,6 @@
 #include <RobotAPI/libraries/armem/core/base/MemoryBase.h>
 
 #include "CoreSegment.h"
-#include "detail/CopyWithoutData.h"
 
 
 namespace armarx::armem::wm
@@ -13,8 +12,7 @@ namespace armarx::armem::wm
      * @brief Data of a memory consisting of multiple core segments.
      */
     class Memory :
-        public base::MemoryBase<CoreSegment, Memory>,
-        public detail::CopyWithoutData<Memory>
+        public base::MemoryBase<CoreSegment, Memory>
     {
         using Base = base::MemoryBase<CoreSegment, Memory>;
 
@@ -47,10 +45,5 @@ namespace armarx::armem::wm
          */
         Commit toCommit() const;
 
-
-    protected:
-
-        virtual void _copySelfWithoutData(Memory& other) const override;
-
     };
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
index bd03cf21cd8b616a3afcc4d531377288e55c5f2f..b67fa10f5ba4afc363ee4b83d523b9476f054553 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp
@@ -18,14 +18,4 @@ namespace armarx::armem::wm
         return c;
     }
 
-    void ProviderSegment::_copySelfWithoutData(ProviderSegment& other) const
-    {
-        other.id() = _id;
-        other.setMaxHistorySize(_maxHistorySize);
-        for (const auto& [k, s] : _container)
-        {
-            other.addEntity(s.copyWithoutData());
-        }
-    }
-
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
index f3e7086288f038853832a2b286a76910e9437bff..e837469d8b44ce76ad624ee6adea93285705c474 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h
@@ -3,7 +3,6 @@
 #include <RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h>
 
 #include "Entity.h"
-#include "detail/CopyWithoutData.h"
 
 
 namespace armarx::armem::wm
@@ -13,8 +12,7 @@ namespace armarx::armem::wm
      * @brief Data of a provider segment containing multiple entities.
      */
     class ProviderSegment :
-        public base::ProviderSegmentBase<Entity, ProviderSegment>,
-        public detail::CopyWithoutData<ProviderSegment>
+        public base::ProviderSegmentBase<Entity, ProviderSegment>
     {
         using Base = base::ProviderSegmentBase<Entity, ProviderSegment>;
 
@@ -33,11 +31,6 @@ namespace armarx::armem::wm
          */
         Commit toCommit() const;
 
-
-    protected:
-
-        virtual void _copySelfWithoutData(ProviderSegment& other) const override;
-
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp
deleted file mode 100644
index 70441033dd0fcb24a502bcd4e552764c7c2f5d3c..0000000000000000000000000000000000000000
--- a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp
+++ /dev/null
@@ -1 +0,0 @@
-#include "CopyWithoutData.h"
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h b/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h
deleted file mode 100644
index caabd1e6002c803aa6a1015afd7ce660abd2482f..0000000000000000000000000000000000000000
--- a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-
-namespace armarx::armem::wm::detail
-{
-
-    /**
-     * @class Allows copying `*this` without data in the leaf
-     * data structures.
-     */
-    template <class DerivedT>
-    class CopyWithoutData
-    {
-    public:
-
-        /// Get a copy of `this` without data.
-        virtual DerivedT copyWithoutData() const
-        {
-            DerivedT t;
-            _copySelfWithoutData(t);
-            return t;
-        }
-
-
-    protected:
-
-        virtual void _copySelfWithoutData(DerivedT& other) const = 0;
-
-    };
-}
diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
index cc27449064f6134df205616a17bcd9758f679865..0c41d3a6f0d587a320f119159af235613a9721c2 100644
--- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
+++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp
@@ -22,7 +22,13 @@ namespace armarx::armem::wm::query_proc
         }
         else
         {
-            result.addSnapshot(snapshot.copyWithoutData());
+            wm::EntitySnapshot copy = snapshot;
+            copy.forEachEntityInstance([](EntityInstance & i)
+            {
+                i.setData(nullptr);
+                return true;
+            });
+            result.addSnapshot(std::move(copy));
         }
     }