diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp
index faacc352f9eab07ec12df979071727448083e7ba..1279306950200e5b9747c10fe819b4f5a87ac12d 100644
--- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp
+++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp
@@ -22,6 +22,11 @@ namespace armarx::skills::gui
         ARMARX_CHECK(_skillDetailGroupBoxParentLayout);
         ARMARX_CHECK(_memory);
 
+        ARMARX_CHECK(_skillExecutionTreeWidget);
+        ARMARX_CHECK(_skillGroupBox);
+        ARMARX_CHECK(_skillDetailGroupBox);
+        ARMARX_CHECK(_updateWidgetLayout);
+
         // setup memory
         this->memory = _memory;
 
@@ -47,7 +52,7 @@ namespace armarx::skills::gui
     }
 
     void
-    SkillMemoryGUI::disconnect()
+    SkillMemoryGUI::resetGui()
     {
         ARMARX_ERROR << "Not implemented";
     }
diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h
index b0b6baf228bd50a4c73f0e2bc29f89ad6bb7aea2..b49123caeaf8165792aae15aa96197dae53ee82d 100644
--- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h
+++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h
@@ -36,7 +36,7 @@ namespace armarx::skills::gui
         /**
          * @brief Resets all widgets when disconnecting
          */
-        void disconnect();
+        void resetGui();
 
     private:
         void connectSignals();
diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
index aab0b484f88387011d391629b093c09aea41efbc..8e53e97089b740c077003dcc066a7e44d6239a62 100644
--- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
+++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
@@ -1,7 +1,48 @@
 #include "SkillExecutionTreeWidget.h"
 
+#include <QMenu>
+
 namespace armarx::skills::gui
 {
+
+    void
+    SkillExecutionTreeWidget::runContextMenu(const QPoint& pos)
+    {
+        QMenu* menu = new QMenu();
+
+        // Stop skill
+        QAction* stopSkillAction = new QAction("Stop execution", this);
+        skills::SkillStatus currentStatus =
+            memory->getLatestUpdate().statuses.at(selectedExecution.skillExecutionId).status;
+        stopSkillAction->setDisabled(currentStatus == skills::SkillStatus::Aborted ||
+                                     currentStatus == skills::SkillStatus::Failed ||
+                                     currentStatus == skills::SkillStatus::Succeeded);
+
+        QAction* rerunSkillAction = new QAction("Re-run with similar params", this);
+        menu->addAction(stopSkillAction);
+        menu->addAction(rerunSkillAction);
+        connect(stopSkillAction,
+                SIGNAL(stopSkillAction.triggered()),
+                this,
+                SIGNAL(stopSelectedExecution()));
+        connect(rerunSkillAction,
+                SIGNAL(rerunSkillAction.triggered()),
+                this,
+                SIGNAL(rerunSkillWithSimilarParams()));
+
+        // Temporarily disable rerun-skill-Action
+        rerunSkillAction->setDisabled(true);
+
+        // open menu
+        menu->popup(this->viewport()->mapToGlobal(pos));
+    }
+
+    void
+    SkillExecutionTreeWidget::stopSelectedExecution()
+    {
+        memory->stopExecution(this->selectedExecution.skillExecutionId);
+    }
+
     /*
     void
     SkillExecutionTreeWidget::refresh()
diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h
index 87231431aa9d7f458ed83dca9b4292b2ac23f68e..2dc6b8a3f47ff0d78b83ea737b6f5cbb48b25a7e 100644
--- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h
+++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h
@@ -35,14 +35,18 @@ namespace armarx::skills::gui
 
         SelectedExecution& getSelectedExecution();
 
+    signals:
+        void rerunSkillWithSimilarParams();
     private slots:
         void stopAllExecutions();
         void executionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
         void refresh();
+        void runContextMenu(const QPoint& pos);
+        void stopSelectedExecution();
 
     private:
         void setupUi();
-        SkillExecutionID selectedExecution;
+        SelectedExecution selectedExecution;
     };
 } // namespace armarx::skills::gui
 
diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
index 818d882274ef8c93e148334e6e19d3ebe8e9af2c..66b8a2b624c724d5cbe574db5a6706a1620fe40c 100644
--- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
+++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
@@ -73,15 +73,25 @@ namespace armarx::skills::gui
     void
     SkillManagerWrapper::disconnect()
     {
-        std::scoped_lock l(mutex_memory);
-        this->memory = nullptr;
+        // clear memory
+        {
+            std::scoped_lock l(mutex_memory);
+            this->memory = nullptr;
+        }
+
+        // clear stored data
+        {
+            std::scoped_lock d(mutex_snapshot);
+            this->snapshot.skills.clear();
+            this->snapshot.statuses.clear();
+        }
     }
 
     const SkillManagerWrapper::Snapshot
     SkillManagerWrapper::getLatestUpdate()
     {
         // We *want* to make a const copy, since a reference to the snapshot would not necessarily be thread safe.
-        // If this is too slow, this class might implement wrapper functions for the maps. This would not scale well.
+        // If this is too slow, this class might implement wrapper functions for the maps.
         std::scoped_lock l(mutex_snapshot);
         return snapshot;
     }