diff --git a/source/Navigation/components/Navigator/Navigator.cpp b/source/Navigation/components/Navigator/Navigator.cpp
index 05a025c3732c60159ea4039f89f774566b4dd3de..ab82d8a29927a0e782790d597ae77b2b8f076e93 100644
--- a/source/Navigation/components/Navigator/Navigator.cpp
+++ b/source/Navigation/components/Navigator/Navigator.cpp
@@ -32,7 +32,7 @@
 #include "Navigation/libraries/core/types.h"
 #include "Navigation/libraries/util/util.h"
 #include <Navigation/libraries/factories/NavigationStackFactory.h>
-#include <Navigation/libraries/server/Navigator.h>
+
 
 namespace armarx::nav::components
 {
@@ -88,13 +88,20 @@ namespace armarx::nav::components
                            const std::string& navigationMode,
                            const Ice::Current&)
     {
-        updateContext();
-
         server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
-        
-        server::Navigator navigator{stack, scene, executor};
 
-        navigator.moveTo(convert(waypoints), core::NavigationFramesMap.from_name(navigationMode));
+        if (navigator.has_value())
+        {
+            navigator->stop();
+            navigator.reset();
+        }
+
+        if (not navigator.has_value())
+        {
+            navigator.emplace(stack, scene, executor);
+        }
+
+        navigator->moveTo(convert(waypoints), core::NavigationFramesMap.from_name(navigationMode));
     }
 
     void Navigator::moveTowards(const Eigen::Vector3f& direction,
@@ -103,15 +110,28 @@ namespace armarx::nav::components
                                 const Ice::Current&)
     {
         server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
-        server::Navigator navigator{stack, scene, executor};
 
-        navigator.moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode));
+        if (navigator.has_value())
+        {
+            navigator->stop();
+            navigator.reset();
+        }
+
+        if (not navigator.has_value())
+        {
+            navigator.emplace(stack, scene, executor);
+        }
+
+        navigator->moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode));
     }
 
     void Navigator::stop(const Ice::Current&)
     {
-        //server::Navigator navigator;
-        //navigator.stop();
+        if (navigator.has_value())
+        {
+            navigator->stop();
+            navigator.reset();
+        }
     }
 
     armarx::PropertyDefinitionsPtr Navigator::createPropertyDefinitions()
diff --git a/source/Navigation/components/Navigator/Navigator.h b/source/Navigation/components/Navigator/Navigator.h
index 95ee26e2cc2492682852bfdc3c3cc8362aa6673b..4ec574d3a61311bfc40fd8ae56d0f5c155982eda 100644
--- a/source/Navigation/components/Navigator/Navigator.h
+++ b/source/Navigation/components/Navigator/Navigator.h
@@ -25,6 +25,7 @@
 
 
 // STD/STL
+#include <optional>
 #include <string>
 #include <vector>
 
@@ -40,6 +41,7 @@
 // Navigation
 #include "Navigation/libraries/core/StaticScene.h"
 #include "Navigation/libraries/core/types.h"
+#include <Navigation/libraries/server/Navigator.h>
 #include <Navigation/libraries/server/execution/PlatformUnitExecutor.h>
 #include <Navigation/components/Navigator/NavigatorInterface.h>
 
@@ -116,7 +118,7 @@ namespace armarx::nav::components
 
         core::Scene scene;
         server::PlatformUnitExecutor executor;
-
+        std::optional<server::Navigator> navigator;
 
     };
 } // namespace armarx::nav::components
diff --git a/source/Navigation/libraries/server/Navigator.cpp b/source/Navigation/libraries/server/Navigator.cpp
index 927792ff38fa8c568bb7c3a6805a77c26b197efc..d49b6bcedd2575edcd8722f62ee906f749a0ce38 100644
--- a/source/Navigation/libraries/server/Navigator.cpp
+++ b/source/Navigation/libraries/server/Navigator.cpp
@@ -45,6 +45,11 @@ namespace armarx::nav::server
         setTag("Navigator");
     }
 
+    Navigator::~Navigator()
+    {
+        stop();
+    }
+
     void Navigator::moveTo(const std::vector<core::Pose>& waypoints, const core::NavigationFrames& navigationFrame)
     {
         std::vector<core::Pose> globalWaypoints;
diff --git a/source/Navigation/libraries/server/Navigator.h b/source/Navigation/libraries/server/Navigator.h
index 4e07f21b550c839a4d657e023a2da6f3b6d0dd8f..499a46259956081a12c44cbe848653a923def274 100644
--- a/source/Navigation/libraries/server/Navigator.h
+++ b/source/Navigation/libraries/server/Navigator.h
@@ -51,6 +51,7 @@ namespace armarx::nav::server
     {
     public:
         Navigator(const server::NavigationStack& navigationStack, const core::Scene& scene, ExecutorInterface& executor);
+        virtual ~Navigator();
 
         void moveTo(const std::vector<core::Pose>& waypoints, const core::NavigationFrames& navigationFrame);
         void moveToAbsolute(const std::vector<core::Pose>& waypoints);