diff --git a/source/RobotAPI/libraries/skills/core/Skill.cpp b/source/RobotAPI/libraries/skills/core/Skill.cpp
index 22e1fc21e6966486445c8d7a5b44036ef36d4925..a01eb4908baed4e5f6dc18c76f5493053d4bb886 100644
--- a/source/RobotAPI/libraries/skills/core/Skill.cpp
+++ b/source/RobotAPI/libraries/skills/core/Skill.cpp
@@ -19,10 +19,22 @@ namespace armarx
         }
 
         std::optional<TerminatedSkillStatusUpdate>
-        Skill::callSubskill(const SkillProxy& prx, const aron::data::DictPtr& params)
+        Skill::callSubskill(const SkillProxy& proxy)
         {
-            auto eid = callSubskillAsync(prx, params);
-            auto ret = prx.join(eid);
+            return callSubskill(proxy, proxy.getRootProfileParameters());
+        }
+
+        std::optional<TerminatedSkillStatusUpdate>
+        Skill::callSubskill(const SkillProxy& proxy, const aron::data::DictPtr& parameters)
+        {
+            auto executionId = callSubskillAsync(proxy, parameters);
+            auto ret = proxy.join(executionId);
+
+            // While the sub skill was running, our skill might also have been aborted.
+            // In this case, the correct behavour would be aborting ourselves.
+            // The caller of callSubskill() can catch the thrown error::SkillAbortedException
+            // if necessary.
+            throwIfSkillShouldTerminate();
             return ret;
         }
 
@@ -38,17 +50,20 @@ namespace armarx
         }
 
         std::optional<TerminatedSkillStatusUpdate>
-        Skill::callSubskillWithParameters(const SkillID& skillId,
-                                          const aron::data::DictPtr& parameters)
+        Skill::callSubskill(const SkillID& skillId)
         {
-            SkillProxy proxy(manager, skillId);
-            return callSubskill(proxy, parameters);
+            return callSubskill(SkillProxy(manager, skillId));
         }
 
         std::optional<TerminatedSkillStatusUpdate>
-        Skill::callSubskillBasedOnDefaultParameters(
-            const SkillID& skillId,
-            std::function<void(aron::data::DictPtr&)> parametersFunction)
+        Skill::callSubskill(const SkillID& skillId, const aron::data::DictPtr& parameters)
+        {
+            return callSubskill(SkillProxy(manager, skillId), parameters);
+        }
+
+        std::optional<TerminatedSkillStatusUpdate>
+        Skill::callSubskill(const SkillID& skillId,
+                            std::function<void(aron::data::DictPtr&)> parametersFunction)
         {
             SkillProxy proxy(manager, skillId);
 
@@ -63,13 +78,6 @@ namespace armarx
             return callSubskill(proxy, parameters);
         }
 
-        std::optional<TerminatedSkillStatusUpdate>
-        Skill::callSubskillWithDefaultParameters(const SkillID& skillId)
-        {
-            auto parametersFn = [](aron::data::DictPtr&) {};
-            return callSubskillBasedOnDefaultParameters(skillId, parametersFn);
-        }
-
         void
         Skill::updateParameters(const aron::data::DictPtr& d)
         {
diff --git a/source/RobotAPI/libraries/skills/core/Skill.h b/source/RobotAPI/libraries/skills/core/Skill.h
index 8e42844eee147a073357fcaccd4036f7dec12d63..9fffd35a6f258e778200351ef387ba9d3b184480 100644
--- a/source/RobotAPI/libraries/skills/core/Skill.h
+++ b/source/RobotAPI/libraries/skills/core/Skill.h
@@ -23,6 +23,9 @@ namespace armarx
 {
     namespace skills
     {
+        /**
+         * @brief Base class for skills.
+         */
         class Skill : public armarx::Logging
         {
         public:
@@ -181,36 +184,82 @@ namespace armarx
             void installConditionWithCallback(std::function<bool()>&& f,
                                               std::function<void()>&& cb);
 
-            /// call a subskill and block until the subskill terminates.
-            /// If you call a subskill this way it will be stopped if the current skill stops.
+            // Calling subskills
+
+            /**
+             * @brief Call a subskill with default parameters and block until the subskill terminates.
+             *
+             * If you call a subskill this way it will be stopped if the current skill stops.
+             *
+             * @param proxy Skill proxy.
+             * @return Terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
+             */
             std::optional<TerminatedSkillStatusUpdate>
-            callSubskill(const skills::SkillProxy& prx, const aron::data::DictPtr& = nullptr);
+            callSubskill(const skills::SkillProxy& proxy);
+
+            /**
+             * @brief Call a subskill with given parameters and block until the subskill terminates.
+             * @param proxy Skill proxy.
+             * @param parameters Parameters passed to the skill.
+             * @return Terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
+             */
+            std::optional<TerminatedSkillStatusUpdate>
+            callSubskill(const skills::SkillProxy& proxy, const aron::data::DictPtr& parameters);
+
+            /// Similar to callSubskill but non-blocking
+            skills::SkillExecutionID callSubskillAsync(const skills::SkillProxy& proxy);
 
             /// Similar to callSubskill but non-blocking
-            skills::SkillExecutionID callSubskillAsync(const skills::SkillProxy& prx,
-                                                       const aron::data::DictPtr& = nullptr);
+            skills::SkillExecutionID callSubskillAsync(const skills::SkillProxy& proxy,
+                                                       const aron::data::DictPtr& parameters);
+
+            /**
+             * @brief Call a subskill with the given ID and its default parameters.
+             * @param skillId The subskill's ID.
+             * @return The terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
+             */
+            std::optional<TerminatedSkillStatusUpdate> callSubskill(const SkillID& skillId);
 
             /**
              * @brief Call a subskill with the given ID and parameters.
              * @param skillId The subskill's ID.
              * @param parameters The parameters.
              * @return The terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
              */
             std::optional<TerminatedSkillStatusUpdate>
-            callSubskillWithParameters(const SkillID& skillId,
-                                       const aron::data::DictPtr& parameters);
+            callSubskill(const SkillID& skillId, const aron::data::DictPtr& parameters);
 
             /**
              * @brief Call a subskill with the given ID and parameters.
              * @param skillId The subskill's ID.
              * @param parameters The parameters.
              * @return The terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
              */
             template <class ParameterT>
             std::optional<TerminatedSkillStatusUpdate>
-            callSubskillWithParameters(const SkillID& skillId, const ParameterT& parameters)
+            callSubskill(const SkillID& skillId, const ParameterT& parameters)
             {
-                return callSubskillWithParameters(skillId, parameters.toAron());
+                return callSubskill(skillId, parameters.toAron());
             }
 
             /**
@@ -222,18 +271,14 @@ namespace armarx
              * @param skillId The subskill's ID.
              * @param parametersFunction Function which edits the parameters.
              * @return The terminated skill status update.
-             */
-            std::optional<TerminatedSkillStatusUpdate> callSubskillBasedOnDefaultParameters(
-                const SkillID& skillId,
-                std::function<void(aron::data::DictPtr& parameters)> parametersFunction);
-
-            /**
-             * @brief Call a subskill with its default parameters.
-             * @param skillId The subskill's ID.
-             * @return The terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
              */
             std::optional<TerminatedSkillStatusUpdate>
-            callSubskillWithDefaultParameters(const SkillID& skillId);
+            callSubskill(const SkillID& skillId,
+                         std::function<void(aron::data::DictPtr& parameters)> parametersFunction);
 
             /**
              * @brief Call a subskill with parameters based on the default parameters.
@@ -246,12 +291,15 @@ namespace armarx
              * @param skillId The subskill's ID.
              * @param parametersFunction Function which edits the parameters.
              * @return The terminated skill status update.
+             * @throw armarx::skills::error::SkillAbortedException
+             *      If the calling skill has been aborted.
+             * @throw armarx::skills::error::SkillFailedException
+             *      If the calling skill's timeout was reached.
              */
             template <class ParameterT>
             std::optional<TerminatedSkillStatusUpdate>
-            callSubskillBasedOnDefaultParameters(
-                const SkillID& skillId,
-                std::function<void(ParameterT& parameters)> parametersFunction)
+            callSubskill(const SkillID& skillId,
+                         std::function<void(ParameterT& parameters)> parametersFunction)
             {
                 SkillProxy proxy(manager, skillId);
 
@@ -266,6 +314,7 @@ namespace armarx
                 return callSubskill(proxy, parameters.toAron());
             }
 
+
         public:
             // running params
             armarx::core::time::DateTime started = armarx::core::time::DateTime::Now();