diff --git a/source/Navigation/components/Navigator/CMakeLists.txt b/source/Navigation/components/Navigator/CMakeLists.txt
index f876b2f18ebedc460b65deeef70e37548194b357..fd803d7b2d32d908b742a00b184babe3d2f58ef4 100644
--- a/source/Navigation/components/Navigator/CMakeLists.txt
+++ b/source/Navigation/components/Navigator/CMakeLists.txt
@@ -24,7 +24,8 @@ armarx_add_component(
         # RobotAPI
         RobotAPICore
         RobotAPIInterfaces
-        ## RobotAPIComponentPlugins  # For ArViz and other plugins.
+        RobotAPIArmarXObjects
+        RobotAPIComponentPlugins  # For ArViz and other plugins.
 
         # This project
         ## ${PROJECT_NAME}Interfaces  # For ice interfaces from this package.
@@ -32,6 +33,7 @@ armarx_add_component(
         NavigatorInterfaces
 
         Navigation::server
+        Navigation::util
         Navigation::factories
 
     SOURCES
diff --git a/source/Navigation/components/Navigator/Navigator.cpp b/source/Navigation/components/Navigator/Navigator.cpp
index 83ccf9fbc61c718bcf6ec2153133e08b9cbdd0f0..157fef079711e741470cab9e40f857271e1a97ae 100644
--- a/source/Navigation/components/Navigator/Navigator.cpp
+++ b/source/Navigation/components/Navigator/Navigator.cpp
@@ -21,8 +21,13 @@
  */
 
 #include "Navigator.h"
+#include <iterator>
+#include <Eigen/src/Geometry/Transform.h>
+
 #include "ArmarXCore/core/services/tasks/TaskUtil.h"
 
+#include "RobotAPI/libraries/core/remoterobot/RemoteRobot.h"
+
 // Navigation
 #include "Navigation/libraries/core/types.h"
 #include "Navigation/libraries/util/util.h"
@@ -32,8 +37,7 @@
 namespace armarx::nav::components
 {
 
-    Navigator::Navigator() :
-        executor{platformUnit}
+    Navigator::Navigator() : executor{platformUnit}
     {
     }
 
@@ -68,6 +72,17 @@ namespace armarx::nav::components
         return "Navigator";
     }
 
+    std::vector<core::Pose> convert(const std::vector<Eigen::Matrix4f>& wps)
+    {
+        std::vector<core::Pose> p;
+        p.reserve(wps.size());
+        std::transform(wps.begin(), wps.end(), std::back_inserter(p), [](const auto & p)
+        {
+            return Eigen::Affine3f(p);
+        });
+        return p;
+    }
+
     void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
                            const aron::data::AronDictPtr& stackConfig,
                            const std::string& navigationMode,
@@ -78,7 +93,7 @@ namespace armarx::nav::components
         server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene);
         server::Navigator navigator{stack, scene, executor};
 
-        navigator.moveTo(waypoints, core::NavigationFramesMap.from_name(navigationMode));
+        navigator.moveTo(convert(waypoints), core::NavigationFramesMap.from_name(navigationMode));
     }
 
     void Navigator::moveTowards(const Eigen::Vector3f& direction,
diff --git a/source/Navigation/components/Navigator/Navigator.h b/source/Navigation/components/Navigator/Navigator.h
index 04c7879f625da33fed12c49825be75718d67d86f..95ee26e2cc2492682852bfdc3c3cc8362aa6673b 100644
--- a/source/Navigation/components/Navigator/Navigator.h
+++ b/source/Navigation/components/Navigator/Navigator.h
@@ -111,11 +111,12 @@ namespace armarx::nav::components
     private:
         // TODO update context periodically
 
-        core::Scene scene;
 
+        PlatformUnitInterfacePrx platformUnit;
+
+        core::Scene scene;
         server::PlatformUnitExecutor executor;
 
-        PlatformUnitListenerPrx platformUnit;
 
     };
 } // namespace armarx::nav::components
diff --git a/source/Navigation/libraries/core/types.h b/source/Navigation/libraries/core/types.h
index faf02bb82208f8b511edfd57cd93476b49f6c5b7..b00682034dd561e7edce9141fb8303c04aedf523 100644
--- a/source/Navigation/libraries/core/types.h
+++ b/source/Navigation/libraries/core/types.h
@@ -46,7 +46,9 @@ namespace armarx::nav::core
         {NavigationFrames::Absolute, "Absolute"}};
 
     using Pose = Eigen::Affine3f;
-    
+
+    using Direction = Eigen::Vector3f;
+
     struct Twist
     {
         Eigen::Vector3f linear;
diff --git a/source/Navigation/libraries/server/Navigator.cpp b/source/Navigation/libraries/server/Navigator.cpp
index bf2be7607ea3b91db3efb35df210181e92bd4341..7b77b759c05264ac6f060d0aebaade02ae666070 100644
--- a/source/Navigation/libraries/server/Navigator.cpp
+++ b/source/Navigation/libraries/server/Navigator.cpp
@@ -1,6 +1,7 @@
 #include "Navigator.h"
 
 #include <algorithm>
+#include <Eigen/src/Geometry/Transform.h>
 
 #include <VirtualRobot/Robot.h>
 
@@ -44,18 +45,19 @@ namespace armarx::nav::server
         setTag("Navigator");
     }
 
-    void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame)
+    void Navigator::moveTo(const std::vector<core::Pose>& waypoints, const core::NavigationFrames& navigationFrame)
     {
-        std::vector<Eigen::Matrix4f> globalWaypoints;
+        std::vector<core::Pose> globalWaypoints;
         switch (navigationFrame)
         {
             case core::NavigationFrames::Absolute:
                 globalWaypoints = waypoints;
                 break;
             case core::NavigationFrames::Relative:
-                std::transform(std::begin(waypoints), std::end(waypoints), std::begin(globalWaypoints), [&](const Eigen::Matrix4f & m)
+                globalWaypoints.reserve(waypoints.size());
+                std::transform(std::begin(waypoints), std::end(waypoints), std::back_inserter(globalWaypoints), [&](const core::Pose & p)
                 {
-                    return scene.robot->getGlobalPose() * m;
+                    return core::Pose(scene.robot->getGlobalPose()) * p;
                 });
                 break;
         }
@@ -63,13 +65,13 @@ namespace armarx::nav::server
         moveToAbsolute(globalWaypoints);
     }
 
-    void Navigator::moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints)
+    void Navigator::moveToAbsolute(const std::vector<core::Pose>& waypoints)
     {
         ARMARX_INFO << "Planning global trajectory";
         ARMARX_CHECK_NOT_NULL(stack.globalPlanner);
 
         StackResult res;
-        res.globalTrajectory = stack.globalPlanner->plan(waypoints.at(0));
+        res.globalTrajectory = stack.globalPlanner->plan(Eigen::Affine3f(waypoints.at(0)));
 
         if (stack.localPlanner)
         {
@@ -96,12 +98,12 @@ namespace armarx::nav::server
         }
     }
 
-    void Navigator::moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame)
+    void Navigator::moveTowards(const core::Direction& direction, const core::NavigationFrames& navigationFrame)
     {
 
     }
 
-    void Navigator::moveTowardsAbsolute(const Eigen::Vector3f direction)
+    void Navigator::moveTowardsAbsolute(const core::Direction& direction)
     {
 
     }
diff --git a/source/Navigation/libraries/server/Navigator.h b/source/Navigation/libraries/server/Navigator.h
index 6ae203bf31b50d1f006853f758fece9a02b836f1..4e07f21b550c839a4d657e023a2da6f3b6d0dd8f 100644
--- a/source/Navigation/libraries/server/Navigator.h
+++ b/source/Navigation/libraries/server/Navigator.h
@@ -52,11 +52,11 @@ namespace armarx::nav::server
     public:
         Navigator(const server::NavigationStack& navigationStack, const core::Scene& scene, ExecutorInterface& executor);
 
-        void moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame);
-        void moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints);
+        void moveTo(const std::vector<core::Pose>& waypoints, const core::NavigationFrames& navigationFrame);
+        void moveToAbsolute(const std::vector<core::Pose>& waypoints);
 
-        void moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame);
-        void moveTowardsAbsolute(const Eigen::Vector3f direction);
+        void moveTowards(const core::Direction& direction, const core::NavigationFrames& navigationFrame);
+        void moveTowardsAbsolute(const core::Direction& direction);
 
         void stop();
 
diff --git a/source/Navigation/libraries/server/test/serverTest.cpp b/source/Navigation/libraries/server/test/serverTest.cpp
index 86da740623a8e88f9aa363221b72d9a3827e1b14..61047bd4dcd194c32953040b54875058a7638968 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(std::vector{goal}, core::NavigationFrames::Absolute);
 
     BOOST_CHECK_EQUAL(true, true);
 }