diff --git a/source/Navigation/components/Navigator/Navigator.cpp b/source/Navigation/components/Navigator/Navigator.cpp
index ab82d8a29927a0e782790d597ae77b2b8f076e93..bda158c830126f36e73698adcd63a2603386df5f 100644
--- a/source/Navigation/components/Navigator/Navigator.cpp
+++ b/source/Navigation/components/Navigator/Navigator.cpp
@@ -21,7 +21,13 @@
  */
 
 #include "Navigator.h"
+
 #include <iterator>
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
 #include <Eigen/src/Geometry/Transform.h>
 
 #include "ArmarXCore/core/services/tasks/TaskUtil.h"
@@ -83,55 +89,49 @@ namespace armarx::nav::components
         return p;
     }
 
-    void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
-                           const aron::data::AronDictPtr& stackConfig,
-                           const std::string& navigationMode,
-                           const Ice::Current&)
+    std::string
+    Navigator::createConfig(const aron::data::AronDictPtr& stackConfig,
+                            const Ice::Current&)
     {
+        // TODO: Not thread-safe.
+        const std::string uuid = boost::uuids::to_string(boost::uuids::random_generator()());
+
         server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
+        navigators.emplace(uuid, server::Navigator{stack, scene, executor});
 
-        if (navigator.has_value())
-        {
-            navigator->stop();
-            navigator.reset();
-        }
+        return uuid;
+    }
 
-        if (not navigator.has_value())
-        {
-            navigator.emplace(stack, scene, executor);
-        }
+    void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
+                           const std::string& navigationMode,
+                           const std::string& configId,
+                           const Ice::Current&)
+    {
+        // TODO: Error handling.
 
-        navigator->moveTo(convert(waypoints), core::NavigationFramesMap.from_name(navigationMode));
+        navigators.at(configId).moveTo(convert(waypoints), core::NavigationFramesMap.from_name(navigationMode));
     }
 
     void Navigator::moveTowards(const Eigen::Vector3f& direction,
-                                const aron::data::AronDictPtr& stackConfig,
                                 const std::string& navigationMode,
+                                const std::string& configId,
                                 const Ice::Current&)
     {
-        server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
+        // TODO: Error handling.
 
-        if (navigator.has_value())
-        {
-            navigator->stop();
-            navigator.reset();
-        }
+        navigators.at(configId).moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode));
+    }
 
-        if (not navigator.has_value())
-        {
-            navigator.emplace(stack, scene, executor);
-        }
+    void
+    Navigator::pauseMovement(const Ice::Current&)
+    {
 
-        navigator->moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode));
     }
 
-    void Navigator::stop(const Ice::Current&)
+    void
+    Navigator::resumeMovement(const Ice::Current&)
     {
-        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 4ec574d3a61311bfc40fd8ae56d0f5c155982eda..a22d4de00766b499cebb59ff16db3fa695fb6c2b 100644
--- a/source/Navigation/components/Navigator/Navigator.h
+++ b/source/Navigation/components/Navigator/Navigator.h
@@ -75,17 +75,22 @@ namespace armarx::nav::components
         /// @see armarx::ManagedIceObject::getDefaultName()
         std::string getDefaultName() const override;
 
+        std::string createConfig(const aron::data::AronDictPtr& stackConfig,
+                                 const Ice::Current&) override;
+
         void moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
-                    const aron::data::AronDictPtr& config,
                     const std::string& navigationMode,
+                    const std::string& configId,
                     const Ice::Current&) override;
 
         void moveTowards(const Eigen::Vector3f& direction,
-                         const aron::data::AronDictPtr& config,
                          const std::string& navigationMode,
+                         const std::string& configId,
                          const Ice::Current&) override;
 
-        void stop(const Ice::Current&) override;
+        void pauseMovement(const Ice::Current&) override;
+
+        void resumeMovement(const Ice::Current&) override;
 
     protected:
         /// @see PropertyUser::createPropertyDefinitions()
@@ -118,7 +123,7 @@ namespace armarx::nav::components
 
         core::Scene scene;
         server::PlatformUnitExecutor executor;
-        std::optional<server::Navigator> navigator;
+        std::map<std::string, server::Navigator> navigators;
 
     };
 } // namespace armarx::nav::components
diff --git a/source/Navigation/components/Navigator/NavigatorInterface.ice b/source/Navigation/components/Navigator/NavigatorInterface.ice
index 2a5ac274039db6211c2b508625628b60f6edb2f4..f292d927239034a7145768908580459acb67e1ca 100644
--- a/source/Navigation/components/Navigator/NavigatorInterface.ice
+++ b/source/Navigation/components/Navigator/NavigatorInterface.ice
@@ -38,9 +38,11 @@ module armarx
 
             interface NavigatorInterface
             {
-                void moveTo(Eigen::Matrix4fSeq waypoints, aron::data::AronDict config, string navigationFrame);
-                void moveTowards(Eigen::Vector3f direction, aron::data::AronDict config, string navigationFrame);
-                idempotent void stop();
+                string createConfig(aron::data::AronDict config);
+                void moveTo(Eigen::Matrix4fSeq waypoints, string navigationFrame, string configId);
+                void moveTowards(Eigen::Vector3f direction, string navigationFrame, string configId);
+                idempotent void pauseMovement();
+                idempotent void resumeMovement();
             };
 
         };
diff --git a/source/Navigation/libraries/server/Navigator.cpp b/source/Navigation/libraries/server/Navigator.cpp
index 1fa419999752ca7f3efb99031750bc7e373633e0..da9c759445f807965e78bc55e699700a1a2f5447 100644
--- a/source/Navigation/libraries/server/Navigator.cpp
+++ b/source/Navigation/libraries/server/Navigator.cpp
@@ -40,7 +40,7 @@ namespace armarx::nav::server
     Navigator::Navigator(const server::NavigationStack& navigationStack,
                          const core::Scene& scene,
                          ExecutorInterface& executor) :
-        stack(navigationStack), scene(scene), executor{executor}
+        stack(navigationStack), scene(&scene), executor{&executor}
     {
         setTag("Navigator");
     }
@@ -62,7 +62,7 @@ namespace armarx::nav::server
                 globalWaypoints.reserve(waypoints.size());
                 std::transform(std::begin(waypoints), std::end(waypoints), std::back_inserter(globalWaypoints), [&](const core::Pose & p)
                 {
-                    return core::Pose(scene.robot->getGlobalPose()) * p;
+                    return core::Pose(scene->robot->getGlobalPose()) * p;
                 });
                 break;
         }
@@ -99,7 +99,7 @@ namespace armarx::nav::server
                 res.safeVelocity = stack.safetyControl->control(res.controlVelocity.value());
             }
 
-            executor.move(res.velocity());
+            executor->move(res.velocity());
         }
     }
 
diff --git a/source/Navigation/libraries/server/Navigator.h b/source/Navigation/libraries/server/Navigator.h
index 499a46259956081a12c44cbe848653a923def274..091aa639f4bbb0e0bcdc3f90f135f66e28d5e114 100644
--- a/source/Navigation/libraries/server/Navigator.h
+++ b/source/Navigation/libraries/server/Navigator.h
@@ -49,7 +49,9 @@ namespace armarx::nav::server
 
     class Navigator : public armarx::Logging
     {
+
     public:
+
         Navigator(const server::NavigationStack& navigationStack, const core::Scene& scene, ExecutorInterface& executor);
         virtual ~Navigator();
 
@@ -61,11 +63,10 @@ namespace armarx::nav::server
 
         void stop();
 
-    protected:
     private:
         server::NavigationStack stack;
-        const core::Scene& scene;
+        const core::Scene* scene;
+        ExecutorInterface* executor;
 
-        ExecutorInterface& executor;
     };
 } // namespace armarx::nav::server
diff --git a/source/Navigation/libraries/server/execution/PlatformUnitExecutor.cpp b/source/Navigation/libraries/server/execution/PlatformUnitExecutor.cpp
index be4e3d0fabcbc8209cb4a6d136515ef82ae4cef5..9e2efb088e7777168feee03315ec08f80e4fed4c 100644
--- a/source/Navigation/libraries/server/execution/PlatformUnitExecutor.cpp
+++ b/source/Navigation/libraries/server/execution/PlatformUnitExecutor.cpp
@@ -16,21 +16,7 @@ namespace armarx::nav::server
 
     void PlatformUnitExecutor::move(const core::Twist& twist)
     {
-        if (enabled)
-        {
-            platformUnit->move(twist.linear.x(), twist.linear.y(), twist.angular.z());
-        }
-    }
-
-    void PlatformUnitExecutor::disableAndStop()
-    {
-        enabled = false;
-        platformUnit->stopPlatform();
-    }
-
-    void PlatformUnitExecutor::enable()
-    {
-        enabled = true;
+        platformUnit->move(twist.linear.x(), twist.linear.y(), twist.angular.z());
     }
 
 } // namespace armarx::nav::server
diff --git a/source/Navigation/libraries/server/execution/PlatformUnitExecutor.h b/source/Navigation/libraries/server/execution/PlatformUnitExecutor.h
index bccc7a91337d341f2f9699daa8ef4a757a3a8087..91f9cc78402204f41636ffb2e279928076cecde3 100644
--- a/source/Navigation/libraries/server/execution/PlatformUnitExecutor.h
+++ b/source/Navigation/libraries/server/execution/PlatformUnitExecutor.h
@@ -22,15 +22,10 @@ namespace armarx::nav::server
 
         void move(const core::Twist& twist) override;
 
-        void disableAndStop();
-        void enable();
-
     private:
 
         PlatformUnitInterfacePrx platformUnit;
 
-        std::atomic_bool enabled{true};
-
     };
 
 }  // namespace armarx::nav::server