diff --git a/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp
index c7cea5d73db6e451e11da30ec57a667c94e2077a..a42141d41eb41ec1da0fe696f2b1729f3bdffffd 100644
--- a/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp
+++ b/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp
@@ -41,11 +41,10 @@
 namespace armem = armarx::armem;
 namespace aron = armarx::aron;
 
-BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export)
+armem::Memory setupMemoryWithType(const std::string& memoryName, const aron::typenavigator::AronObjectTypeNavigatorPtr& t1, const aron::typenavigator::AronObjectTypeNavigatorPtr& t2, unsigned int snapshots, unsigned int instances)
 {
     aron::AronRandomizer r;
 
-    std::string memoryName = "TestMemory";
     armem::Memory memory(memoryName);
     BOOST_CHECK_EQUAL(memory.name(), memoryName);
 
@@ -57,6 +56,37 @@ BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export)
     BOOST_CHECK_EQUAL(providerSegment.name(), "TestProvider");
     BOOST_CHECK(coreSegment.hasProviderSegment(providerSegment.name()));
 
+    coreSegment.aronType() = t1;
+    providerSegment.aronType() = t2;
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t = t2 != nullptr ? t2 : t1;
+
+    for (unsigned int i = 0; i < snapshots; ++i)
+    {
+        armem::EntityUpdate update;
+        std::vector<aron::datanavigator::AronDictDataNavigatorPtr> q;
+
+        for (unsigned int j = 0; j < instances; ++j)
+        {
+            aron::datanavigator::AronDictDataNavigatorPtr m = aron::datanavigator::AronDictDataNavigator::DynamicCastAndCheck(r.generateAronDataFromType(t));
+            r.initializeRandomly(m, t);
+            q.push_back(m);
+        }
+        update.entityID = armem::MemoryID::fromString(memoryName + "/TestCoreSegment/TestProvider/TestEntity");
+        update.instancesData = q;
+        update.timeCreated = armem::Time::now();
+        BOOST_CHECK_NO_THROW(providerSegment.update(update));
+        BOOST_CHECK_EQUAL(providerSegment.entities.size(), 1);
+    }
+    BOOST_CHECK(providerSegment.hasEntity("TestEntity"));
+
+    return memory;
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_int_setup)
+{
+    std::string memoryName = "TestMemory_IntSetup";
+
     aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
     t->setObjectName("TestObjectType1");
 
@@ -69,23 +99,212 @@ BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export)
     t->addAcceptedType("theInt3", tm3);
     t->addAcceptedType("theInt4", tm4);
 
-    providerSegment.aronType() = t;
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
 
-    for (int i = 0; i < 5; ++i)
-    {
-        armem::EntityUpdate update;
-        aron::datanavigator::AronDictDataNavigatorPtr m = aron::datanavigator::AronDictDataNavigator::DynamicCastAndCheck(r.generateAronDataFromType(t));
-        r.initializeRandomly(m, t);
-        update.entityID = armem::MemoryID::fromString(memoryName + "/TestCoreSegment/TestProvider/TestEntity");
-        update.instancesData =
-        {
-            m
-        };
-        update.timeCreated = armem::Time::now();
-        BOOST_CHECK_NO_THROW(providerSegment.update(update));
-        BOOST_CHECK_EQUAL(providerSegment.entities.size(), 1);
-    }
-    BOOST_CHECK(providerSegment.hasEntity("TestEntity"));
+    // export memory
+    std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /
+    std::filesystem::remove_all(storagePath);
+    armem::io::FileSystemMemoryManager mfs(storagePath, true);
+    mfs.writeOnDisk(memory);
+
+    std::string mfs_str = mfs.toString();
+
+    armem::io::FileSystemMemoryManager mfs2(storagePath);
+    mfs2.update();
+
+    std::string mfs2_str = mfs2.toString();
+
+    //std::cout << "MFS1: " << std::endl;
+    //std::cout << mfs_str << std::endl;
+    //std::cout << "MFS2: " << std::endl;
+    //std::cout << mfs2_str << std::endl;
+    BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true);
+
+    armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName);
+    BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true);
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_long_setup)
+{
+    std::string memoryName = "TestMemory_LongSetup";
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
+    t->setObjectName("TestObjectType1");
+
+    aron::typenavigator::AronLongTypeNavigatorPtr tm1(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronLongTypeNavigatorPtr tm2(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronLongTypeNavigatorPtr tm3(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronLongTypeNavigatorPtr tm4(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath()));
+    t->addAcceptedType("theLong1", tm1);
+    t->addAcceptedType("theLong2", tm2);
+    t->addAcceptedType("theLong3", tm3);
+    t->addAcceptedType("theLong4", tm4);
+
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
+
+    // export memory
+    std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /
+    std::filesystem::remove_all(storagePath);
+    armem::io::FileSystemMemoryManager mfs(storagePath, true);
+    mfs.writeOnDisk(memory);
+
+    std::string mfs_str = mfs.toString();
+
+    armem::io::FileSystemMemoryManager mfs2(storagePath);
+    mfs2.update();
+
+    std::string mfs2_str = mfs2.toString();
+
+    //std::cout << "MFS1: " << std::endl;
+    //std::cout << mfs_str << std::endl;
+    //std::cout << "MFS2: " << std::endl;
+    //std::cout << mfs2_str << std::endl;
+    BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true);
+
+    armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName);
+    BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true);
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_float_setup)
+{
+    std::string memoryName = "TestMemory_FloatSetup";
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
+    t->setObjectName("TestObjectType1");
+
+    aron::typenavigator::AronFloatTypeNavigatorPtr tm1(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronFloatTypeNavigatorPtr tm2(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronFloatTypeNavigatorPtr tm3(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronFloatTypeNavigatorPtr tm4(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath()));
+    t->addAcceptedType("theFloat1", tm1);
+    t->addAcceptedType("theFloat2", tm2);
+    t->addAcceptedType("theFloat3", tm3);
+    t->addAcceptedType("theFloat4", tm4);
+
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
+
+    // export memory
+    std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /
+    std::filesystem::remove_all(storagePath);
+    armem::io::FileSystemMemoryManager mfs(storagePath, true);
+    mfs.writeOnDisk(memory);
+
+    std::string mfs_str = mfs.toString();
+
+    armem::io::FileSystemMemoryManager mfs2(storagePath);
+    mfs2.update();
+
+    std::string mfs2_str = mfs2.toString();
+
+    //std::cout << "MFS1: " << std::endl;
+    //std::cout << mfs_str << std::endl;
+    //std::cout << "MFS2: " << std::endl;
+    //std::cout << mfs2_str << std::endl;
+    BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true);
+
+    armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName);
+    BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true);
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_double_setup)
+{
+    std::string memoryName = "TestMemory_DoubleSetup";
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
+    t->setObjectName("TestObjectType1");
+
+    aron::typenavigator::AronDoubleTypeNavigatorPtr tm1(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronDoubleTypeNavigatorPtr tm2(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronDoubleTypeNavigatorPtr tm3(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronDoubleTypeNavigatorPtr tm4(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath()));
+    t->addAcceptedType("theDouble1", tm1);
+    t->addAcceptedType("theDouble2", tm2);
+    t->addAcceptedType("theDouble3", tm3);
+    t->addAcceptedType("theDouble4", tm4);
+
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
+
+    // export memory
+    std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /
+    std::filesystem::remove_all(storagePath);
+    armem::io::FileSystemMemoryManager mfs(storagePath, true);
+    mfs.writeOnDisk(memory);
+
+    std::string mfs_str = mfs.toString();
+
+    armem::io::FileSystemMemoryManager mfs2(storagePath);
+    mfs2.update();
+
+    std::string mfs2_str = mfs2.toString();
+
+    //std::cout << "MFS1: " << std::endl;
+    //std::cout << mfs_str << std::endl;
+    //std::cout << "MFS2: " << std::endl;
+    //std::cout << mfs2_str << std::endl;
+    BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true);
+
+    armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName);
+    BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true);
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_string_setup)
+{
+    std::string memoryName = "TestMemory_StringSetup";
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
+    t->setObjectName("TestObjectType1");
+
+    aron::typenavigator::AronStringTypeNavigatorPtr tm1(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronStringTypeNavigatorPtr tm2(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronStringTypeNavigatorPtr tm3(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronStringTypeNavigatorPtr tm4(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath()));
+    t->addAcceptedType("theString1", tm1);
+    t->addAcceptedType("theString2", tm2);
+    t->addAcceptedType("theString3", tm3);
+    t->addAcceptedType("theString4", tm4);
+
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
+
+    // export memory
+    std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /
+    std::filesystem::remove_all(storagePath);
+    armem::io::FileSystemMemoryManager mfs(storagePath, true);
+    mfs.writeOnDisk(memory);
+
+    std::string mfs_str = mfs.toString();
+
+    armem::io::FileSystemMemoryManager mfs2(storagePath);
+    mfs2.update();
+
+    std::string mfs2_str = mfs2.toString();
+
+    //std::cout << "MFS1: " << std::endl;
+    //std::cout << mfs_str << std::endl;
+    //std::cout << "MFS2: " << std::endl;
+    //std::cout << mfs2_str << std::endl;
+    BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true);
+
+    armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName);
+    BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true);
+}
+
+BOOST_AUTO_TEST_CASE(test_memory_export__easy_bool_setup)
+{
+    std::string memoryName = "TestMemory_BoolSetup";
+
+    aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath()));
+    t->setObjectName("TestObjectType1");
+
+    aron::typenavigator::AronBoolTypeNavigatorPtr tm1(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronBoolTypeNavigatorPtr tm2(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronBoolTypeNavigatorPtr tm3(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath()));
+    aron::typenavigator::AronBoolTypeNavigatorPtr tm4(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath()));
+    t->addAcceptedType("theBool1", tm1);
+    t->addAcceptedType("theBool2", tm2);
+    t->addAcceptedType("theBool3", tm3);
+    t->addAcceptedType("theBool4", tm4);
+
+    armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1);
 
     // export memory
     std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /