diff --git a/source/RobotAPI/components/units/RobotUnit/util/RtTiming.h b/source/RobotAPI/components/units/RobotUnit/util/RtTiming.h
index 243f1a119df65ab1f5a9f79a5f53d243fe8b102c..2fa3ffe573037a4c7b27b55a5a8fe43129156c7b 100644
--- a/source/RobotAPI/components/units/RobotUnit/util/RtTiming.h
+++ b/source/RobotAPI/components/units/RobotUnit/util/RtTiming.h
@@ -24,18 +24,25 @@
 #pragma once
 
 #include <chrono>
-//#include <ArmarXCore/core/time/TimeUtil.h>
 #include "ControlThreadOutputBuffer.h"
 
 namespace armarx
 {
+    namespace rt_timing::constants
+    {
+        inline constexpr const std::int64_t seconds2MicroSeconds = 1e6;
+
+        static constexpr const std::int64_t nanoSeconds2MicroSeconds = 1000;
+    } // namespace rt_timing::constants
 
     inline IceUtil::Time
     rtNow()
     {
+        using namespace rt_timing::constants;
         struct timespec ts;
         clock_gettime(CLOCK_MONOTONIC, &ts);
-        return IceUtil::Time::microSeconds(ts.tv_sec * 1e6 + ts.tv_nsec / 1000);
+        return IceUtil::Time::microSeconds(ts.tv_sec * seconds2MicroSeconds +
+                                           ts.tv_nsec / nanoSeconds2MicroSeconds);
     }
 } // namespace armarx
 
@@ -52,7 +59,7 @@ namespace armarx
 //! \ingroup VirtualTime
 //! Prints duration with comment in front of it if it took longer than threshold
 #define RT_TIMING_CEND_COMMENT(name, comment, thresholdMs)                                         \
-    if ((armarx::rtNow() - name).toMilliSeconds() >= thresholdMs)                                  \
+    if ((armarx::rtNow() - name).toMilliSecondsDouble() >= thresholdMs)                            \
     RT_TIMING_END_COMMENT(name, comment)
 //! \ingroup VirtualTime
 //! Prints duration if it took longer than thresholdMs
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
index b4c59389a918789222beb3595a29ec49320775df..5e79a0a8d032429dacc6ef9ccc69e8fa0edde788 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
@@ -97,6 +97,12 @@ namespace armarx::aron
         type::IntEnumPtr enumType = type::IntEnum::DynamicCast(type);
         data::IntPtr enumData = data::Int::DynamicCast(data);
 
+        if (enumType == nullptr or enumData == nullptr)
+        {
+            ARMARX_WARNING << "Enum Type or Data is NULL";
+            return;
+        }
+
         std::string name = enumType->getValueName(enumData->getValue());
         value << name;
     }
diff --git a/source/RobotAPI/libraries/aron/converter/ivt/IVTConverter.cpp b/source/RobotAPI/libraries/aron/converter/ivt/IVTConverter.cpp
index 715fe6526fc51e7078c97b769c85ec61bd437907..7d177ee2bfe68be685c514eaecbfe38dcf7b3dd4 100644
--- a/source/RobotAPI/libraries/aron/converter/ivt/IVTConverter.cpp
+++ b/source/RobotAPI/libraries/aron/converter/ivt/IVTConverter.cpp
@@ -39,13 +39,17 @@ namespace armarx::aron::data::converter
             throw error::AronException(
                 __PRETTY_FUNCTION__, "The size of an NDArray does not match.", nav->getPath());
         }
+
         auto dims = nav->getShape();
 
         auto ret = std::make_shared<CByteImage>();
+
         ret->Set(dims[0], dims[1], static_cast<CByteImage::ImageType>(std::stoi(nav->getType())));
+
         memcpy(reinterpret_cast<unsigned char*>(ret->pixels),
                nav->getData(),
                std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<int>()));
+
         return ret;
     }
 
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;