diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 644c655fab44881d28429b7fdd266b1d41e9a8e8..5e85729b15a7afbf8855a6eca1059062635df405 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -28,7 +28,9 @@ set(LIB_FILES
     core/ice_conversions.cpp
     core/Memory.cpp
     core/ProviderSegment.cpp
+
     core/detail/MemoryItem.cpp
+    core/detail/MaxHistorySize.cpp
 
     core/error/ArMemError.cpp
 
@@ -88,6 +90,7 @@ set(LIB_HEADERS
     core/ProviderSegment.h
 
     core/detail/EntityContainer.h
+    core/detail/MaxHistorySize.h
     core/detail/MemoryContainer.h
     core/detail/MemoryItem.h
     core/detail/TypedEntityContainer.h
diff --git a/source/RobotAPI/libraries/armem/core/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/CoreSegment.cpp
index 16e3b4291608c5970c074f7ea89e4d59c0e44dba..34f73cbdf4f7845a8fc2ad0ab14bc7d9ffcb8775 100644
--- a/source/RobotAPI/libraries/armem/core/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/CoreSegment.cpp
@@ -126,11 +126,22 @@ namespace armarx::armem
             throw armem::error::ContainerEntryAlreadyExists(
                 providerSegment.getLevelName(), providerSegment.name(), getLevelName(), this->name());
         }
+
         auto it = providerSegments.emplace(providerSegment.name(), std::move(providerSegment)).first;
         it->second.id().setCoreSegmentID(id());
+        it->second.setMaxHistorySize(maxHistorySize);
         return it->second;
     }
 
+    void CoreSegment::setMaxHistorySize(long maxSize)
+    {
+        MaxHistorySize::setMaxHistorySize(maxSize);
+        for (auto& [name, seg] : providerSegments)
+        {
+            seg.setMaxHistorySize(maxSize);
+        }
+    }
+
     std::string CoreSegment::getLevelName() const
     {
         return "core segment";
diff --git a/source/RobotAPI/libraries/armem/core/CoreSegment.h b/source/RobotAPI/libraries/armem/core/CoreSegment.h
index 68bf7dc4ebf1d9a22d74728b6f4b4b2470dbe218..aed697fb00d5aaf4c3d1f8446be5b289fae97cb8 100644
--- a/source/RobotAPI/libraries/armem/core/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/CoreSegment.h
@@ -5,6 +5,7 @@
 
 #include "ProviderSegment.h"
 #include "detail/TypedEntityContainer.h"
+#include "detail/MaxHistorySize.h"
 
 
 namespace armarx::armem
@@ -13,7 +14,9 @@ namespace armarx::armem
     /**
      * @brief Data of a core segment containing multiple provider segments.
      */
-    class CoreSegment : public detail::TypedEntityContainer<ProviderSegment, CoreSegment>
+    class CoreSegment :
+        public detail::TypedEntityContainer<ProviderSegment, CoreSegment>
+        , public detail::MaxHistorySize
     {
         using Base = detail::TypedEntityContainer<ProviderSegment, CoreSegment>;
 
@@ -59,6 +62,14 @@ namespace armarx::armem
         ProviderSegment& addProviderSegment(ProviderSegment&& providerSegment);
 
 
+        /**
+         * @brief Sets the maximum history size of entities in this segment.
+         * This affects all current entities as well as new ones.
+         * @see Entity::setMaxHistorySize()
+         */
+        void setMaxHistorySize(long maxSize) override;
+
+
         bool equalsDeep(const CoreSegment& other) const;
 
 
diff --git a/source/RobotAPI/libraries/armem/core/Entity.h b/source/RobotAPI/libraries/armem/core/Entity.h
index 51d55aa4951af17e671417ab95c21bbbb3690e7b..b81ffe76199f7a978d822a4d91cc421b48537682 100644
--- a/source/RobotAPI/libraries/armem/core/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/Entity.h
@@ -169,8 +169,6 @@ namespace armarx::armem
         // ToDo: Add max age;
         // ToDo in future: keep/remove predicate
 
-
-
         // MemoryItem interface
     public:
         std::string getKeyString() const override
diff --git a/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp
index 28010d765fd024f0b83442082d9daf636e7274e0..fb0ca8cc82a3cfcbf3f89251c87b2d79a7f4e357 100644
--- a/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp
@@ -154,7 +154,7 @@ namespace armarx::armem
 
     void ProviderSegment::setMaxHistorySize(long maxSize)
     {
-        this->maxHistorySize = maxSize;
+        MaxHistorySize::setMaxHistorySize(maxSize);
         for (auto& [name, entity] : entities)
         {
             entity.setMaxHistorySize(maxSize);
diff --git a/source/RobotAPI/libraries/armem/core/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/ProviderSegment.h
index ecfa53be218d27cb9978009196aec93f68f475c7..384ee1b416c2dac48ae1dcccdc9fa3e984ff6700 100644
--- a/source/RobotAPI/libraries/armem/core/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/ProviderSegment.h
@@ -5,6 +5,7 @@
 
 #include "Entity.h"
 #include "detail/TypedEntityContainer.h"
+#include "detail/MaxHistorySize.h"
 
 
 namespace armarx::armem
@@ -13,7 +14,10 @@ namespace armarx::armem
     /**
      * @brief Data of a provider segment containing multiple entities.
      */
-    class ProviderSegment : public detail::TypedEntityContainer<Entity, ProviderSegment>
+    class ProviderSegment :
+        public detail::TypedEntityContainer<Entity, ProviderSegment>
+        , public detail::MaxHistorySize
+
     {
         using Base = detail::TypedEntityContainer<Entity, ProviderSegment>;
 
@@ -66,7 +70,7 @@ namespace armarx::armem
          * This affects all current entities as well as new ones.
          * @see Entity::setMaxHistorySize()
          */
-        void setMaxHistorySize(long maxSize);
+        void setMaxHistorySize(long maxSize) override;
 
 
         bool equalsDeep(const ProviderSegment& other) const;
@@ -88,12 +92,6 @@ namespace armarx::armem
         /// The entities.
         std::map<std::string, Entity> entities;
 
-        /**
-         * @brief Maximum size of entity histories.
-         * @see Entity::maxHstorySize
-         */
-        long maxHistorySize = -1;
-
     };
 
 }
diff --git a/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cdd34e3be26351bab89ad6b712026769057f8b0e
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp
@@ -0,0 +1,19 @@
+#include "MaxHistorySize.h"
+
+
+namespace armarx::armem::detail
+{
+    MaxHistorySize::~MaxHistorySize()
+    {
+    }
+
+    void MaxHistorySize::setMaxHistorySize(long maxSize)
+    {
+        this->maxHistorySize = maxSize;
+    }
+
+    long MaxHistorySize::getMaxHistorySize() const
+    {
+        return maxHistorySize;
+    }
+}
diff --git a/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h
new file mode 100644
index 0000000000000000000000000000000000000000..d96e732964103c93987708e2b1d5dbaf9377640a
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h
@@ -0,0 +1,31 @@
+#pragma once
+
+
+
+namespace armarx::armem::detail
+{
+    class MaxHistorySize
+    {
+    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;
+
+
+    protected:
+
+        /**
+         * @brief Maximum size of entity histories.
+         * @see Entity::maxHstorySize
+         */
+        long maxHistorySize = -1;
+
+    };
+}