diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
index 9ba708cf2b66e3a60589db335d45f04dfaf4f3c2..bca1b041325f5532e8205dbe43c9c0b09429953b 100644
--- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp
@@ -26,9 +26,9 @@
 
 #include <SimoxUtility/algorithm/string.h>
 
-#include <RobotAPI/libraries/armem/client/Prediction.h>
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem/core/ice_conversions_templates.h>
 #include <RobotAPI/libraries/armem/server/MemoryRemoteGui.h>
 
@@ -227,7 +227,7 @@ namespace armarx
     armem::prediction::data::PredictionResult
     ExampleMemory::predictSingle(const armem::prediction::data::PredictionRequest& request)
     {
-        armem::client::PredictionResult result;
+        armem::PredictionResult result;
 
         std::string engine = request.settings.predictionEngineID;
         if (engine.empty() || engine == "Latest")
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
index b13fdcc0f60f34aa2bc28a982730c553d639f6c3..52fa8e1a0538dd41fb4ac6bb760464d31e78eb18 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
@@ -26,9 +26,9 @@
 
 #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h>
 #include <RobotAPI/libraries/ArmarXObjects/ice_conversions.h>
-#include <RobotAPI/libraries/armem/client/Prediction.h>
 #include <RobotAPI/libraries/armem/client/query.h>
 #include <RobotAPI/libraries/armem/core/ice_conversions_templates.h>
+#include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h>
 
 
@@ -231,8 +231,8 @@ namespace armarx::armem::server::obj
         std::vector<armem::prediction::data::PredictionResult> results;
         for (const auto& request : requests)
         {
-            auto boRequest = armarx::fromIce<armem::client::PredictionRequest>(request);
-            armem::client::PredictionResult result;
+            auto boRequest = armarx::fromIce<armem::PredictionRequest>(request);
+            armem::PredictionResult result;
             result.snapshotID = boRequest.snapshotID;
             if (armem::contains(workingMemory().id().withCoreSegmentName("Instance"),
                                 boRequest.snapshotID) &&
diff --git a/source/RobotAPI/libraries/ArmarXObjects/predictions.cpp b/source/RobotAPI/libraries/ArmarXObjects/predictions.cpp
index 427868519c15f4f3c31342f980d3ee245f528a88..fc9dfe5081f69215398cd5c6eefaf7c8c1fbd705 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/predictions.cpp
+++ b/source/RobotAPI/libraries/ArmarXObjects/predictions.cpp
@@ -25,6 +25,7 @@
 #include <SimoxUtility/math/pose/pose.h>
 #include <SimoxUtility/math/regression/linear.h>
 
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h>
 
 namespace armarx::objpose
diff --git a/source/RobotAPI/libraries/ArmarXObjects/predictions.h b/source/RobotAPI/libraries/ArmarXObjects/predictions.h
index d9b647f9dd81a1e04ff435a0e20c94368cdb89f4..03b3f7de2eb2267ba43c356c44988e374792c591 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/predictions.h
+++ b/source/RobotAPI/libraries/ArmarXObjects/predictions.h
@@ -25,7 +25,6 @@
 
 #include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h>
 #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h>
-#include <RobotAPI/libraries/armem/client/Prediction.h>
 
 namespace armarx::objpose
 {
diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 8dba8b8e74695995a30cbbda10168fddb6cc3914..62da8840409c17d8968c34171120a230a379ef33 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -18,6 +18,7 @@ set(LIB_FILES
     core/MemoryID.cpp
     core/MemoryID_operators.cpp
     core/operations.cpp
+    core/Prediction.cpp
     core/SuccessHeader.cpp
     core/Time.cpp
     core/aron_conversions.cpp
@@ -51,7 +52,6 @@ set(LIB_FILES
 
 
     client/MemoryNameSystem.cpp
-    client/Prediction.cpp
     client/Reader.cpp
     client/Writer.cpp
 
@@ -82,11 +82,12 @@ set(LIB_HEADERS
 
     core/actions.h
     core/Commit.h
+    core/container_maps.h
     core/DataMode.h
     core/MemoryID.h
     core/MemoryID_operators.h
     core/operations.h
-    core/container_maps.h
+    core/Prediction.h
     core/SuccessHeader.h
     core/Time.h
     core/aron_conversions.h
@@ -128,7 +129,6 @@ set(LIB_HEADERS
     client.h
     client/forward_declarations.h
     client/MemoryNameSystem.h
-    client/Prediction.h
     client/Reader.h
     client/Writer.h
 
diff --git a/source/RobotAPI/libraries/armem/client/Reader.h b/source/RobotAPI/libraries/armem/client/Reader.h
index 02e1442ef6fda8a3390b66c1a7a5517c74af0fd7..7ecb453c845524edce1a217c49db671efbf3c9e7 100644
--- a/source/RobotAPI/libraries/armem/client/Reader.h
+++ b/source/RobotAPI/libraries/armem/client/Reader.h
@@ -9,10 +9,10 @@
 #include <RobotAPI/interface/armem/server/ReadingMemoryInterface.h>
 #include <RobotAPI/interface/armem/server/StoringMemoryInterface.h>
 #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem/core/wm/memory_definitions.h>
 
 #include "Query.h"
-#include "Prediction.h"
 
 
 namespace armarx::armem::client
diff --git a/source/RobotAPI/libraries/armem/client/Prediction.cpp b/source/RobotAPI/libraries/armem/core/Prediction.cpp
similarity index 98%
rename from source/RobotAPI/libraries/armem/client/Prediction.cpp
rename to source/RobotAPI/libraries/armem/core/Prediction.cpp
index dce9473bd58d557d3a37a511c7c257c65305bee8..9880d03a2f4e4c28e649e50f08a1f0b93ce52cb2 100644
--- a/source/RobotAPI/libraries/armem/client/Prediction.cpp
+++ b/source/RobotAPI/libraries/armem/core/Prediction.cpp
@@ -26,7 +26,7 @@
 
 #include <RobotAPI/libraries/armem/core/ice_conversions.h>
 
-namespace armarx::armem::client
+namespace armarx::armem
 {
     PredictionEngine
     PredictionEngine::fromIce(const armem::prediction::data::PredictionEngine& ice)
@@ -132,4 +132,4 @@ namespace armarx::armem::client
         result.prediction = aron::data::Dict::FromAronDictDTO(ice.prediction);
     }
 
-} // namespace armarx::armem::client
+} // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem/client/Prediction.h b/source/RobotAPI/libraries/armem/core/Prediction.h
similarity index 97%
rename from source/RobotAPI/libraries/armem/client/Prediction.h
rename to source/RobotAPI/libraries/armem/core/Prediction.h
index 0e9ac30d5e6e797dd228ca6f313c6cdbed19bf5b..a8ec9ee52436b5b5d96c5c8013d058f8d6abc6e5 100644
--- a/source/RobotAPI/libraries/armem/client/Prediction.h
+++ b/source/RobotAPI/libraries/armem/core/Prediction.h
@@ -26,7 +26,7 @@
 #include <RobotAPI/libraries/armem/core/MemoryID.h>
 #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h>
 
-namespace armarx::armem::client
+namespace armarx::armem
 {
 
     struct PredictionEngine
@@ -83,4 +83,4 @@ namespace armarx::armem::client
     void toIce(armem::prediction::data::PredictionResult& ice, const PredictionResult& result);
     void fromIce(const armem::prediction::data::PredictionResult& ice, PredictionResult& result);
 
-} // namespace armarx::armem::client
+} // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
index 53027b9035b74ce3d6ca95a19f3c83a74ba199a0..44454b87d83b905edff8b925b0aa5831ffd8715e 100644
--- a/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
+++ b/source/RobotAPI/libraries/armem/server/plugins/ReadWritePluginUser.cpp
@@ -1,8 +1,8 @@
 #include "ReadWritePluginUser.h"
 #include "Plugin.h"
 
-#include <RobotAPI/libraries/armem/client/Prediction.h>
 #include <RobotAPI/libraries/armem/core/error.h>
+#include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
 
 #include <ArmarXCore/core/Component.h>
@@ -125,7 +125,7 @@ namespace armarx::armem::server::plugins
         armem::prediction::data::PredictionResultSeq result;
         for (auto request : requests)
         {
-            armem::client::PredictionResult singleResult;
+            armem::PredictionResult singleResult;
             singleResult.success = false;
             singleResult.errorMessage = "This memory does not implement predictions.";
             singleResult.prediction = nullptr;
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h
index 0aa9b930411f0a6f6336ea439fbb98ff6dc74a50..da1426a6f4db83633f8d0cce30dcc080cd724ece 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h
@@ -18,7 +18,7 @@
 #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
 #include <RobotAPI/libraries/ArmarXObjects/forward_declarations.h>
 
-#include <RobotAPI/libraries/armem/client/Prediction.h>
+#include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
 #include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h>
 
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
index 7c7dac41c1a74bca1606721b86de565f821a7608..959d3b5fad43a9d7909798d58550e36afb377d10 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp
@@ -494,8 +494,8 @@ namespace armarx::armem::server::obj::instance
 
             if (result.success)
             {
-                armem::client::PredictionSettings settings =
-                        armem::client::PredictionSettings::fromIce(request.settings);
+                armem::PredictionSettings settings =
+                        armem::PredictionSettings::fromIce(request.settings);
 
                 if (settings.predictionEngineID.empty()
                     or settings.predictionEngineID == "Linear Position Regression")
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
index 47206a42fa74036015b875f104c0503172d9ac2e..eb7d90cd267566d10487ce4d2b390ccc63eee586 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Visu.cpp
@@ -10,7 +10,6 @@
 #include <RobotAPI/libraries/ArmarXObjects/ice_conversions.h>
 #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
 #include <RobotAPI/libraries/ArmarXObjects/predictions.h>
-#include <RobotAPI/libraries/armem/client/Prediction.h>
 
 
 namespace armarx::armem::server::obj::instance