diff --git a/source/RobotAPI/libraries/skills/core/Skill.cpp b/source/RobotAPI/libraries/skills/core/Skill.cpp
index 7d94de3e90815a156289948fae26463ce5f28247..0b7a32df224d925ced896414d7d47f540f04a0d5 100644
--- a/source/RobotAPI/libraries/skills/core/Skill.cpp
+++ b/source/RobotAPI/libraries/skills/core/Skill.cpp
@@ -245,7 +245,7 @@ namespace armarx
                     std::string("The skill '" + getSkillId().toString() + "' was asked to stop.");
                 message += abortedMessage.empty() ? "" : " Additional message: " + abortedMessage;
 
-                throw error::SkillAbortedException(message);
+                throw error::SkillAbortedException(__PRETTY_FUNCTION__, message);
                 return;
             }
 
@@ -256,7 +256,7 @@ namespace armarx
                 message += abortedMessage.empty() ? "" : " Additional message: " + abortedMessage;
 
                 ARMARX_WARNING << message;
-                throw error::SkillFailedException(message);
+                throw error::SkillFailedException(__PRETTY_FUNCTION__, message);
             }
         }
 
diff --git a/source/RobotAPI/libraries/skills/core/SkillProxy.cpp b/source/RobotAPI/libraries/skills/core/SkillProxy.cpp
index f73c43dfd152c756f80e5ac3e83e901fe59e8ee1..ea4fc4d1a0192d5ad4819be4248df3ea52566164 100644
--- a/source/RobotAPI/libraries/skills/core/SkillProxy.cpp
+++ b/source/RobotAPI/libraries/skills/core/SkillProxy.cpp
@@ -12,9 +12,19 @@ namespace armarx
             manager(manager)
         {
             ARMARX_CHECK_NOT_NULL(manager);
-            skillDescription = SkillDescription::FromIce(
-                manager->getSkillDescription(skillId.toManagerIce()).value());
-            ARMARX_CHECK(skillDescription.skillId.isFullySpecified());
+            IceUtil::Optional<manager::dto::SkillDescription> description =
+                manager->getSkillDescription(skillId.toManagerIce());
+            if (description)
+            {
+                skillDescription = SkillDescription::FromIce(description.value());
+                ARMARX_CHECK(skillDescription.skillId.isFullySpecified());
+            }
+            else
+            {
+                std::stringstream reason;
+                reason << "No skill with ID " << skillId << " found";
+                throw error::SkillNotFoundException(__PRETTY_FUNCTION__, reason.str());
+            }
         }
 
         SkillProxy::SkillProxy(const manager::dti::SkillManagerInterfacePrx& manager,
diff --git a/source/RobotAPI/libraries/skills/core/error/Exception.h b/source/RobotAPI/libraries/skills/core/error/Exception.h
index 5e10baed1e9af3131226320397c11919d7a826e0..9e01205b27e74eddc69fa8ff7c28d2646eafc9e2 100644
--- a/source/RobotAPI/libraries/skills/core/error/Exception.h
+++ b/source/RobotAPI/libraries/skills/core/error/Exception.h
@@ -48,32 +48,38 @@ namespace armarx::skills::error
         }
     };
 
-    class SkillAbortedException : public armarx::LocalException
+    /**
+     * @brief Indicates that a skill was not found, e.g., by the skill manager.
+     */
+    class SkillNotFoundException : public SkillException
     {
     public:
-        SkillAbortedException() = delete;
+        SkillNotFoundException() = delete;
 
-        SkillAbortedException(const std::string& reason) : LocalException(reason)
+        SkillNotFoundException(const std::string& prettymethod, const std::string& reason) :
+            SkillException(prettymethod, reason)
         {
         }
+    };
+
+    class SkillAbortedException : public SkillException
+    {
+    public:
+        SkillAbortedException() = delete;
 
         SkillAbortedException(const std::string& prettymethod, const std::string& reason) :
-            LocalException(prettymethod + ": " + reason + ".")
+            SkillException(prettymethod, reason)
         {
         }
     };
 
-    class SkillFailedException : public armarx::LocalException
+    class SkillFailedException : public SkillException
     {
     public:
         SkillFailedException() = delete;
 
-        SkillFailedException(const std::string& reason) : LocalException(reason)
-        {
-        }
-
         SkillFailedException(const std::string& prettymethod, const std::string& reason) :
-            LocalException(prettymethod + ": " + reason + ".")
+            SkillException(prettymethod, reason)
         {
         }
     };