diff --git a/source/armarx/navigation/client/services/MemorySubscriber.cpp b/source/armarx/navigation/client/services/MemorySubscriber.cpp
index f759b1641375987013597517da9f364d9dedcc19..033ea36fac8deca65420af0b8de792ca88b77ffd 100644
--- a/source/armarx/navigation/client/services/MemorySubscriber.cpp
+++ b/source/armarx/navigation/client/services/MemorySubscriber.cpp
@@ -27,12 +27,37 @@ namespace armarx::navigation::client
         ARMARX_INFO << "MemorySubscriber: will handle all events newer than " << lastMemoryPoll
                     << ".";
 
+        // subscription api
+        armem::MemoryID subscriptionID;
+        subscriptionID.coreSegmentName = "Events";
+        subscriptionID.providerSegmentName = callerId;
+
+        // TODO add: memoryNameSystem.subscribe(subscriptionID, this, &MemorySubscriber::onEntityUpdate);
+
+        // polling api
         ARMARX_TRACE;
         task = new armarx::PeriodicTask<MemorySubscriber>(
             this, &MemorySubscriber::runPollMemoryEvents, 20);
         task->start();
     }
 
+    void
+    MemorySubscriber::onEntityUpdate(const armem::MemoryID& subscriptionID,
+                                     const std::vector<armem::MemoryID>& snapshotIDs)
+    {
+        ARMARX_INFO << "Received " << snapshotIDs.size() << " events from memory";
+        const armem::client::QueryResult qResult = memoryReader.queryMemoryIDs(snapshotIDs);
+
+        if (not qResult.success) /* c++20 [[unlikely]] */
+        {
+            ARMARX_WARNING << deactivateSpam(0.1F) << "Memory lookup failed.";
+            return;
+        }
+
+        handleEvents(qResult.memory);
+    }
+
+
     void
     MemorySubscriber::handleEvent(const armem::wm::EntityInstance& memoryEntity)
     {
diff --git a/source/armarx/navigation/client/services/MemorySubscriber.h b/source/armarx/navigation/client/services/MemorySubscriber.h
index 5a9fcbc6b251ca21438c8043b3a42e187b1b82a4..059305ddf91b90020a878e85dd1de24088c99d99 100644
--- a/source/armarx/navigation/client/services/MemorySubscriber.h
+++ b/source/armarx/navigation/client/services/MemorySubscriber.h
@@ -38,6 +38,10 @@ namespace armarx::navigation::client
         void runPollMemoryEvents();
         void handleEvents(const armem::wm::Memory& memory);
 
+
+        void onEntityUpdate(const armem::MemoryID& subscriptionID,
+                            const std::vector<armem::MemoryID>& snapshotIDs);
+                            
     private:
         const std::string callerId;
         armem::client::MemoryNameSystem& memoryNameSystem;
diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp
index 6532665f5ec93209e1066526118f68142ec3a830..8d0ad97dd5cb08389892e819c3cfc53f4f9f14d7 100644
--- a/source/armarx/navigation/components/Navigator/Navigator.cpp
+++ b/source/armarx/navigation/components/Navigator/Navigator.cpp
@@ -50,6 +50,7 @@
 
 #include "RobotAPI/components/ArViz/Client/Elements.h"
 #include "RobotAPI/components/ArViz/Client/elements/Color.h"
+#include "RobotAPI/libraries/armem/core/MemoryID.h"
 #include "RobotAPI/libraries/armem/core/Time.h"
 #include "RobotAPI/libraries/armem_vision/OccupancyGridHelper.h"
 #include "RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h"
@@ -163,7 +164,6 @@ namespace armarx::navigation::components
         navRemoteGui = std::make_unique<NavigatorRemoteGui>(remoteGui, *this);
         navRemoteGui->enable();
 
-
         initialized = true;
 
         ARMARX_INFO << "Initialized. Will now respond to navigation requests.";