diff --git a/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h b/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h
index feffe7c5f1227741135fef15350ef8a3910d57b7..03e3835fad49a951ded49f990358ff3b87c06ce4 100644
--- a/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h
@@ -116,13 +116,13 @@ namespace armarx::armem::base
         }
 
         using Base::getEntity;
-        const EntityT& getEntity(const MemoryID& id) const override
+        const EntityT& getEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.coreSegmentName, this->getKeyString());
             return getProviderSegment(id.providerSegmentName).getEntity(id);
         }
 
-        const EntityT* findEntity(const MemoryID& id) const override
+        const EntityT* findEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.coreSegmentName, this->getKeyString());
             if (id.hasProviderSegmentName())
@@ -186,7 +186,7 @@ namespace armarx::armem::base
          *
          * Missing entity entries are added before updating.
          */
-        virtual UpdateResult update(const EntityUpdate& update)
+        UpdateResult update(const EntityUpdate& update)
         {
             this->_checkContainerName(update.entityID.coreSegmentName, this->name());
 
@@ -233,7 +233,7 @@ namespace armarx::armem::base
 
         void append(const _Derived& m)
         {
-            ARMARX_INFO << "CoreSegment: Merge name '" << m.name() << "' into '" << name() << "'";
+            // ARMARX_INFO << "CoreSegment: Merge name '" << m.name() << "' into '" << name() << "'";
 
             m.forEachProviderSegment([this](const ProviderSegmentT & provSeg)
             {
@@ -271,7 +271,7 @@ namespace armarx::armem::base
             if (hasProviderSegment(providerSegment.name()))
             {
                 throw armem::error::ContainerEntryAlreadyExists(
-                    providerSegment.getLevelName(), providerSegment.name(), getLevelName(), this->getKeyString());
+                    ProviderSegmentT::getLevelName(), providerSegment.name(), getLevelName(), this->getKeyString());
             }
 
             auto it = this->_container.emplace(providerSegment.name(), std::move(providerSegment)).first;
@@ -286,19 +286,20 @@ namespace armarx::armem::base
          * This affects all current entities as well as new ones.
          * @see Entity::setMaxHistorySize()
          */
-        void setMaxHistorySize(long maxSize) override
+        void setMaxHistorySize(long maxSize)
         {
             MaxHistorySize::setMaxHistorySize(maxSize);
-            for (auto& [name, seg] : this->_container)
+            this->forEachChild([maxSize](auto & child)
             {
-                seg.setMaxHistorySize(maxSize);
-            }
+                child.setMaxHistorySize(maxSize);
+                return true;
+            });
         }
 
 
         // MISC
 
-        virtual bool equalsDeep(const CoreSegmentBase& other) const
+        bool equalsDeep(const DerivedT& other) const
         {
             //std::cout << "CoreSegment::equalsDeep" << std::endl;
             if (this->size() != other.size())
@@ -319,7 +320,7 @@ namespace armarx::armem::base
             return true;
         }
 
-        std::string getLevelName() const
+        static std::string getLevelName()
         {
             return "core segment";
         }
diff --git a/source/RobotAPI/libraries/armem/core/base/EntityBase.h b/source/RobotAPI/libraries/armem/core/base/EntityBase.h
index b480d09c03b7f262691f5a829539780979722693..1a02d65c7f5e79c26cb087fcf70c26387863f312 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntityBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/EntityBase.h
@@ -105,7 +105,7 @@ namespace armarx::armem::base
         {
             return const_cast<const EntityBase*>(this)->hasSnapshot(time);
         }
-        virtual bool hasSnapshot(const Time& time) const
+        bool hasSnapshot(const Time& time) const
         {
             return this->_container.count(time) > 0;
         }
@@ -127,7 +127,7 @@ namespace armarx::armem::base
         /**
          * @brief Get all timestamps in the history.
          */
-        virtual std::vector<Time> getTimestamps() const
+        std::vector<Time> getTimestamps() const
         {
             return simox::alg::get_keys(this->_container);
         }
@@ -145,7 +145,7 @@ namespace armarx::armem::base
             return const_cast<EntitySnapshotT&>(const_cast<const EntityBase*>(this)->getSnapshot(time));
         }
 
-        virtual const EntitySnapshotT& getSnapshot(const Time& time) const
+        const EntitySnapshotT& getSnapshot(const Time& time) const
         {
             auto it = this->_container.find(time);
             if (it != this->_container.end())
@@ -480,7 +480,7 @@ namespace armarx::armem::base
          *
          * The current history is truncated if necessary.
          */
-        void setMaxHistorySize(long maxSize) override
+        void setMaxHistorySize(long maxSize)
         {
             MaxHistorySize::setMaxHistorySize(maxSize);
             truncate();
@@ -489,7 +489,7 @@ namespace armarx::armem::base
 
         // MISC
 
-        bool equalsDeep(const EntityBase& other) const
+        bool equalsDeep(const DerivedT& other) const
         {
             //std::cout << "Entity::equalsDeep" << std::endl;
             if (this->size() != other.size())
@@ -514,7 +514,7 @@ namespace armarx::armem::base
         {
             return this->id().entityName;
         }
-        std::string getLevelName() const
+        static std::string getLevelName()
         {
             return "entity";
         }
@@ -543,7 +543,6 @@ namespace armarx::armem::base
          * @return The latest snapshot.
          * @throw `armem::error::EntityHistoryEmpty` If the history is empty.
          */
-        virtual
         const typename ContainerT::value_type&
         getLatestItem() const
         {
@@ -559,7 +558,6 @@ namespace armarx::armem::base
          * @return The first snapshot.
          * @throw `armem::error::EntityHistoryEmpty` If the history is empty.
          */
-        virtual
         const typename ContainerT::value_type&
         getFirstItem() const
         {
diff --git a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
index 288da3947b6b2c502c8371d2bc62dff196cb7ac1..36d7274acedb92271587e3ba941345254033d840 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <memory>
 #include <vector>
 
 #include "../MemoryID.h"
@@ -219,7 +218,7 @@ namespace armarx::armem::base
 
         // MISC
 
-        bool equalsDeep(const EntitySnapshotBase& other) const
+        bool equalsDeep(const DerivedT& other) const
         {
             //std::cout << "EntitySnapshot::equalsDeep" << std::endl;
             if (this->size() != other.size())
@@ -244,7 +243,7 @@ namespace armarx::armem::base
             return toDateTimeMilliSeconds(this->time());
         }
 
-        std::string getLevelName() const
+        static std::string getLevelName()
         {
             return "entity snapshot";
         }
diff --git a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h
index 6b7b006cc4aa3a97c9e555045478afabb1780cc4..a02beda13e3859386a9eed7c3722c987386cd7e7 100644
--- a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h
@@ -138,13 +138,13 @@ namespace armarx::armem::base
 
 
         using Base::getEntity;
-        const EntityT& getEntity(const MemoryID& id) const override
+        const EntityT& getEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.memoryName, this->name());
             return getCoreSegment(id.coreSegmentName).getEntity(id);
         }
 
-        const EntityT* findEntity(const MemoryID& id) const override
+        const EntityT* findEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.memoryName, this->name());
             if (id.hasCoreSegmentName())
@@ -224,7 +224,7 @@ namespace armarx::armem::base
         {
             if (this->_container.count(coreSegment.name()) > 0)
             {
-                throw armem::error::ContainerEntryAlreadyExists(coreSegment.getLevelName(), coreSegment.name(),
+                throw armem::error::ContainerEntryAlreadyExists(CoreSegmentT::getLevelName(), coreSegment.name(),
                         this->getLevelName(), this->name());
             }
             auto it = this->_container.emplace(coreSegment.name(), std::move(coreSegment)).first;
@@ -260,7 +260,7 @@ namespace armarx::armem::base
          * @param commit The commit.
          * @return The resulting memory IDs.
          */
-        virtual std::vector<UpdateResult> update(const Commit& commit)
+        std::vector<UpdateResult> update(const Commit& commit)
         {
             std::vector<UpdateResult> results;
             for (const EntityUpdate& update : commit.updates)
@@ -275,7 +275,7 @@ namespace armarx::armem::base
          * @param update The update.
          * @return The resulting entity snapshot's ID.
          */
-        virtual UpdateResult update(const EntityUpdate& update)
+        UpdateResult update(const EntityUpdate& update)
         {
             this->_checkContainerName(update.entityID.memoryName, this->name());
 
@@ -339,7 +339,7 @@ namespace armarx::armem::base
             });
         }
 
-        virtual bool equalsDeep(const MemoryBase& other) const
+        bool equalsDeep(const MemoryBase& other) const
         {
             //std::cout << "Memory::equalsDeep" << std::endl;
             if (this->size() != other.size())
@@ -360,7 +360,7 @@ namespace armarx::armem::base
             return true;
         }
 
-        std::string getLevelName() const
+        static std::string getLevelName()
         {
             return "memory";
         }
diff --git a/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h b/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h
index af94a5da164223593a27776b031fa92eda3a6c36..0c54ae2b202cf485bcb0cdf52ac53622475c917b 100644
--- a/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h
@@ -94,7 +94,7 @@ namespace armarx::armem::base
         }
 
         using Base::getEntity;
-        const EntityT& getEntity(const MemoryID& id) const override
+        const EntityT& getEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.providerSegmentName, this->getKeyString());
             return getEntity(id.entityName);
@@ -118,7 +118,7 @@ namespace armarx::armem::base
             }
         }
 
-        const EntityT* findEntity(const MemoryID& id) const override
+        const EntityT* findEntity(const MemoryID& id) const
         {
             this->_checkContainerName(id.providerSegmentName, this->getKeyString());
             auto it = this->_container.find(id.entityName);
@@ -205,7 +205,7 @@ namespace armarx::armem::base
 
         void append(const _Derived& m)
         {
-            ARMARX_INFO << "ProviderSegment: Merge name '" << m.name() << "' into '" << name() << "'";
+            // ARMARX_INFO << "ProviderSegment: Merge name '" << m.name() << "' into '" << name() << "'";
 
             m.forEachEntity([this](const EntityT & entity)
             {
@@ -243,19 +243,20 @@ namespace armarx::armem::base
          * This affects all current container as well as new ones.
          * @see Entity::setMaxHistorySize()
          */
-        void setMaxHistorySize(long maxSize) override
+        void setMaxHistorySize(long maxSize)
         {
             MaxHistorySize::setMaxHistorySize(maxSize);
-            for (auto& [name, entity] : this->_container)
+            this->forEachChild([maxSize](auto & child)
             {
-                entity.setMaxHistorySize(maxSize);
-            }
+                child.setMaxHistorySize(maxSize);
+                return true;
+            });
         }
 
 
         // MISC
 
-        virtual bool equalsDeep(const ProviderSegmentBase& other) const
+        bool equalsDeep(const DerivedT& other) const
         {
             //std::cout << "ProviderSegment::equalsDeep" << std::endl;
             if (this->size() != other.size())
@@ -278,7 +279,7 @@ namespace armarx::armem::base
         }
 
 
-        std::string getLevelName() const
+        static std::string getLevelName()
         {
             return "provider segment";
         }
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.cpp b/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.cpp
index ec7ca0402ad128dc6d342aa28279929c376df557..48147758528cb5ac46baa8a952272ee831ed1e01 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.cpp
+++ b/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.cpp
@@ -1,5 +1,8 @@
 #include "AronTyped.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h>
+
+
 namespace armarx::armem::base::detail
 {
 
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.h b/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.h
index 37c0e13aa486a8fca645359e1c4e07b189c6c28d..16233556c83f8febb732824a7001c9b2e8d1e2ac 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.h
+++ b/source/RobotAPI/libraries/armem/core/base/detail/AronTyped.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h>
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
 
 
 namespace armarx::armem::base::detail
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/EntityContainerBase.h b/source/RobotAPI/libraries/armem/core/base/detail/EntityContainerBase.h
index 96d1512df5535a8dd8798d6992f37b3fa69946d5..53cddfff656cdf0fb000323afc4aefcc18c2f50f 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/EntityContainerBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/detail/EntityContainerBase.h
@@ -44,11 +44,11 @@ namespace armarx::armem::base::detail
          * @return The entity.
          * @throw An exception deriving from `armem::error::ArMemError` if the entity is missing.
          */
+        // const EntityT& getEntity(const MemoryID& id) const;
         EntityT& getEntity(const MemoryID& id)
         {
-            return const_cast<EntityT&>(const_cast<const EntityContainerBase*>(this)->getEntity(id));
+            return const_cast<EntityT&>(const_cast<const EntityContainerBase*>(this)->_derived().getEntity(id));
         }
-        virtual const EntityT& getEntity(const MemoryID& id) const = 0;
 
         /**
          * @brief Find an entity.
@@ -62,7 +62,11 @@ namespace armarx::armem::base::detail
          * @param id The entities ID.
          * @return A pointer to the first matching entity or `nullptr` if none was found.
          */
-        virtual const EntityT* findEntity(const MemoryID& id) const = 0;
+        // const EntityT* findEntity(const MemoryID& id) const;
+        EntityT* findEntity(const MemoryID& id)
+        {
+            return const_cast<EntityT*>(const_cast<const EntityContainerBase*>(this)->_derived().findEntity(id));
+        }
 
 
         /**
@@ -76,12 +80,12 @@ namespace armarx::armem::base::detail
          */
         EntitySnapshotT& getEntitySnapshot(const MemoryID& id)
         {
-            return const_cast<EntitySnapshotT&>(const_cast<const EntityContainerBase*>(this)->getEntitySnapshot(id));
+            return const_cast<EntitySnapshotT&>(const_cast<const EntityContainerBase*>(this)->_derived().getEntitySnapshot(id));
         }
 
         const EntitySnapshotT& getEntitySnapshot(const MemoryID& id) const
         {
-            const EntityT& entity = getEntity(id);
+            const EntityT& entity = _derived().getEntity(id);
 
             if (id.hasTimestamp())
             {
@@ -102,6 +106,19 @@ namespace armarx::armem::base::detail
         {
             return getEntitySnapshot(id).getInstance(id);
         }
+
+
+    private:
+
+        DerivedT& _derived()
+        {
+            return static_cast<DerivedT&>(*this);
+        }
+        const DerivedT& _derived() const
+        {
+            return static_cast<const DerivedT&>(*this);
+        }
+
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.cpp b/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.cpp
index 2c3b0554c65523826db0a7709599ed8e5140e0a1..f1a308f0764a8cb8067f3403ef5427d904fa93dc 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.cpp
+++ b/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.cpp
@@ -3,10 +3,6 @@
 
 namespace armarx::armem::base::detail
 {
-    MaxHistorySize::~MaxHistorySize()
-    {
-    }
-
     void MaxHistorySize::setMaxHistorySize(long maxSize)
     {
         this->_maxHistorySize = maxSize;
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.h b/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.h
index 1fc07ed85e54716d24d2447fa17cb95b291f2766..c46fde11fb83d4580863aaf70aaafab4ba7f60e6 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.h
+++ b/source/RobotAPI/libraries/armem/core/base/detail/MaxHistorySize.h
@@ -9,15 +9,13 @@ namespace armarx::armem::base::detail
     {
     public:
 
-        virtual ~MaxHistorySize();
-
         /**
          * @brief Sets the maximum history size of entities in this segment.
          * This affects all current entities as well as new ones.
          * @see Entity::setMaxHistorySize()
          */
-        virtual void setMaxHistorySize(long maxSize);
-        virtual long getMaxHistorySize() const;
+        void setMaxHistorySize(long maxSize);
+        long getMaxHistorySize() const;
 
 
     protected:
diff --git a/source/RobotAPI/libraries/armem/core/base/detail/MemoryContainerBase.h b/source/RobotAPI/libraries/armem/core/base/detail/MemoryContainerBase.h
index 9c5a03f347494b1c834f8ecd3defcd1109222327..4d7cbec1877176f511e854eeefa60a9d6159aded 100644
--- a/source/RobotAPI/libraries/armem/core/base/detail/MemoryContainerBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/detail/MemoryContainerBase.h
@@ -118,7 +118,7 @@ namespace armarx::armem::base::detail
             if (!((emptyOk && gottenName.empty()) || gottenName == actualName))
             {
                 throw armem::error::ContainerNameMismatch(
-                    gottenName, static_cast<DerivedT const*>(this)->getLevelName(), actualName);
+                    gottenName, DerivedT::getLevelName(), actualName);
             }
         }
 
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
index f8c14159eb488b5e80e25e868b2f9d700cb3572f..c27f49951e8d672590a961c05c8713290a31db52 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
@@ -14,9 +14,9 @@ namespace armarx::armem::d_ltm
      * @brief Data of a single entity instance.
      */
     class EntityInstance :
-        public base::EntityInstanceBase<EntityInstance>
+        public base::EntityInstanceBase<base::NoData, base::NoData>
     {
-        using Base = base::EntityInstanceBase<EntityInstance>;
+        using Base = base::EntityInstanceBase<base::NoData, base::NoData>;
 
     public:
 
@@ -33,9 +33,9 @@ namespace armarx::armem::d_ltm
          * @param update The update.
          * @param index The instances index.
          */
-        virtual void update(const EntityUpdate& update) override;
+        void update(const EntityUpdate& update);
 
-        virtual bool equalsDeep(const EntityInstance& other) const override;
+        bool equalsDeep(const EntityInstance& other) const;
 
 
         // Conversion
diff --git a/source/RobotAPI/libraries/armem/core/error/ArMemError.h b/source/RobotAPI/libraries/armem/core/error/ArMemError.h
index e6843d13be5bc07e71d90b00cf6a911ca717e524..219d489fad038da1098d724bddd9e2bc74b0a5d7 100644
--- a/source/RobotAPI/libraries/armem/core/error/ArMemError.h
+++ b/source/RobotAPI/libraries/armem/core/error/ArMemError.h
@@ -84,8 +84,8 @@ namespace armarx::armem::error
         template <class MissingT, class ContainerT>
         static MissingEntry create(const std::string& missingKey, const ContainerT& container)
         {
-            return MissingEntry(MissingT().getLevelName(), missingKey,
-                                container.getLevelName(), container.getKeyString(), container.size());
+            return MissingEntry(MissingT::getLevelName(), missingKey,
+                                ContainerT::getLevelName(), container.getKeyString(), container.size());
         }
 
 
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
index c17e10208aa3bcf8fe97fe43c58d67c5de34770b..c564e60b6471b02c32e08ab366a8047e5b6c9d3c 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
@@ -51,15 +51,15 @@ namespace armarx::armem::ltm
         void reload();
         void append(const wm::Entity&);
 
-        // virtual overrides for LTM lookups
-        virtual bool hasSnapshot(const Time& time) const override;
-        virtual std::vector<Time> getTimestamps() const override;
-        virtual const EntitySnapshot& getSnapshot(const Time& time) const override;
+        // overrides for LTM lookups
+        bool hasSnapshot(const Time& time) const;
+        std::vector<Time> getTimestamps() const;
+        const EntitySnapshot& getSnapshot(const Time& time) const;
 
 
     protected:
-        // virtual overrides for LTM storage
-        virtual const ContainerT::value_type& getLatestItem() const override;
+        // overrides for LTM storage
+        const ContainerT::value_type& getLatestItem() const;
 
     public:
         MongoDBConnectionManager::MongoDBSettings dbsettings;
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
index 5fa23431ba399a1850158496415a8bd21d4eab6a..c8d28b8e59136f04f38cb6795b5d06f2bfbf104a 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
@@ -62,11 +62,9 @@ namespace armarx::armem::ltm
          * @param update The update.
          * @param index The instances index.
          */
-        virtual void update(const EntityUpdate& update) override;
-
-        virtual bool equalsDeep(const EntityInstance& other) const override;
-
+        void update(const EntityUpdate& update);
 
+        bool equalsDeep(const EntityInstance& other) const;
     private:
 
         /// The metadata.
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
index 7a3ef7efe1d9b7b980331c42d7254a4fd69a2a66..9e87538e0ed513ccab7feaa34592869b7fc694b1 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp
@@ -39,11 +39,6 @@ namespace armarx::armem::wm
     }
 
 
-    CoreSegment::~CoreSegment()
-    {
-    }
-
-
     Commit CoreSegment::toCommit() const
     {
         Commit c;
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
index 7dff9a9ad1afa3bf819ef943e0c18179b56f80e0..341c065a01ea6daa52ced48b5fff6363bc7793d0 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h
@@ -22,7 +22,6 @@ namespace armarx::armem::wm
     public:
 
         using Base::CoreSegmentBase;
-        virtual ~CoreSegment() override;
 
         CoreSegment(const CoreSegment& other);
         CoreSegment(CoreSegment&& other);
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
index 3150feff1c779e463d9d9c6ff16939419b7b4c00..58db49b16deda95182a9307d8866b3d9f2326b40 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
@@ -1,6 +1,7 @@
 #include "ice_conversions.h"
 
 #include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+#include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h>
 
 
 namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
index 13aea87b259d2b2905ce330e22a2e09d92abb7b7..b61a3ba136e1bc015886983589e6d43d7d9c1665 100644
--- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
+++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp
@@ -1,13 +1,16 @@
 #include "MemoryToIceAdapter.h"
 
-#include "ArmarXCore/core/logging/Logging.h"
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
-#include "../error.h"
-#include "../core/workingmemory/ice_conversions.h"
 #include "query_proc/workingmemory/MemoryQueryProcessor.h"
 #include "query_proc/longtermmemory/MemoryQueryProcessor.h"
 
+#include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/core/workingmemory/ice_conversions.h>
+#include <RobotAPI/libraries/aron/core/Exception.h>
+
+#include <ArmarXCore/core/logging/Logging.h>
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
 
 namespace armarx::armem::server
 {
diff --git a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp
index 8fc5e70996cde9e222f3192bc1bb59be0788f5fa..1aa9e3cfd4eac4d165d15d2420484964769fdc68 100644
--- a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp
+++ b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp
@@ -102,7 +102,7 @@ BOOST_AUTO_TEST_CASE(test_forEach)
 
     memory.forEachInstance([&](const wm::EntityInstance & i) -> bool
     {
-        BOOST_TEST_CONTEXT(i.getLevelName() << " " << i.id())
+        BOOST_TEST_CONTEXT(wm::EntityInstance::getLevelName() << " " << i.id())
         {
             BOOST_TEST_INFO(toVector(iids));
             BOOST_CHECK_EQUAL(iids.count(i.id()), 1);
@@ -117,7 +117,7 @@ BOOST_AUTO_TEST_CASE(test_forEach)
 
     memory.forEachSnapshot([&](const wm::EntitySnapshot & s) -> bool
     {
-        BOOST_TEST_CONTEXT(s.getLevelName() << " " << s.id())
+        BOOST_TEST_CONTEXT(wm::EntitySnapshot::getLevelName() << " " << s.id())
         {
             BOOST_TEST_INFO(toVector(sids));
             BOOST_CHECK_EQUAL(sids.count(s.id()), 1);
@@ -130,7 +130,7 @@ BOOST_AUTO_TEST_CASE(test_forEach)
 
     memory.forEachEntity([&](const wm::Entity & e) -> bool
     {
-        BOOST_TEST_CONTEXT(e.getLevelName() << " " << e.id())
+        BOOST_TEST_CONTEXT(wm::Entity::getLevelName() << " " << e.id())
         {
             BOOST_TEST_INFO(toVector(eids));
             BOOST_CHECK_EQUAL(eids.count(e.id()), 1);
@@ -143,7 +143,7 @@ BOOST_AUTO_TEST_CASE(test_forEach)
 
     memory.forEachProviderSegment([&](const wm::ProviderSegment & p)  // -> bool
     {
-        BOOST_TEST_CONTEXT(p.getLevelName() << " " << p.id())
+        BOOST_TEST_CONTEXT(wm::ProviderSegment::getLevelName() << " " << p.id())
         {
             BOOST_TEST_INFO(toVector(pids));
             BOOST_CHECK_EQUAL(pids.count(p.id()), 1);
@@ -156,7 +156,7 @@ BOOST_AUTO_TEST_CASE(test_forEach)
 
     memory.forEachCoreSegment([&](const wm::CoreSegment & c)  // -> bool
     {
-        BOOST_TEST_CONTEXT(c.getLevelName() << " " << c.id())
+        BOOST_TEST_CONTEXT(wm::CoreSegment::getLevelName() << " " << c.id())
         {
             BOOST_TEST_INFO(toVector(cids));
             BOOST_CHECK_EQUAL(cids.count(c.id()), 1);
diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
index f7aebf000b77c500cd22f757425eb853d3798b44..022df2fc35848a9f011213d120be39fb8e3ccfd9 100644
--- a/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
+++ b/source/RobotAPI/libraries/armem/test/ArMemMemoryTest.cpp
@@ -34,6 +34,7 @@
 #include <iostream>
 #include <SimoxUtility/meta/type_name.h>
 #include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+#include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h>
 
 
 namespace armem = armarx::armem;
diff --git a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp
index 5c6f363cfd4cdefbfba5ed7c74e2180076fb1e97..29c137093ac9c75f0c904c6745c72473c205f1ec 100644
--- a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp
+++ b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp
@@ -189,27 +189,27 @@ namespace armarx::armem::gui::memory
             _selectedID = id;
 
             const std::string levelName = item->data(int(Columns::LEVEL), Qt::UserRole).toString().toStdString();
-            if (levelName == wm::Memory().getLevelName())
+            if (levelName == wm::Memory::getLevelName())
             {
                 emit memorySelected(*_selectedID);
             }
-            else if (levelName == wm::CoreSegment().getLevelName())
+            else if (levelName == wm::CoreSegment::getLevelName())
             {
                 emit coreSegmentSelected(*_selectedID);
             }
-            else if (levelName == wm::ProviderSegment().getLevelName())
+            else if (levelName == wm::ProviderSegment::getLevelName())
             {
                 emit providerSegmentSelected(*_selectedID);
             }
-            else if (levelName == wm::Entity().getLevelName())
+            else if (levelName == wm::Entity::getLevelName())
             {
                 emit entitySelected(*_selectedID);
             }
-            else if (levelName == wm::EntitySnapshot().getLevelName())
+            else if (levelName == wm::EntitySnapshot::getLevelName())
             {
                 emit snapshotSelected(*_selectedID);
             }
-            else if (levelName == wm::EntityInstance().getLevelName())
+            else if (levelName == wm::EntityInstance::getLevelName())
             {
                 emit instanceSelected(*_selectedID);
             }
@@ -275,7 +275,7 @@ namespace armarx::armem::gui::memory
     QTreeWidgetItem* TreeWidget::makeItem(const std::string& key, const MemoryItemT& memoryItem)
     {
         (void) key;
-        return makeItem(memoryItem.getKeyString(), memoryItem.getLevelName(), memoryItem.id());
+        return makeItem(memoryItem.getKeyString(), MemoryItemT::getLevelName(), memoryItem.id());
     }
 
     QTreeWidgetItem* TreeWidget::makeItem(const std::string& key, const std::string& levelName, const MemoryID& id)