diff --git a/source/RobotAPI/libraries/armem/client/ReadStream.cpp b/source/RobotAPI/libraries/armem/client/ReadStream.cpp
index e341e139f66b40168ba4dd9b809d921835953838..04a715fe10dfa583c7123c19f26a81f2a5b9fd1f 100644
--- a/source/RobotAPI/libraries/armem/client/ReadStream.cpp
+++ b/source/RobotAPI/libraries/armem/client/ReadStream.cpp
@@ -19,7 +19,7 @@ namespace armarx::armem::client
     }
 
     std::optional<wm::EntitySnapshot>
-    ReadStream::pollBlocking(SnapshotCallbackT& callback)
+    ReadStream::pollBlocking(const SnapshotCallbackT& callback)
     {
         if (isPolling.exchange(true))
         {
@@ -34,7 +34,7 @@ namespace armarx::armem::client
     }
 
     void
-    ReadStream::pollAsync(SnapshotCallbackT& callback)
+    ReadStream::pollAsync(const SnapshotCallbackT& callback)
     {
         if (isPolling.exchange(true))
         {
@@ -46,7 +46,7 @@ namespace armarx::armem::client
     }
 
     std::optional<wm::EntitySnapshot>
-    ReadStream::_pollBlocking(SnapshotCallbackT& callback)
+    ReadStream::_pollBlocking(const SnapshotCallbackT& callback)
     {
         while (not pollingStoppedExternally)
         {
@@ -71,7 +71,7 @@ namespace armarx::armem::client
     }
 
     std::optional<wm::EntitySnapshot>
-    ReadStream::pollOnce(SnapshotCallbackT& callback)
+    ReadStream::pollOnce(const SnapshotCallbackT& callback)
     {
         if (isPolling.exchange(true))
         {
@@ -85,7 +85,7 @@ namespace armarx::armem::client
     }
 
     std::optional<wm::EntitySnapshot>
-    ReadStream::_pollOnce(SnapshotCallbackT& callback)
+    ReadStream::_pollOnce(const SnapshotCallbackT& callback)
     {
         // Make sure to not busy wait. Also wait until probably data is available in first iteration.
         metronome.waitForNextTick();
diff --git a/source/RobotAPI/libraries/armem/client/ReadStream.h b/source/RobotAPI/libraries/armem/client/ReadStream.h
index bd549770f1831cb849a1b9716609dd7816362c49..c86fb5b0675ddfc3fa3c4cd9abe49df5ab7a3016 100644
--- a/source/RobotAPI/libraries/armem/client/ReadStream.h
+++ b/source/RobotAPI/libraries/armem/client/ReadStream.h
@@ -67,7 +67,7 @@ namespace armarx::armem::client
          * @return The snapshot object that returns false.
          * @throw armarx::armem::error::ReadStreamAlreadyPolling If the stream is already polling.
          */
-        std::optional<wm::EntitySnapshot> pollBlocking(SnapshotCallbackT& callback);
+        std::optional<wm::EntitySnapshot> pollBlocking(const SnapshotCallbackT& callback);
 
         /**
          * @brief Poll in a new thread as long as callback returns true.
@@ -83,7 +83,7 @@ namespace armarx::armem::client
          * @param callback Function to call on each entity snapshot.
          * @throw armarx::armem::error::ReadStreamAlreadyPolling If the stream is already polling.
          */
-        void pollAsync(SnapshotCallbackT& callback);
+        void pollAsync(const SnapshotCallbackT& callback);
         /**
          * @brief Stop a running polling loop.
          *
@@ -114,12 +114,12 @@ namespace armarx::armem::client
          * @param callback Function to call on each entity snapshot.
          * @throw armarx::armem::error::ReadStreamAlreadyPolling If the stream is already polling.
          */
-        std::optional<wm::EntitySnapshot> pollOnce(SnapshotCallbackT& callback);
+        std::optional<wm::EntitySnapshot> pollOnce(const SnapshotCallbackT& callback);
 
 
     private:
-        std::optional<wm::EntitySnapshot> _pollBlocking(SnapshotCallbackT& callback);
-        std::optional<wm::EntitySnapshot> _pollOnce(SnapshotCallbackT& callback);
+        std::optional<wm::EntitySnapshot> _pollBlocking(const SnapshotCallbackT& callback);
+        std::optional<wm::EntitySnapshot> _pollOnce(const SnapshotCallbackT& callback);
 
 
     private: