diff --git a/source/RobotAPI/interface/CMakeLists.txt b/source/RobotAPI/interface/CMakeLists.txt
index 7ee210481fec8c2714f3cdb29f0eb3c02f46dd7a..547fb0833f1e0475b48a60e8be33979a9dfd09ee 100644
--- a/source/RobotAPI/interface/CMakeLists.txt
+++ b/source/RobotAPI/interface/CMakeLists.txt
@@ -104,6 +104,7 @@ set(SLICE_FILES
 
 
     armem.ice
+    armem/io.ice
     armem/commit.ice
     armem/memory.ice
     armem/query.ice
@@ -112,6 +113,7 @@ set(SLICE_FILES
     armem/client/MemoryListenerInterface.ice
 
     armem/server.ice
+    armem/server/LongTermMemoryInterface.ice
     armem/server/MemoryInterface.ice
     armem/server/MemoryPredictorInterface.ice
     armem/server/ReadingMemoryInterface.ice
diff --git a/source/RobotAPI/interface/armem/io.ice b/source/RobotAPI/interface/armem/io.ice
new file mode 100644
index 0000000000000000000000000000000000000000..51c5f42b2eda1d5bb9f8f83e0171c95b506bf35e
--- /dev/null
+++ b/source/RobotAPI/interface/armem/io.ice
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <ArmarXCore/interface/core/PackagePath.ice>
+
+module armarx
+{
+    module armem
+    {
+        module data
+        {
+            struct LoadInput
+            {
+                armarx::data::PackagePath path;
+            };
+
+            struct LoadResult
+            {
+                bool success = false;
+                long timeStartedMicroSeconds;
+                long timeFinishedMicroSeconds;
+
+                long numLoadedCoreSegments;
+                long numLoadedProviderSegments;
+                long numLoadedEntities;
+                long numLoadedEntitySnapshots;
+
+                string errorMessage;
+            };
+
+            struct StoreInput
+            {
+                armarx::data::PackagePath path;
+            };
+
+            struct StoreResult
+            {
+                bool success = false;
+                long timeStartedMicroSeconds;
+                long timeFinishedMicroSeconds;
+
+                long numStoredCoreSegments;
+                long numStoredLoadedProviderSegments;
+                long numStoredLoadedEntities;
+                long numStoredLoadedEntitySnapshots;
+
+                string errorMessage;
+            };
+        };
+    };
+};
diff --git a/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice b/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice
new file mode 100644
index 0000000000000000000000000000000000000000..ba64d626c1c156c3820a508625d1c3a3b36ec847
--- /dev/null
+++ b/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <RobotAPI/interface/armem/io.ice>
+
+
+module armarx
+{
+    module armem
+    {        
+        module server
+        {
+            interface LongTermMemoryInterface
+            {
+                data::LoadResult load(data::LoadInput input);
+                data::StoreResult store(data::StoreInput input);
+            };
+        };
+    };
+};
diff --git a/source/RobotAPI/interface/armem/server/MemoryInterface.ice b/source/RobotAPI/interface/armem/server/MemoryInterface.ice
index 2764998e2bf3d1226d8d34abb76772806b6bfd25..93213eed1d85269c83cfcd2547908e2be61f2d2a 100644
--- a/source/RobotAPI/interface/armem/server/MemoryInterface.ice
+++ b/source/RobotAPI/interface/armem/server/MemoryInterface.ice
@@ -3,6 +3,7 @@
 #include <RobotAPI/interface/armem/server/ReadingMemoryInterface.ice>
 #include <RobotAPI/interface/armem/server/WritingMemoryInterface.ice>
 
+#include <RobotAPI/interface/armem/server/LongTermMemoryInterface.ice>
 
 module armarx
 {
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
index d7df863de0a34f0a8007c9b69a0e27c6bbc72e87..e1481de91136feddf28cdd464981558bd15afa89 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp
@@ -264,6 +264,7 @@ namespace armarx::aron::cppcodegenerator
 
             // ctor
             c->addCtor(serializer->toCtor(c->getName()));
+            c->addCtor(serializer->toInnerEnumCtor(c->getName()));
 
             // Specific methods
             CppEnumPtr enumrepresentation = serializer->toInnerEnumDefinition();
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
index 416d8c6135674c8d26bcca570dfa79b15e7c6166..975086d4464b645f57322cbee532fc2bbe68cb5c 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp
@@ -30,7 +30,7 @@ namespace armarx::aron::cppcodegenerator::serializer
     IntEnumClassSerializer::IntEnumClassSerializer(const typenavigator::IntEnumNavigatorPtr& n) :
         Serializer(n->getEnumName(), simox::meta::get_type_name(typeid(data::AronNDArray)), simox::meta::get_type_name(typeid(type::AronIntEnum))),
         navigator(n),
-        enumName(navigator->getEnumName() + "Enum")
+        enumName("__ImplEnum")
     {
     }
 
@@ -48,11 +48,14 @@ namespace armarx::aron::cppcodegenerator::serializer
         value_to_enum << "{" << std::endl;
         for (const auto& [key, value] : navigator->getAcceptedValues())
         {
-            enum_to_name << "\t\t{" << key << ", \"" << key << "\"}," << std::endl;
-            name_to_enum << "\t\t{\"" << key << "\", " << key << "}," << std::endl;
+            std::string enumKeyWithNamespace = enumName + "::" + key;
+            fields.push_back(std::make_shared<CppField>("const static " + enumName, key + " = " + enumKeyWithNamespace));
 
-            enum_to_value << "\t\t{" << key << ", " << value << "}," << std::endl;
-            value_to_enum << "\t\t{" << value << ", " << key << "}," << std::endl;
+            enum_to_name << "\t\t{" << enumKeyWithNamespace << ", \"" << key << "\"}," << std::endl;
+            name_to_enum << "\t\t{\"" << key << "\", " << enumKeyWithNamespace << "}," << std::endl;
+
+            enum_to_value << "\t\t{" << enumKeyWithNamespace << ", " << value << "}," << std::endl;
+            value_to_enum << "\t\t{" << value << ", " << enumKeyWithNamespace << "}," << std::endl;
         }
 
         enum_to_name << "\t}";
@@ -133,6 +136,14 @@ namespace armarx::aron::cppcodegenerator::serializer
         return b;
     }
 
+    CppCtorPtr IntEnumClassSerializer::toInnerEnumCtor(const std::string& name) const
+    {
+        CppCtorPtr c = std::make_shared<CppCtor>(name + "(const " + enumName + " e)");
+        std::vector<std::pair<std::string, std::string>> initList = {{"value", "e"}};
+        c->addInitListEntries(initList);
+        return c;
+    }
+
     CppEnumPtr IntEnumClassSerializer::toInnerEnumDefinition() const
     {
         CppEnumPtr e = std::make_shared<CppEnum>(enumName, "The internal enum definition of the enum of this autogenerated class.");
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h
index ba64400afa789a83882fb4942e7ba8b3d9fbd2ee..a199fe4fefb4339986cc4847f12d14a1a6408b5a 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h
@@ -61,6 +61,7 @@ namespace armarx::aron::cppcodegenerator::serializer
         virtual CppBlockPtr getReadBlock(const std::string&) const override;
         virtual CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override;
 
+        CppCtorPtr toInnerEnumCtor(const std::string&) const;
         CppEnumPtr toInnerEnumDefinition() const;
         CppMethodPtr toIntMethod() const;
         CppMethodPtr toEnumAssignmentMethod() const;