diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
index dc7309cf18c368d85994cc06a2944b856d9832f4..87d2e61b49da4f325fe2fdfed72914c26ec8d5c2 100644
--- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
@@ -26,10 +26,10 @@
 
 #include <SimoxUtility/algorithm/string.h>
 
+#include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/error.h>
-#include <RobotAPI/libraries/armem/core/ice_conversions.h>
-#include <RobotAPI/libraries/armem/server/MemoryRemoteGui.h>
 #include <RobotAPI/libraries/armem/core/ice_conversions_templates.h>
+#include <RobotAPI/libraries/armem/server/MemoryRemoteGui.h>
 
 #include <RobotAPI/components/armem/server/ExampleMemory/aron/ExampleData.aron.generated.h>
 
@@ -162,7 +162,7 @@ namespace armarx
         ExecuteActionOutputSeq output;
         for (const auto& [id, path] : input)
         {
-            armem::MemoryID memoryID = armem::fromIce<armem::MemoryID>(id);
+            auto memoryID = fromIce<armem::MemoryID>(id);
             if (path == ActionPath{"hi"})
             {
                 ARMARX_INFO << "Hello, " << memoryID.str() << "!";
@@ -193,7 +193,8 @@ namespace armarx
                     update.instancesData = { instance->data() };
 
                     armem::Commit newCommit;
-                    this->commit(armem::toIce<armem::data::Commit>(newCommit));
+                    newCommit.add(update);
+                    this->commit(armarx::toIce<armem::data::Commit>(newCommit));
 
                     tab.rebuild = true;
                     ARMARX_INFO << "Duplicated " << memoryID;
@@ -209,6 +210,65 @@ namespace armarx
         return output;
     }
 
+    // PREDICTING
+    armem::query::data::Result
+    ExampleMemory::predict(const armem::data::MemoryID& memoryID,
+                           const armem::predictions::data::PredictionSettings& predictionSettings)
+    {
+        armem::query::data::Result result;
+
+        std::string engine = predictionSettings.predictionEngine;
+        if (engine.empty() || engine == "Latest")
+        {
+            auto boID = fromIce<armem::MemoryID>(memoryID);
+            armem::client::QueryBuilder builder;
+            builder.latestEntitySnapshot(boID);
+            auto queryResult =
+                query(armarx::toIce<armem::query::data::Input>(builder.buildQueryInput()));
+            if (queryResult.success)
+            {
+                auto readMemory = fromIce<armem::wm::Memory>(queryResult.memory);
+                auto* latest = readMemory.findLatestSnapshot(boID);
+                if (latest != nullptr)
+                {
+                    armem::wm::Memory resultMemory;
+                    armem::EntityUpdate update;
+                    update.entityID = boID;
+                    latest->forEachInstance([&update](const armem::wm::EntityInstance& instance)
+                                            { update.instancesData.push_back(instance.data()); });
+                    update.timeCreated = armem::Time::Now();
+                    resultMemory.update(update);
+                    result.success = true;
+                    result.memory = armarx::toIce<armem::data::MemoryPtr>(resultMemory);
+                }
+                else
+                {
+                    result.success = false;
+                    result.errorMessage =
+                        "Could not find entity referenced by MemoryID " + boID.str();
+                }
+            }
+            else
+            {
+                result.success = false;
+                result.errorMessage = "Could not find entity referenced by MemoryID " + boID.str();
+            }
+        }
+        else
+        {
+            result.success = false;
+            result.errorMessage = "This memory does not support the prediction engine " + engine;
+        }
+
+        return result;
+    }
+
+    armem::predictions::data::PredictionEngineSeq
+    ExampleMemory::getAvailableEngines()
+    {
+        return {"Latest"};
+    }
+
     // REMOTE GUI
 
     void ExampleMemory::createRemoteGuiTab()
diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h
index 62ea177f496296082cac90aecc6e9e6f35d450a8..7bf37aaf15871469e890b0230b2d9b3c3ffdf9e9 100644
--- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h
+++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.h
@@ -71,6 +71,13 @@ namespace armarx
         armem::actions::GetActionsOutputSeq getActions(const armem::actions::GetActionsInputSeq& input) override;
         armem::actions::ExecuteActionOutputSeq executeActions(const armem::actions::ExecuteActionInputSeq& input) override;
 
+        // PredictingMemoryInterface interface
+    public:
+        armem::query::data::Result
+        predict(const armem::data::MemoryID& memoryID,
+                const armem::predictions::data::PredictionSettings& predictionSettings) override;
+        armem::predictions::data::PredictionEngineSeq getAvailableEngines() override;
+
 
     protected:
 
diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
index 4ce314f5a5409368ae41b33d0a6eb68903553077..5e413cb273156654dd6a20493576ee9e6692e5df 100644
--- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
+++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
@@ -117,8 +117,10 @@ namespace armarx::armem::server::plugins
         return {};
     }
 
-    // PREDICTIONS
-    armem::query::data::Result ReadWritePluginUser::predict(const data::MemoryID&  /*memoryID*/, const armem::predictions::data::PredictionSettings&  /*predictionSettings*/, const ::Ice::Current& /*unused*/)
+    armem::query::data::Result
+    ReadWritePluginUser::predict(
+        const data::MemoryID&  /*memoryID*/,
+        const armem::predictions::data::PredictionSettings&  /*predictionSettings*/)
     {
         armem::query::data::Result result;
         result.success = false;
@@ -127,9 +129,26 @@ namespace armarx::armem::server::plugins
         return result;
     }
 
-    armem::predictions::data::PredictionEngineSeq ReadWritePluginUser::getAvailableEngines(const ::Ice::Current& /*unused*/)
+    armem::predictions::data::PredictionEngineSeq
+    ReadWritePluginUser::getAvailableEngines()
     {
         return {};
     }
 
+    // PREDICTIONS
+    armem::query::data::Result
+    ReadWritePluginUser::predict(
+        const data::MemoryID& memoryID,
+        const armem::predictions::data::PredictionSettings& predictionSettings,
+        const ::Ice::Current& /*unused*/)
+    {
+        return predict(memoryID, predictionSettings);
+    }
+
+    armem::predictions::data::PredictionEngineSeq
+    ReadWritePluginUser::getAvailableEngines(const ::Ice::Current& /*unused*/)
+    {
+        return getAvailableEngines();
+    }
+
 } // namespace armarx::armem::server::plugins
diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h
index 3ecd8915fcc67d824ab71b9b340a4dd6fbf4093c..c09da7b7b0eb1ced33e918cadb51043794db98f0 100644
--- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h
+++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.h
@@ -56,8 +56,11 @@ namespace armarx::armem::server::plugins
         virtual armem::actions::ExecuteActionOutputSeq executeActions(const armem::actions::ExecuteActionInputSeq& inputs, const ::Ice::Current&) override;
 
         // PredictingInterface interface
-        virtual armem::query::data::Result predict(const data::MemoryID& memoryID, const armem::predictions::data::PredictionSettings& predictionSettings, const ::Ice::Current& = Ice::emptyCurrent) override;
-        virtual armem::predictions::data::PredictionEngineSeq getAvailableEngines(const ::Ice::Current& = Ice::emptyCurrent) override;
+        virtual armem::query::data::Result predict(const data::MemoryID& memoryID, const armem::predictions::data::PredictionSettings& predictionSettings);
+        virtual armem::predictions::data::PredictionEngineSeq getAvailableEngines();
+
+        virtual armem::query::data::Result predict(const data::MemoryID& memoryID, const armem::predictions::data::PredictionSettings& predictionSettings, const ::Ice::Current&) override;
+        virtual armem::predictions::data::PredictionEngineSeq getAvailableEngines(const ::Ice::Current&) override;
 
     public: