diff --git a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
index 9af95336c1343d0f1ea4691627ed7b4499b6c406..8ee7ee817971ce0dcb13a9cc90c296f32672777c 100644
--- a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
+++ b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
@@ -75,6 +75,18 @@ namespace armarx
         void rtActivate();
         void rtDeactivate();
     };
+
+    template<class ControlTargetType>
+    class JointControllerTemplate : public virtual JointController
+    {
+        static_assert(std::is_base_of<ControlTargetBase, ControlTargetType>::value, "ControlTargetType has to inherit SensorValueBase");
+    public:
+        using JointController::JointController;
+
+        virtual ControlTargetType* getControlTarget() final;
+
+        ControlTargetType controlTarget;
+    };
 }
 
 //inline functions
@@ -152,5 +164,11 @@ namespace armarx
         rtPostDeactivateController();
         rtResetTarget();
     }
+
+    template<class ControlTargetType>
+    inline ControlTargetType* JointControllerTemplate<ControlTargetType>::getControlTarget()
+    {
+        return &controlTarget;
+    }
 }
 #endif