diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui
index 1e80202efb18b2aca77e8ba45b87827e362ae233..7c25a1b848daab3347a7247199aa9a54eefb99bc 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui
@@ -78,14 +78,17 @@
         <string>Manager</string>
        </property>
        <layout class="QGridLayout" name="gridLayout">
-        <item row="2" column="0">
+        <item row="3" column="1">
+         <widget class="QDoubleSpinBox" name="doubleSpinBoxUpdateFreq"/>
+        </item>
+        <item row="3" column="0">
          <widget class="QLabel" name="label">
           <property name="text">
            <string>Update Frequency:</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="0" colspan="3">
+        <item row="4" column="0" colspan="3">
          <widget class="QTreeWidget" name="treeWidgetSkills">
           <column>
            <property name="text">
@@ -104,8 +107,19 @@
           </column>
          </widget>
         </item>
-        <item row="2" column="1">
-         <widget class="QDoubleSpinBox" name="doubleSpinBoxUpdateFreq"/>
+        <item row="2" column="0">
+         <widget class="QCheckBox" name="autoUpdateCheckBox">
+          <property name="text">
+           <string>Auto Update</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="2">
+         <widget class="QPushButton" name="refreshNowPushButton">
+          <property name="text">
+           <string>Refresh Now</string>
+          </property>
+         </widget>
         </item>
        </layout>
       </widget>
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
index 85237f794613e4b2938b07462864172abebed457..f9fa41252ad6a0f1144bf7eb043f62771061b5fc 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
@@ -99,7 +99,7 @@ namespace armarx
         connect(refreshSkillsResultTimer,
                 &QTimer::timeout,
                 this,
-                &SkillManagerMonitorWidgetController::refreshSkills);
+                &SkillManagerMonitorWidgetController::refreshSkillsPeriodically);
 
         connect(widget.pushButtonCopy,
                 &QPushButton::clicked,
@@ -123,6 +123,11 @@ namespace armarx
                 &QTreeWidget::currentItemChanged,
                 this,
                 &SkillManagerMonitorWidgetController::skillSelectionChanged);
+
+        connect(widget.refreshNowPushButton,
+                &QPushButton::clicked,
+                this,
+                &SkillManagerMonitorWidgetController::refreshSkills);
     }
 
     SkillManagerMonitorWidgetController::~SkillManagerMonitorWidgetController()
@@ -169,6 +174,15 @@ namespace armarx
         refreshSkillsResultTimer->setInterval(f);
     }
 
+    void
+    SkillManagerMonitorWidgetController::refreshSkillsPeriodically()
+    {
+        if (widget.autoUpdateCheckBox->isChecked())
+        {
+            refreshSkills();
+        }
+    }
+
     void
     SkillManagerMonitorWidgetController::refreshSkills()
     {
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
index e30b00cf03e892412a06d85ac29d0cea3ac61bc2..f1ad1bb720ea69503b86b00f75a6e6f09f6058c5 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
@@ -81,6 +81,7 @@ namespace armarx
 
         void updateTimerFrequency();
         void refreshSkills();
+        void refreshSkillsPeriodically();
 
         void copyCurrentConfig();
         void pasteCurrentConfig();
diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
index f0171437b9b4898a87a48fc2cc2e49d4a467e986..2908d2e77a0a16627d65d2eb757d3ad8431c3271 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
@@ -112,24 +112,32 @@ namespace armarx
             const auto& n = it->first;
             const auto& s = it->second;
 
-            if (s)
+            try
             {
-                skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx;
-                getProxy(myPrx, -1);
+                if (s)
+                {
+                    skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx;
+                    getProxy(myPrx, -1);
 
-                skills::provider::dto::SkillExecutionRequest exInfo;
-                exInfo.skillName = info.skillId.skillName;
-                exInfo.executorName = info.executorName;
-                exInfo.callbackInterface = myPrx;
-                exInfo.params = info.params;
+                    skills::provider::dto::SkillExecutionRequest exInfo;
+                    exInfo.skillName = info.skillId.skillName;
+                    exInfo.executorName = info.executorName;
+                    exInfo.callbackInterface = myPrx;
+                    exInfo.params = info.params;
 
-                return s->executeSkill(exInfo);
+                    return s->executeSkill(exInfo);
+                }
+                else
+                {
+                    remove = true;
+                }
             }
-            else
+            catch (...)
             {
                 remove = true;
             }
 
+
             if (remove)
             {
                 std::scoped_lock l(skillProviderMapMutex);
@@ -137,8 +145,9 @@ namespace armarx
                 SkillProviderInterfacePrxMap& skillProviderMap = this->skillProviderMap;
                 if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end())
                 {
-                    ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
-                                   << n << "' during execution. Removing it from skills.";
+                    ARMARX_WARNING << __PRETTY_FUNCTION__
+                                   << ": Found disconnected or buggy skill provider '" << n
+                                   << "' during execution. Removing it from skills.";
                     it = skillProviderMap.erase(it);
                 }
             }
@@ -170,14 +179,22 @@ namespace armarx
         {
             const auto& n = it->first;
             const auto& s = it->second;
-            if (s)
+            try
             {
-                s->abortSkill(skillName);
+                if (s)
+                {
+                    s->abortSkill(skillName);
+                }
+                else
+                {
+                    ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
+                                   << n << "'. Removing it from skills on next execute.";
+                }
             }
-            else
+            catch (...)
             {
-                ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
-                               << n << "'. Removing it from skills on next execute.";
+                ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found buggy skill provider '" << n
+                               << "'. Removing it from skills on next execute.";
             }
         }
     }
@@ -236,16 +253,25 @@ namespace armarx
         {
             const auto& n = it->first;
             const auto& s = it->second;
-            if (s)
+            try
             {
-                skills::provider::dto::SkillStatusUpdateMap m = s->getSkillExecutionStatuses();
-                ret.insert({n, m});
-                it++;
+                if (s)
+                {
+                    skills::provider::dto::SkillStatusUpdateMap m = s->getSkillExecutionStatuses();
+                    ret.insert({n, m});
+                    it++;
+                }
+                else
+                {
+                    ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
+                                   << n << "'. Removing it from skills.";
+                    it = skillProviderMap.erase(it);
+                }
             }
-            else
+            catch (...)
             {
-                ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
-                               << n << "'. Removing it from skills.";
+                ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found buggy skill provider '" << n
+                               << "'. Removing it from skills.";
                 it = skillProviderMap.erase(it);
             }
         }