diff --git a/source/Navigation/components/Navigator/Navigator.cpp b/source/Navigation/components/Navigator/Navigator.cpp
index b941324fe1d2264b503cea1d845a3e81603f844c..83ccf9fbc61c718bcf6ec2153133e08b9cbdd0f0 100644
--- a/source/Navigation/components/Navigator/Navigator.cpp
+++ b/source/Navigation/components/Navigator/Navigator.cpp
@@ -32,6 +32,11 @@
 namespace armarx::nav::components
 {
 
+    Navigator::Navigator() :
+        executor{platformUnit}
+    {
+    }
+
     Navigator::~Navigator()
     {
     }
@@ -51,11 +56,11 @@ namespace armarx::nav::components
     void Navigator::onExitComponent()
     {
     }
-    
-    void Navigator::updateContext() 
+
+    void Navigator::updateContext()
     {
-        ctx.staticScene = staticScene();
-        ctx.robot = getRobot();
+        scene.staticScene = staticScene();
+        scene.robot = getRobot();
     }
 
     std::string Navigator::getDefaultName() const
@@ -63,34 +68,34 @@ namespace armarx::nav::components
         return "Navigator";
     }
 
-    void Navigator::moveTo(const Eigen::Matrix4f& pose,
+    void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
                            const aron::data::AronDictPtr& stackConfig,
                            const std::string& navigationMode,
                            const Ice::Current&)
     {
         updateContext();
 
-        server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, ctx);
-        server::Navigator navigator{stack, ctx, executor};
-
-        SimplePeriodicTask<> task(
-            [](){navigator.updateContext()}
-        );
-        task.start()
-        
+        server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
+        server::Navigator navigator{stack, scene, executor};
 
-        navigator.moveTo(core::Pose(pose), core::NavigationFramesMap.from_name(navigationMode));
+        navigator.moveTo(waypoints, core::NavigationFramesMap.from_name(navigationMode));
     }
 
-    void Navigator::moveTowards(const Eigen::Matrix4f& direction,
+    void Navigator::moveTowards(const Eigen::Vector3f& direction,
                                 const aron::data::AronDictPtr& stackConfig,
                                 const std::string& navigationMode,
                                 const Ice::Current&)
     {
-        server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, ctx);
-        server::Navigator navigator{stack, ctx};
+        server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
+        server::Navigator navigator{stack, scene, executor};
 
-        // navigator.moveTowards(direction); TODO
+        navigator.moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode));
+    }
+
+    void Navigator::stop(const Ice::Current&)
+    {
+        //server::Navigator navigator;
+        //navigator.stop();
     }
 
     armarx::PropertyDefinitionsPtr Navigator::createPropertyDefinitions()
@@ -116,22 +121,21 @@ namespace armarx::nav::components
         return def;
     }
 
-    core::StaticScenePtr Navigator::staticScene()
+    core::StaticScene Navigator::staticScene()
     {
-        core::StaticScenePtr scene(new core::StaticScene);
+        core::StaticScene scene;
 
         objpose::ObjectPoseSeq objectPoses = ObjectPoseClientPluginUser::getObjectPoses();
 
-        scene->objects = util::asSceneObjects(objectPoses);
+        scene.objects = util::asSceneObjects(objectPoses);
 
         return scene;
     }
-    
-    VirtualRobot::RobotPtr Navigator::getRobot() 
-    {
 
+    VirtualRobot::RobotPtr Navigator::getRobot()
+    {
         auto robot = RemoteRobot::createLocalCloneFromFile(
-            getRobotStateComponent(), VirtualRobot::RobotIO::RobotDescription::eFull);
+                         getRobotStateComponent(), VirtualRobot::RobotIO::RobotDescription::eFull);
         // auto robot = RemoteRobot::createLocalClone(getRobotStateComponent());
         ARMARX_CHECK_NOT_NULL(robot);
 
diff --git a/source/Navigation/components/Navigator/Navigator.h b/source/Navigation/components/Navigator/Navigator.h
index 84f41c1728bd6085e7be87cf9dfe7313c28dbed2..04c7879f625da33fed12c49825be75718d67d86f 100644
--- a/source/Navigation/components/Navigator/Navigator.h
+++ b/source/Navigation/components/Navigator/Navigator.h
@@ -26,6 +26,7 @@
 
 // STD/STL
 #include <string>
+#include <vector>
 
 // Eigen
 #include <Eigen/Core>
@@ -39,6 +40,7 @@
 // Navigation
 #include "Navigation/libraries/core/StaticScene.h"
 #include "Navigation/libraries/core/types.h"
+#include <Navigation/libraries/server/execution/PlatformUnitExecutor.h>
 #include <Navigation/components/Navigator/NavigatorInterface.h>
 
 
@@ -64,21 +66,25 @@ namespace armarx::nav::components
     {
 
     public:
+
+        Navigator();
         ~Navigator() override;
 
         /// @see armarx::ManagedIceObject::getDefaultName()
         std::string getDefaultName() const override;
 
-        void moveTo(const Eigen::Matrix4f& pose,
+        void moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
                     const aron::data::AronDictPtr& config,
                     const std::string& navigationMode,
                     const Ice::Current&) override;
 
-        void moveTowards(const Eigen::Matrix4f& direction,
+        void moveTowards(const Eigen::Vector3f& direction,
                          const aron::data::AronDictPtr& config,
                          const std::string& navigationMode,
                          const Ice::Current&) override;
 
+        void stop(const Ice::Current&) override;
+
     protected:
         /// @see PropertyUser::createPropertyDefinitions()
         armarx::PropertyDefinitionsPtr createPropertyDefinitions() override;
@@ -97,7 +103,7 @@ namespace armarx::nav::components
 
         void updateContext();
 
-        core::StaticScenePtr staticScene();
+        core::StaticScene staticScene();
 
         VirtualRobot::RobotPtr getRobot();
 
@@ -105,9 +111,12 @@ namespace armarx::nav::components
     private:
         // TODO update context periodically
 
-        core::Scene ctx;
+        core::Scene scene;
+
+        server::PlatformUnitExecutor executor;
 
         PlatformUnitListenerPrx platformUnit;
+
     };
 } // namespace armarx::nav::components
 
diff --git a/source/Navigation/components/Navigator/NavigatorInterface.ice b/source/Navigation/components/Navigator/NavigatorInterface.ice
index 94c689e6957f97b5da93d9a20ddec933b3f2c15f..2a5ac274039db6211c2b508625628b60f6edb2f4 100644
--- a/source/Navigation/components/Navigator/NavigatorInterface.ice
+++ b/source/Navigation/components/Navigator/NavigatorInterface.ice
@@ -40,6 +40,7 @@ module armarx
             {
                 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();
             };
 
         };
diff --git a/source/Navigation/libraries/server/Navigator.cpp b/source/Navigation/libraries/server/Navigator.cpp
index 749ad8f3195e5f544e6e25532257f1527a78cee8..bf2be7607ea3b91db3efb35df210181e92bd4341 100644
--- a/source/Navigation/libraries/server/Navigator.cpp
+++ b/source/Navigation/libraries/server/Navigator.cpp
@@ -1,5 +1,7 @@
 #include "Navigator.h"
 
+#include <algorithm>
+
 #include <VirtualRobot/Robot.h>
 
 #include "ArmarXCore/core/exceptions/local/ExpressionException.h"
@@ -42,29 +44,32 @@ namespace armarx::nav::server
         setTag("Navigator");
     }
 
-    void Navigator::moveTo(const core::Pose& goal, const core::NavigationFrames& navigationFrame)
+    void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame)
     {
-        core::Pose globalPose;
+        std::vector<Eigen::Matrix4f> globalWaypoints;
         switch (navigationFrame)
         {
             case core::NavigationFrames::Absolute:
-                globalPose = goal;
+                globalWaypoints = waypoints;
                 break;
             case core::NavigationFrames::Relative:
-                globalPose = core::Pose(scene.robot->getGlobalPose()) * goal;
+                std::transform(std::begin(waypoints), std::end(waypoints), std::begin(globalWaypoints), [&](const Eigen::Matrix4f & m)
+                {
+                    return scene.robot->getGlobalPose() * m;
+                });
                 break;
         }
 
-        moveToAbsolute(globalPose);
+        moveToAbsolute(globalWaypoints);
     }
 
-    void Navigator::moveToAbsolute(const core::Pose& goal)
+    void Navigator::moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints)
     {
         ARMARX_INFO << "Planning global trajectory";
         ARMARX_CHECK_NOT_NULL(stack.globalPlanner);
 
         StackResult res;
-        res.globalTrajectory = stack.globalPlanner->plan(goal);
+        res.globalTrajectory = stack.globalPlanner->plan(waypoints.at(0));
 
         if (stack.localPlanner)
         {
@@ -90,4 +95,20 @@ namespace armarx::nav::server
             executor.move(res.velocity());
         }
     }
+
+    void Navigator::moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame)
+    {
+
+    }
+
+    void Navigator::moveTowardsAbsolute(const Eigen::Vector3f direction)
+    {
+
+    }
+
+    void Navigator::stop()
+    {
+
+    }
+
 } // namespace armarx::nav::server
diff --git a/source/Navigation/libraries/server/Navigator.h b/source/Navigation/libraries/server/Navigator.h
index 848daae375654212fbad448d03b9b9cbac662b10..6ae203bf31b50d1f006853f758fece9a02b836f1 100644
--- a/source/Navigation/libraries/server/Navigator.h
+++ b/source/Navigation/libraries/server/Navigator.h
@@ -52,8 +52,13 @@ namespace armarx::nav::server
     public:
         Navigator(const server::NavigationStack& navigationStack, const core::Scene& scene, ExecutorInterface& executor);
 
-        void moveTo(const core::Pose& goal, const core::NavigationFrames& navigationFrame);
-        void moveToAbsolute(const core::Pose& goal);
+        void moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame);
+        void moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints);
+
+        void moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame);
+        void moveTowardsAbsolute(const Eigen::Vector3f direction);
+
+        void stop();
 
     protected:
     private:
diff --git a/source/Navigation/libraries/server/test/serverTest.cpp b/source/Navigation/libraries/server/test/serverTest.cpp
index 6695d314a095931b6d961e2a00c1843bb196172b..86da740623a8e88f9aa363221b72d9a3827e1b14 100644
--- a/source/Navigation/libraries/server/test/serverTest.cpp
+++ b/source/Navigation/libraries/server/test/serverTest.cpp
@@ -65,7 +65,7 @@ BOOST_AUTO_TEST_CASE(testNavigator)
     server::DummyExecutor executor{scene.robot, server::DummyExecutor::Params()};
 
     server::Navigator navigator(stack, scene, executor);
-    navigator.moveTo(goal, core::NavigationFrames::Absolute);
+    navigator.moveTo({goal}, core::NavigationFrames::Absolute);
 
     BOOST_CHECK_EQUAL(true, true);
 }