diff --git a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CMakeLists.txt b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CMakeLists.txt
index 38578c06d1ad3cc784896d377a3986bbc73c3e6a..1b2caffb7f5f818c18e1ee068b6e9d7e0745eabc 100644
--- a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CMakeLists.txt
+++ b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CMakeLists.txt
@@ -17,12 +17,8 @@ set(GUI_MOC_HDRS ${HEADERS})
 set(GUI_UIS CartesianWaypointControlGuiWidget.ui)
 
 set(COMPONENT_LIBS
-    VirtualRobot
-
     SimpleConfigDialog
-
-    RobotAPIInterfaces
-    RobotAPICore
+    RobotAPIComponentPlugins
 )
 
 if(ArmarXGui_FOUND)
diff --git a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.cpp b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.cpp
index 5d2d12234ba03ac626e0579ed633b4699eae868d..45f540062c51b0e94559d76877fbb4e88456b640 100644
--- a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.cpp
@@ -59,21 +59,20 @@ namespace armarx
     {
         std::lock_guard g{_allMutex};
         _robotStateComponentName = settings->value("rsc", "Armar6StateComponent").toString().toStdString();
-        _robotUnitName = settings->value("ru", "Armar6Unit").toString().toStdString();
+        getRobotUnitComponentPlugin().setRobotUnitName(settings->value("ru", "Armar6Unit").toString().toStdString());
     }
 
     void CartesianWaypointControlGuiWidgetController::saveSettings(QSettings* settings)
     {
         std::lock_guard g{_allMutex};
         settings->setValue("rsc", QString::fromStdString(_robotStateComponentName));
-        settings->setValue("ru", QString::fromStdString(_robotUnitName));
+        settings->setValue("ru", QString::fromStdString(getRobotUnitComponentPlugin().getRobotUnitName()));
     }
 
     void CartesianWaypointControlGuiWidgetController::onInitComponent()
     {
         std::lock_guard g{_allMutex};
         usingProxy(_robotStateComponentName);
-        usingProxy(_robotUnitName);
     }
 
     void CartesianWaypointControlGuiWidgetController::onConnectComponent()
@@ -82,7 +81,6 @@ namespace armarx
         //proxies
         {
             _robotStateComponent = getProxy<RobotStateComponentInterfacePrx>(_robotStateComponentName);
-            _robotUnit = getProxy<RobotUnitInterfacePrx>(_robotUnitName);
         }
         //robot
         {
@@ -135,7 +133,7 @@ namespace armarx
         ARMARX_IMPORTANT << "Creating " << njointControllerClassName << " '"
                          << _controllerName << "'";
         _controller = NJointCartesianWaypointControllerInterfacePrx::checkedCast(
-                          _robotUnit->createNJointController(
+                          getRobotUnit()->createNJointController(
                               njointControllerClassName,
                               _controllerName,
                               cfg));
@@ -200,7 +198,7 @@ namespace armarx
     {
         std::lock_guard g{_allMutex};
         _robotStateComponentName = _dialog->getProxyName("rsc");
-        _robotUnitName = _dialog->getProxyName("ru");
+        getRobotUnitComponentPlugin().setRobotUnitName(_dialog->getProxyName("ru"));
     }
 
     void CartesianWaypointControlGuiWidgetController::triggerParsing()
diff --git a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.h b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.h
index ae6961634e680913480e1441c572af6f397aa15f..338c46f93c847135eb69a6437a2a5a5bf9243173 100644
--- a/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.h
+++ b/source/RobotAPI/gui-plugins/CartesianWaypointControlGui/CartesianWaypointControlGuiWidgetController.h
@@ -34,6 +34,7 @@
 #include <RobotAPI/interface/core/RobotState.h>
 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianWaypointController.h>
+#include <RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h>
 
 #include <RobotAPI/gui-plugins/CartesianWaypointControlGui/ui_CartesianWaypointControlGuiWidget.h>
 
@@ -59,7 +60,8 @@ namespace armarx
      */
     class ARMARXCOMPONENT_IMPORT_EXPORT
         CartesianWaypointControlGuiWidgetController:
-        public armarx::ArmarXComponentWidgetControllerTemplate < CartesianWaypointControlGuiWidgetController >
+        public armarx::ArmarXComponentWidgetControllerTemplate < CartesianWaypointControlGuiWidgetController >,
+        public virtual RobotUnitComponentPluginUser
     {
         Q_OBJECT
 
@@ -106,9 +108,7 @@ namespace armarx
 
     private:
         std::string                                     _robotStateComponentName;
-        std::string                                     _robotUnitName;
         RobotStateComponentInterfacePrx                 _robotStateComponent;
-        RobotUnitInterfacePrx                           _robotUnit;
         Ui::CartesianWaypointControlGuiWidget           _ui;
         QPointer<SimpleConfigDialog>                    _dialog;
         NJointCartesianWaypointControllerInterfacePrx   _controller;