diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
index a42d7808284d958d965cfba0dd70aa866a47cc17..3d775f587834aa3a62fd42d1be353eb23a8fc0d4 100644
--- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp
@@ -121,7 +121,7 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(execId.skillId.isSkillSpecified());
 
-        const std::unique_lock l(skillExecutionsMutex);
+        const std::shared_lock l(skillExecutionsMutex);
         if (skillExecutions.find(execId) == skillExecutions.end())
         {
             ARMARX_WARNING << "Skill execution for skill '" + execId.skillId.toString() +
@@ -137,7 +137,7 @@ namespace armarx::plugins
     {
         std::map<skills::SkillExecutionID, skills::SkillStatusUpdate> skillUpdates;
 
-        const std::scoped_lock l(skillExecutionsMutex);
+        const std::shared_lock l(skillExecutionsMutex);
         for (const auto& [key, impl] : skillExecutions)
         {
             const std::scoped_lock l2(impl.skillStatusesMutex);
@@ -151,7 +151,7 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(skillId.isFullySpecified());
 
-        const std::unique_lock l(skillFactoriesMutex);
+        const std::shared_lock l(skillFactoriesMutex);
         if (skillFactories.find(skillId) == skillFactories.end())
         {
             std::stringstream ss;
@@ -175,7 +175,7 @@ namespace armarx::plugins
     SkillProviderComponentPlugin::getSkillDescriptions() const
     {
         std::map<skills::SkillID, skills::SkillDescription> skillDesciptions;
-        const std::unique_lock l(skillFactoriesMutex);
+        const std::shared_lock l(skillFactoriesMutex);
         for (const auto& [key, fac] : skillFactories)
         {
             ARMARX_CHECK(key.isFullySpecified());
@@ -215,6 +215,7 @@ namespace armarx::plugins
                                                             executionRequest.parameters,
                                                             executionRequest.callbackInterface));
                 wrapper = &it.first->second;
+                // ATTENTION NOT DEFINED BEHAVIOR
             }
 
             // async start execution. But we wait for the execution to finish at the end of this method
@@ -269,6 +270,7 @@ namespace armarx::plugins
                                                             executionRequest.parameters,
                                                             executionRequest.callbackInterface));
                 wrapper = &it.first->second;
+                // ATTENTION NOT DEFINED BEHAVIOR
             }
 
             wrapper->execution = std::thread(
@@ -303,7 +305,7 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(executionId.skillId.isFullySpecified());
 
-        const std::scoped_lock l{skillExecutionsMutex};
+        std::shared_lock l{skillExecutionsMutex};
         auto it = skillExecutions.find(executionId);
         if (it == skillExecutions.end())
         {
@@ -329,7 +331,7 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(executionId.skillId.isFullySpecified());
 
-        const std::unique_lock l(skillExecutionsMutex);
+        std::shared_lock l(skillExecutionsMutex);
         auto it = skillExecutions.find(executionId);
         if (it == skillExecutions.end())
         {
@@ -363,7 +365,7 @@ namespace armarx::plugins
     {
         ARMARX_CHECK(executionId.skillId.isFullySpecified());
 
-        const std::unique_lock l(skillExecutionsMutex);
+        std::shared_lock l(skillExecutionsMutex);
         auto it = skillExecutions.find(executionId);
         if (it == skillExecutions.end())
         {
diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
index 812cc0a8814db843793038ebdd16a3a927c912cf..20ffe1fbdb75ee9f4b5831dbd406180f7acf22fc 100644
--- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
+++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h
@@ -104,10 +104,10 @@ namespace armarx::plugins
         skills::manager::dti::SkillManagerInterfacePrx manager;
         skills::provider::dti::SkillProviderInterfacePrx myPrx;
 
-        mutable std::mutex skillFactoriesMutex;
+        mutable std::shared_mutex skillFactoriesMutex;
         std::map<skills::SkillID, std::unique_ptr<skills::SkillBlueprint>> skillFactories;
 
-        mutable std::mutex skillExecutionsMutex;
+        mutable std::shared_mutex skillExecutionsMutex;
         std::map<skills::SkillExecutionID, skills::detail::SkillRuntime> skillExecutions;
 
         friend class armarx::SkillProviderComponentPluginUser;