diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
index cab9f45f9f77ad65fe7eff3970728aeea118006d..8d3dc6bd1459a74bc2bbf82af98235605e09de9a 100644
--- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
+++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp
@@ -90,11 +90,13 @@ namespace armarx::skills::gui
     void
     SkillExecutionTreeWidget::setupUi()
     {
-        this->setColumnCount(4);
+        this->setColumnCount(6);
 
         this->setContextMenuPolicy(Qt::CustomContextMenu);
 
         QTreeWidgetItem* ___qtreewidgetitem = this->headerItem();
+        ___qtreewidgetitem->setText(5, "");
+        ___qtreewidgetitem->setText(4, "");
         ___qtreewidgetitem->setText(3, "Status");
         ___qtreewidgetitem->setText(2, "SkillID");
         ___qtreewidgetitem->setText(1, "Executor");
@@ -170,11 +172,9 @@ namespace armarx::skills::gui
             if (!found)
             {
                 // TODO: Sort to executor!
-                auto item = new SkillExecutionTreeWidgetItem(executionId, memory);
+                auto item = new SkillExecutionTreeWidgetItem(executionId, memory, this);
 
                 item->updateItem(statusUpdate.status);
-
-                this->insertTopLevelItem(0, item);
             }
         }
     }
diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp
index e1b054e6fc8f87f67e906e4e09a86cacd3837bd3..ef7ab34412ad271524988ea0d60a8cc05cb78f18 100644
--- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp
+++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp
@@ -49,10 +49,38 @@ namespace armarx::skills::gui
                 this->setText(3, QString::fromStdString(i.second));
             }
         }
+        updateButtonState(skillStatus);
     }
 
-    void SkillExecutionTreeWidgetItem::setupUi()
+    void
+    SkillExecutionTreeWidgetItem::abortExecution()
+    {
+        memory->stopExecution(executionId);
+    }
+
+    void
+    SkillExecutionTreeWidgetItem::setupUi()
+    {
+        parentTree->insertTopLevelItem(0, this);
+        abortButton = new QPushButton("Abort");
+        parentTree->setItemWidget(this, 4, abortButton);
+        connectSignals();
+    }
+
+    void
+    SkillExecutionTreeWidgetItem::connectSignals()
     {
+        connect(abortButton,
+                &QPushButton::clicked,
+                this,
+                &SkillExecutionTreeWidgetItem::abortExecution);
+    }
 
+    void
+    SkillExecutionTreeWidgetItem::updateButtonState(SkillStatus& skillStatus)
+    {
+        abortButton->setDisabled(skillStatus == SkillStatus::Aborted ||
+                                 skillStatus == SkillStatus::Failed ||
+                                 skillStatus == SkillStatus::Succeeded);
     }
 } // namespace armarx::skills::gui
diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h
index a9a6dd957b4b3500a3a17d9919681fd37da9eae5..cd0376f8f9c123f6046e061a4955293fc833c9ec 100644
--- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h
+++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h
@@ -1,8 +1,10 @@
 #ifndef SKILLEXECUTIONTREEWIDGETITEM_H
 #define SKILLEXECUTIONTREEWIDGETITEM_H
 
+#include <QPushButton>
 #include <QTreeWidgetItem>
 
+#include "RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h"
 #include <RobotAPI/libraries/skills/core/SkillExecutionID.h>
 #include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h>
 
@@ -23,17 +25,21 @@ namespace armarx::skills::gui
         {skills::SkillStatus::Failed, "Failed"},
         {skills::SkillStatus::Succeeded, "Succeeded"}};
 
-    class SkillExecutionTreeWidgetItem : public QTreeWidgetItem, public MemoryCommunicatorBase
+    class SkillExecutionTreeWidgetItem :
+        public QObject,
+        public QTreeWidgetItem,
+        public MemoryCommunicatorBase
     {
+        Q_OBJECT
     public:
         SkillExecutionTreeWidgetItem() = delete;
 
-        // After constructing an item, it must be manually inserted into the tree!
         SkillExecutionTreeWidgetItem(const skills::SkillExecutionID& id,
-                                     std::shared_ptr<SkillManagerWrapper> _memory) :
-            MemoryCommunicatorBase(_memory), executionId(id)
+                                     std::shared_ptr<SkillManagerWrapper> _memory,
+                                     SkillExecutionTreeWidget* parent) :
+            MemoryCommunicatorBase(_memory), executionId(id), parentTree(parent)
         {
-            setupUi()
+            setupUi();
         }
 
         static SkillExecutionTreeWidgetItem*
@@ -47,8 +53,15 @@ namespace armarx::skills::gui
     protected:
         skills::SkillExecutionID executionId;
 
+    public slots:
+        void abortExecution();
+
     private:
         void setupUi();
+        void connectSignals();
+        void updateButtonState(skills::SkillStatus& skillStatus);
+        SkillExecutionTreeWidget* parentTree = nullptr;
+        QPushButton* abortButton = nullptr;
     };
 } // namespace armarx::skills::gui