diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
index c018ecd9a2610c823241f3b482d799598e37aa8b..d6d8a49a944aa190c47152aced4065bd15a19885 100644
--- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
+++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
@@ -4,6 +4,7 @@
 #include <queue>
 #include <thread>
 #include <functional>
+#include <type_traits>
 
 #include <ArmarXCore/core/ComponentPlugin.h>
 #include <ArmarXCore/core/ManagedIceObject.h>
@@ -66,6 +67,18 @@ namespace armarx
         void addSkill(const skills::LambdaSkill::FunT&, const skills::SkillDescription&);
         void addSkill(std::unique_ptr<skills::Skill>&&);
 
+        template<typename T>
+        T* addSkill()
+        {
+            static_assert(std::is_base_of<skills::Skill, T>::value, "T must be derived from skills::Skill!");
+            static_assert(std::is_default_constructible<T>::value, "T must be default constructible!");
+
+            auto skill = std::make_unique<T>();
+            auto* skillPtr = skill.get();
+            addSkill(std::move(skill));
+            return static_cast<T*>(skillPtr);
+        }
+
     private:
         armarx::plugins::SkillProviderComponentPlugin* plugin = nullptr;