diff --git a/source/RobotAPI/libraries/skills/core/FluxioResult.cpp b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
index 457081a9d161d1e351a6d12a7134e47781f9e4ba..c76c3293c01bad54f27042b3c857276538ecbc07 100644
--- a/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
+++ b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
@@ -1,30 +1,36 @@
 #include <stdexcept>
 
-template<typename T, typename E = std::exception>
+namespace armarx {
 
-class Result {
-  private: bool success_; T result_; E error_; //maybe even an error list for a better stacktrace
+    namespace skills {
+    
+        template<typename T, typename E = std::exception>
 
-  public:
-    Result(const T& res) : success_(true),       result_(res) {}
+        class Result {
+            private: bool success_; T result_; E error_; //maybe even an error list for a better stacktrace
 
-    Result(const E& err) : success_(false),   error_(err) {}
+            public:
+                Result(const T& res) : success_(true),  result_(res) {}
 
-    bool isSuccess() const {
-        return success_;
-    }
+                Result(const E& err) : success_(false),  error_(err) {}
 
- T getResult() const {
-        if (!success_) {
-            throw std::logic_error("Result is not successful");
-        }
-        return result_;
-    }
+            bool isSuccess() const {
+            return success_;
+            }
+
+            T getResult() const {
+                if (!success_) {
+                    throw std::logic_error("Result is not successful");
+                }
+            return result_;
+            }
 
-    E getError() const {
-        if (success_) {
-            throw std::logic_error("Result does not contain an error");
-        }
-        return error_;
+            E getError() const {
+                if (success_) {
+                    throw std::logic_error("Result does not contain an error");
+                }
+                return error_;
+            }
+        };
     }
-};
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/source/RobotAPI/libraries/skills/core/FluxioResult.h b/source/RobotAPI/libraries/skills/core/FluxioResult.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a607e85aa897a52fea0aa037bd181f2b90918650 100644
--- a/source/RobotAPI/libraries/skills/core/FluxioResult.h
+++ b/source/RobotAPI/libraries/skills/core/FluxioResult.h
@@ -0,0 +1,25 @@
+#include <stdexcept>
+
+namespace armarx {
+    namespace skills {
+        
+        template<typename T, typename E = std::exception>
+        class Result {
+        private:
+            bool success_;
+            T result_;
+            E error_;
+
+        public:
+            Result(const T& res) : success_(true), result_(res) {}
+
+            Result(const E& err) : success_(false), error_(err) {}
+
+            bool isSuccess() const {}
+
+            T getResult() const {}
+
+            E getError() const {}
+        };
+    }
+}
diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
index 9a788ad0ff59771af0871c81cef612aa669fe8bb..06ffe161de696137517ead9c740e276c1058ff35 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
@@ -614,16 +614,17 @@ namespace armarx::plugins
     FluxioExecutor*
     SkillManagerComponentPlugin::executeFluxioSkill(std::string skillId, std::string executorName)
     {
-        const auto& skill = getSkill(skillId);
-        if (!skill.has_value())
+        const auto& result = getSkill(skillId);
+        if (!result.isSuccess())
         {
             ARMARX_WARNING << "Skill with id '" << skillId << "' not found.";
             return nullptr;
         }
 
+        const auto& skill = result.getResult();
         std::string executionId = IceUtil::generateUUID();
 
-        if (!skill.value().native)
+        if (!skill.native)
         {
             // currently empty parameters
             armarx::aron::data::DictPtr emptyParameters = {};
@@ -639,8 +640,8 @@ namespace armarx::plugins
         else
         {
             skills::SkillID sID = skills::SkillID{
-                .providerId = skills::ProviderID{.providerName = skill->skillProviderPtr->id},
-                .skillName = skill->id};
+                .providerId = skills::ProviderID{.providerName = skill.skillProviderPtr->id},
+                .skillName = skill.id};
 
             auto skillDescr = getSkillDescription(sID);
             if (!skillDescr.has_value())
@@ -923,16 +924,19 @@ namespace armarx::plugins
         return convertMapValuesToVector(fluxioDC.skills);
     }
 
-    std::optional<skills::FluxioSkill>
+
+    skills::Result<skills::FluxioSkill, skills::error::SkillException>
     SkillManagerComponentPlugin::getSkill(const std::string& id)
     {
         const auto& skillsEntry = fluxioDC.skills.find(id);
         if (skillsEntry != fluxioDC.skills.end())
         {
-            return skillsEntry->second;
+            skills::Result<skills::FluxioSkill, skills::error::SkillException> result(skillsEntry->second);
+            return result;
         }
-
-        return std::nullopt;
+        skills::Result<skills::FluxioSkill, skills::error::SkillException> 
+        result(skills::error::SkillNotFoundException("Skill not found", "Reason: "));
+        return result;
     }
 
     void
diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h
index fd27f9a2642cee745ad9902315622e03d48aeb65..760395ae92f2e42d7a61cf74dce4e65cac531b1e 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h
@@ -8,6 +8,7 @@
 #include <ArmarXCore/core/time/DateTime.h>
 
 #include "RobotAPI/libraries/skills/core/FluxioSkillStatusUpdate.h"
+#include "RobotAPI/libraries/skills/core/error/Exception.h"
 #include <RobotAPI/interface/skills/SkillManagerInterface.h>
 #include <RobotAPI/libraries/skills/core/FluxioEdge.h>
 #include <RobotAPI/libraries/skills/core/FluxioNode.h>
@@ -18,6 +19,7 @@
 #include <RobotAPI/libraries/skills/core/FluxioValue.h>
 #include <RobotAPI/libraries/skills/core/ProviderID.h>
 #include <RobotAPI/libraries/skills/core/ProviderInfo.h>
+#include <RobotAPI/libraries/skills/core/FluxioResult.h>
 #include <RobotAPI/libraries/skills/core/SkillExecutionRequest.h>
 #include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h>
 
@@ -84,7 +86,7 @@ namespace armarx::plugins
 
         std::vector<skills::FluxioSkill> getSkillList();
 
-        std::optional<skills::FluxioSkill> getSkill(const std::string& id);
+        skills::Result<skills::FluxioSkill, skills::error::SkillException>getSkill(const std::string& id);
 
         void removeSkill(const std::string& id);