diff --git a/source/RobotAPI/libraries/aron/common/aron/framed.xml b/source/RobotAPI/libraries/aron/common/aron/framed.xml
index 0cb7d5e0487b1a5a30c512d85c6eb6202df96cba..8f708bbc5638790c506f9f687aa07bd39c57dda7 100644
--- a/source/RobotAPI/libraries/aron/common/aron/framed.xml
+++ b/source/RobotAPI/libraries/aron/common/aron/framed.xml
@@ -25,6 +25,15 @@
             </ObjectChild>
         </Object>
 
+        <Object name="armarx::arondto::FramedDirection">
+            <ObjectChild key='header'>
+                <armarx::arondto::FrameID />
+            </ObjectChild>
+            <ObjectChild key='direction'>
+                <Position />
+            </ObjectChild>
+        </Object>
+
         <Object name="armarx::arondto::FramedOrientation">
             <ObjectChild key='header'>
                 <armarx::arondto::FrameID />
diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.cpp
index 27ab8bff523e82ccd52f02bede86a33b51e79225..b154f810c46a783e3ea6b11576466944252fb224 100644
--- a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.cpp
+++ b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.cpp
@@ -24,6 +24,26 @@ namespace armarx::aron::framed
         dto.position.z() = bo.z;
     }
 
+    void
+    fromAron(const arondto::FramedDirection& dto, armarx::FramedDirection& bo)
+    {
+        bo.frame = dto.header.frame;
+        bo.agent = dto.header.agent;
+        bo.x = dto.direction.x();
+        bo.y = dto.direction.y();
+        bo.z = dto.direction.z();
+    }
+
+    void
+    toAron(arondto::FramedDirection& dto, const armarx::FramedDirection& bo)
+    {
+        dto.header.frame = bo.frame;
+        dto.header.agent = bo.agent;
+        dto.direction.x() = bo.x;
+        dto.direction.y() = bo.y;
+        dto.direction.z() = bo.z;
+    }
+
     void
     fromAron(const arondto::FramedOrientation& dto, armarx::FramedOrientation& bo)
     {
diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h
index 39c39967dd495c4d0956806f7814b4e74c4a63b0..9413d98fa5f00f25ef404b28b1b4e8a08578d483 100644
--- a/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h
+++ b/source/RobotAPI/libraries/aron/common/aron_conversions/framed.h
@@ -7,6 +7,7 @@
 namespace armarx::arondto
 {
     class FramedPosition;
+    class FramedDirection;
     class FramedOrientation;
     class FramedPose;
     class FrameID;
@@ -17,6 +18,9 @@ namespace armarx::aron::framed
     void fromAron(const arondto::FramedPosition& dto, armarx::FramedPosition& bo);
     void toAron(arondto::FramedPosition& dto, const armarx::FramedPosition& bo);
 
+    void fromAron(const arondto::FramedDirection& dto, armarx::FramedDirection& bo);
+    void toAron(arondto::FramedDirection& dto, const armarx::FramedDirection& bo);
+
     void fromAron(const arondto::FramedOrientation& dto, armarx::FramedOrientation& bo);
     void toAron(arondto::FramedOrientation& dto, const armarx::FramedOrientation& bo);
 
diff --git a/source/RobotAPI/libraries/skills/provider/CMakeLists.txt b/source/RobotAPI/libraries/skills/provider/CMakeLists.txt
index 83d51089a1298c56819a820b02e4db8eb3b0ff5a..8cba2a561cc61f3b54d42eddf87839dc1c37e805 100644
--- a/source/RobotAPI/libraries/skills/provider/CMakeLists.txt
+++ b/source/RobotAPI/libraries/skills/provider/CMakeLists.txt
@@ -11,6 +11,8 @@ armarx_add_library(
 
         RobotAPI::Core
         RobotAPI::skills::core
+
+        RobotAPI::armem_robot_state
         
         aronjsonconverter
         arondatatypeconverter
@@ -30,6 +32,9 @@ armarx_add_library(
         detail/SkillImplementationWrapper.cpp
         SkillContext.cpp
 
+
+        mixins/RobotReadingSkillMixin.cpp
+
         
     HEADERS
         SkillProviderComponentPlugin.h
diff --git a/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.cpp b/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4ddc20c7d31d16afebb789709889a5a735509c18
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.cpp
@@ -0,0 +1,21 @@
+#include "RobotReadingSkillMixin.h"
+
+namespace armarx::skills::mixin
+{
+
+    RobotReadingSkillMixin::RobotReadingSkillMixin() = default;
+
+    RobotReadingSkillMixin::RobotReadingSkillMixin(
+        const armem::robot_state::VirtualRobotReader& r) :
+        robotReader(r)
+    {
+    }
+
+    SpecificRobotReadingSkillMixin::SpecificRobotReadingSkillMixin(
+        const std::string& rn,
+        const armem::robot_state::VirtualRobotReader& r) :
+        robotName(rn), robotReader(r)
+    {
+    }
+
+} // namespace armarx::skills::mixin
diff --git a/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.h b/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.h
index 9394445a59534482aee91a15a6e5e16429483564..4c07ee75640a8cf7769ab3e3c82058aa96559ba7 100644
--- a/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.h
+++ b/source/RobotAPI/libraries/skills/provider/mixins/RobotReadingSkillMixin.h
@@ -10,9 +10,8 @@ namespace armarx::skills::mixin
     {
         armem::robot_state::VirtualRobotReader robotReader;
 
-        RobotReadingSkillMixin(const armem::robot_state::VirtualRobotReader& r) : robotReader(r)
-        {
-        }
+        RobotReadingSkillMixin();
+        RobotReadingSkillMixin(const armem::robot_state::VirtualRobotReader& r);
     };
 
     struct SpecificRobotReadingSkillMixin
@@ -21,9 +20,6 @@ namespace armarx::skills::mixin
         armem::robot_state::VirtualRobotReader robotReader;
 
         SpecificRobotReadingSkillMixin(const std::string& rn,
-                                       const armem::robot_state::VirtualRobotReader& r) :
-            robotName(rn), robotReader(r)
-        {
-        }
+                                       const armem::robot_state::VirtualRobotReader& r);
     };
 } // namespace armarx::skills::mixin