diff --git a/source/armarx/navigation/client/ComponentPlugin.cpp b/source/armarx/navigation/client/ComponentPlugin.cpp
index 6266c680f8fb74e54b51735bb07310fb09b1a94c..368ca6495f189e7263bc654a5e66816a72ae1bfa 100644
--- a/source/armarx/navigation/client/ComponentPlugin.cpp
+++ b/source/armarx/navigation/client/ComponentPlugin.cpp
@@ -57,7 +57,7 @@ armarx::navigation::client::ComponentPlugin::configureNavigator(
 {
     ARMARX_TRACE;
 
-    ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
+    // ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
 
     eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler>
     {
@@ -88,9 +88,7 @@ armarx::navigation::client::ComponentPlugin::configureNavigator(
 {
     ARMARX_TRACE;
 
-    ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
-
-    eventHandler = std::make_unique<MemorySubscriber>(configId, memoryNameSystem);
+    // ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
 
     iceNavigator.createConfig(stackConfig, configId);
 
diff --git a/source/armarx/navigation/client/ComponentPlugin.h b/source/armarx/navigation/client/ComponentPlugin.h
index 38ab565fb95c1bea71ee78e4838dbb6f050771ed..043a1e3c2917f03b8d7a06191c8596666f2e2bef 100644
--- a/source/armarx/navigation/client/ComponentPlugin.h
+++ b/source/armarx/navigation/client/ComponentPlugin.h
@@ -38,7 +38,8 @@ namespace armarx::navigation::client
                                 const std::string& configId);
 
         void configureNavigator(const client::NavigationStackConfig& stackConfig,
-                                const std::string& configId, armarx::armem::client::MemoryNameSystem& memoryNameSystem);
+                                const std::string& configId,
+                                armarx::armem::client::MemoryNameSystem& memoryNameSystem);
 
     private:
         static constexpr const char* PROPERTY_NAME = "nav.NavigatorName";
@@ -62,13 +63,12 @@ namespace armarx::navigation::client
         void configureNavigator(const client::NavigationStackConfig& stackConfig);
 
         Navigator& getNavigator();
-        
+
         // Non-API
         ~ComponentPluginUser() override;
 
     private:
         ComponentPlugin* plugin = nullptr;
-
     };
 
 } // namespace armarx::navigation::client
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.";