diff --git a/source/RobotAPI/libraries/armem/core/base/EntityBase.h b/source/RobotAPI/libraries/armem/core/base/EntityBase.h
index 6d2a3a8ded0b9c53d87703a7ed377438493ff4ce..39dcc12c92902bad4c7a2e0c9cb7385de8e0a40c 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntityBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/EntityBase.h
@@ -268,33 +268,6 @@ namespace armarx::armem::base
             return "entity";
         }
 
-        virtual _Derived copy() const override
-        {
-            _Derived d;
-            this->_copySelf(d);
-            return d;
-        }
-
-        virtual _Derived copyEmpty() const override
-        {
-            _Derived d;
-            this->_copySelfEmpty(d);
-            return d;
-        }
-
-
-    protected:
-
-        virtual void _copySelf(DerivedT& other) const override
-        {
-            Base::_copySelf(other);
-        }
-
-        virtual void _copySelfEmpty(DerivedT& other) const override
-        {
-            Base::_copySelfEmpty(other);
-        }
-
 
     private:
 
diff --git a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h
index 4e2471f3d7efadbdc47139acf413a8933cad5460..aab70193435c7eec54b9e2127e7c57528ebba842 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/EntityInstanceBase.h
@@ -46,14 +46,6 @@ namespace armarx::armem::base
             return id().instanceIndex;
         }
 
-        // Copying
-        virtual DerivedT copy() const
-        {
-            DerivedT d;
-            this->_copySelf(d);
-            return d;
-        }
-
         /**
          * @brief Fill `*this` with the update's values.
          * @param update The update.
@@ -64,6 +56,13 @@ namespace armarx::armem::base
 
         virtual bool equalsDeep(const DerivedT& other) const = 0;
 
+        virtual DerivedT copy() const
+        {
+            DerivedT d;
+            this->_copySelf(d);
+            return d;
+        }
+
 
         std::string getLevelName() const override
         {
diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
index b7fffdbff9dc0641f67b6fb83b2fb97849a7f61b..5eabdd345ab01affb5400f856e4567dea108a4bb 100644
--- a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
+++ b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
@@ -766,3 +766,53 @@ BOOST_AUTO_TEST_CASE(test_history_size_in_provider_segment)
     }
 }
 
+
+
+template <class T>
+struct CopyTest
+{
+    CopyTest()
+    {
+    }
+
+    void test()
+    {
+        // At least check whether they can be called.
+        T t;
+        T t2 = t.copy();
+
+        if constexpr (std::is_base_of_v<armem::base::EntityInstanceBase<T>, T>)
+        {
+            t2 = t.copyEmpty();
+        }
+    }
+};
+
+
+BOOST_AUTO_TEST_CASE(test_copy)
+{
+    {
+        CopyTest<armem::wm::EntityInstance>().test();
+        CopyTest<armem::wm::EntitySnapshot>().test();
+        CopyTest<armem::wm::Entity>().test();
+        CopyTest<armem::wm::ProviderSegment>().test();
+        CopyTest<armem::wm::CoreSegment>().test();
+        CopyTest<armem::wm::Memory>().test();
+    }
+    {
+        CopyTest<armem::ltm::EntityInstance>().test();
+        CopyTest<armem::ltm::EntitySnapshot>().test();
+        CopyTest<armem::ltm::Entity>().test();
+        CopyTest<armem::ltm::ProviderSegment>().test();
+        CopyTest<armem::ltm::CoreSegment>().test();
+        CopyTest<armem::ltm::Memory>().test();
+    }
+    {
+        CopyTest<armem::d_ltm::EntityInstance>().test();
+        CopyTest<armem::d_ltm::EntitySnapshot>().test();
+        CopyTest<armem::d_ltm::Entity>().test();
+        CopyTest<armem::d_ltm::ProviderSegment>().test();
+        CopyTest<armem::d_ltm::CoreSegment>().test();
+        CopyTest<armem::d_ltm::Memory>().test();
+    }
+}