diff --git a/source/armarx/navigation/client/ComponentPlugin.cpp b/source/armarx/navigation/client/ComponentPlugin.cpp
index 0f35e89dde9d1dcec4b9dd1f8deeb7510db58f83..628d090c40468ec8b51feb6e64c15668e072e47e 100644
--- a/source/armarx/navigation/client/ComponentPlugin.cpp
+++ b/source/armarx/navigation/client/ComponentPlugin.cpp
@@ -1,18 +1,19 @@
 #include <memory>
 
-#include "ArmarXCore/core/exceptions/local/ExpressionException.h"
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
-#include "RobotAPI/components/armem/MemoryNameSystem/MemoryNameSystem.h"
-#include "RobotAPI/libraries/armem/client/MemoryNameSystem.h"
-#include "RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h"
-#include "RobotAPI/libraries/armem/client/plugins/PluginUser.h"
+#include <RobotAPI/components/armem/MemoryNameSystem/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
+#include <RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h>
+#include <RobotAPI/libraries/armem/client/plugins/PluginUser.h>
 
-#include "armarx/navigation/client/services/MemorySubscriber.h"
+#include <armarx/navigation/client/services/SimpleEventHandler.h>
 #include <armarx/navigation/client/ComponentPlugin.h>
 #include <armarx/navigation/client/Navigator.h>
+#include <armarx/navigation/client/services/MemorySubscriber.h>
 
 // ComponentPlugin
 
@@ -45,12 +46,6 @@ armarx::navigation::client::ComponentPlugin::preOnConnectComponent()
     ARMARX_TRACE;
     const std::string componentName = parent().getName();
 
-    if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>())
-    {
-        auto mns = parent<armarx::armem::client::plugins::ListeningPluginUser>().memoryNameSystem();
-        parent<armarx::navigation::client::ComponentPluginUser>().memoryNameSystem = &mns;
-    }
-
     ARMARX_CHECK_NOT_NULL(navigatorPrx) << "Navigator proxy is null!";
     iceNavigator.setNavigatorComponent(navigatorPrx);
 }
@@ -61,7 +56,29 @@ armarx::navigation::client::ComponentPlugin::configureNavigator(
     const std::string& configId)
 {
     ARMARX_TRACE;
+
+    ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!";
+
+    eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler>
+    {
+        if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>())
+        {
+            ARMARX_INFO << "Using memory event callbacks.";
+            auto memoryNameSystem =
+                parent<armarx::armem::client::plugins::ListeningPluginUser>().memoryNameSystem();
+            return std::make_unique<MemorySubscriber>(configId, memoryNameSystem);
+        }
+
+        ARMARX_INFO << "Cannot use memory event callbacks as this component is not derived from "
+                       "`armarx::armem::client::plugins::ListeningPluginUser`";
+
+        return std::make_unique<SimpleEventHandler>();
+    }();
+
     iceNavigator.createConfig(stackConfig, configId);
+
+    navigator = std::make_unique<Navigator>(Navigator::InjectedServices{
+        .navigator = &iceNavigator, .subscriber = eventHandler.get()});
 }
 
 // ComponentPluginUser
@@ -80,21 +97,5 @@ armarx::navigation::client::ComponentPluginUser::configureNavigator(
     plugin->configureNavigator(stackConfig, getName());
 }
 
-void
-armarx::navigation::client::ComponentPluginUser::configureNavigator(
-    const client::NavigationStackConfig& stackConfig,
-    const std::string& configId)
-{
-    ARMARX_CHECK_NULL(navigatorServices.subscriber)
-        << "`configureNavigator` can only be called once atm.";
-
-    if (memoryNameSystem != nullptr)
-    {
-        memorySubscriber = std::make_unique<MemorySubscriber>(configId, *memoryNameSystem);
-        navigatorServices.subscriber = memorySubscriber.get();
-    }
-
-    iceNavigator.createConfig(stackConfig, configId);
-}
 
 armarx::navigation::client::ComponentPluginUser::~ComponentPluginUser() = default;
diff --git a/source/armarx/navigation/client/ComponentPlugin.h b/source/armarx/navigation/client/ComponentPlugin.h
index 0ecfccdf3eb4ba8d048e00ad7a1fe576f10fb41c..0f63131a890e6bb79fc946c7df274b1978571b40 100644
--- a/source/armarx/navigation/client/ComponentPlugin.h
+++ b/source/armarx/navigation/client/ComponentPlugin.h
@@ -3,25 +3,24 @@
 
 #include <ArmarXCore/core/ComponentPlugin.h>
 #include <ArmarXCore/core/ManagedIceObject.h>
-#include "RobotAPI/libraries/armem/client/MemoryNameSystem.h"
 
+#include <armarx/navigation/client/ComponentPlugin.h>
 #include <armarx/navigation/client/Navigator.h>
 #include <armarx/navigation/client/ice/NavigatorInterface.h>
 #include <armarx/navigation/client/services/IceNavigator.h>
-#include <armarx/navigation/client/services/MemorySubscriber.h>
 #include <armarx/navigation/client/services/SimpleEventHandler.h>
 
 
 namespace armarx::navigation::client
 {
 
+    class Navigator;
+
     class ComponentPlugin : public armarx::ComponentPlugin
     {
-
     public:
         ComponentPlugin(ManagedIceObject& parent, const std::string& prefix) :
-            armarx::ComponentPlugin(parent, prefix), navigator(navigatorServices){};
-//        using armarx::ComponentPlugin::ComponentPlugin;
+            armarx::ComponentPlugin(parent, prefix){};
 
         ~ComponentPlugin() override;
 
@@ -39,13 +38,11 @@ namespace armarx::navigation::client
 
         client::NavigatorInterfacePrx navigatorPrx;
         IceNavigator iceNavigator;
-        // MemorySubscriber memorySubscriber;
-        SimpleEventHandler memorySubscriber; // FIXME
-        Navigator::InjectedServices navigatorServices{.navigator = &iceNavigator,
-                                                      .subscriber = &memorySubscriber};
+
+        std::unique_ptr<SimpleEventHandler> eventHandler;
 
     public:
-        Navigator navigator;
+        std::unique_ptr<Navigator> navigator;
     };
 
 
@@ -56,29 +53,18 @@ namespace armarx::navigation::client
         ComponentPluginUser();
 
         void configureNavigator(const client::NavigationStackConfig& stackConfig);
-        Navigator& getNavigator() {
-            return plugin->navigator;
+
+        Navigator&
+        getNavigator()
+        {
+            return *plugin->navigator;
         }
         // Non-API
         ~ComponentPluginUser() override;
 
     private:
-        IceNavigator iceNavigator;
-
-        armem::client::MemoryNameSystem* memoryNameSystem;
-        // MemorySubscriber memorySubscriber;
-        // SimpleEventHandler memorySubscriber; // FIXME
-        Navigator::InjectedServices navigatorServices{.navigator = &iceNavigator,
-                                                      .subscriber = nullptr};
-
-
         ComponentPlugin* plugin = nullptr;
 
-       std::unique_ptr<MemorySubscriber> memorySubscriber;
-
-
-    public:
-        Navigator navigator;
     };
 
 } // namespace armarx::navigation::client