From 5088e935c7227ce3f8ae203c5b9832b96f5fe5c1 Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Thu, 21 May 2020 12:13:32 +0200
Subject: [PATCH] Use std instead of boost

---
 .../ArmarXGui/ArmarXMainWindow.cpp            |  2 +-
 .../applications/ArmarXGui/ArmarXMainWindow.h |  4 +--
 .../ArmarXGui/Widgets/ViewerWidget.cpp        |  8 ++---
 .../ArmarXGui/Widgets/ViewerWidget.h          |  2 +-
 .../ConditionViewerWidgetController.cpp       | 10 +++---
 .../ConditionViewerWidgetController.h         |  4 ++-
 .../ConditionViewerPlugin/TermNode.cpp        | 10 +++---
 .../ConditionViewerPlugin/TermNode.h          |  7 ++--
 .../widgets/ConditionViewerWidget.cpp         | 10 +++---
 .../widgets/ConditionViewerWidget.h           |  4 ++-
 .../LoggingPlugin/ArmarXLogViewer/LogTable.h  |  5 ++-
 .../ArmarXLogViewer/LogTableModel.cpp         | 12 +++----
 .../ArmarXLogViewer/LogTableModel.h           |  4 +--
 .../ArmarXLogViewer/LogViewer.cpp             |  4 +--
 .../LoggingPlugin/ArmarXLogViewer/LogViewer.h |  4 ++-
 .../PlotterPlugin/ArmarXPlotter.cpp           |  6 ++--
 .../gui-plugins/PlotterPlugin/ArmarXPlotter.h |  2 +-
 .../StaticPlotterWidgetController.cpp         |  6 ++--
 .../StaticPlotterWidgetController.h           |  3 +-
 .../ScenarioManagerWidgetController.cpp       |  1 -
 .../controller/ScenarioListController.cpp     |  4 +--
 .../controller/ScenarioListController.h       |  8 +++--
 .../gui/applicationdatabaseview.cpp           |  2 +-
 .../gui/applicationdatabaseview.h             |  9 ++---
 .../model/StateTreeModel.cpp                  |  4 +--
 .../model/StateTreeModel.h                    |  4 +--
 .../IceStateConverter.cpp                     |  2 ++
 .../StatechartViewerPlugin/StateWatcher.cpp   | 28 +++++++--------
 .../StatechartViewerPlugin/StateWatcher.h     |  5 +--
 .../StatechartViewerController.cpp            |  8 ++---
 .../StatechartViewerController.h              |  4 ++-
 .../StatechartViewerPlugin/layout/Layout.h    |  3 +-
 .../layout/LayoutWorker.cpp                   |  6 ++--
 .../layout/StateModelLayoutMediator.cpp       | 26 +++++++-------
 .../StatechartViewerPlugin/model/State.cpp    |  3 +-
 .../model/stateinstance/StateInstance.cpp     |  2 ++
 .../view/TransitionItem.cpp                   |  4 ++-
 .../ArmarXManagerItem.cpp                     |  2 +-
 .../ArmarXManagerItem.h                       |  8 ++---
 .../ArmarXManagerModel.cpp                    | 12 +++----
 .../ArmarXManagerModel.h                      |  7 ++--
 .../IceGridViewer/IceGridViewer.cpp           | 12 +++----
 .../IceGridViewer/IceGridViewer.h             |  5 +--
 .../IceGridViewer/model/AdapterInfoModel.h    |  9 ++---
 .../IceGridViewer/model/IceGridModel.cpp      |  4 +--
 .../IceGridViewer/model/IceGridModel.h        |  4 +--
 .../IceGridViewer/model/NodeInfoModel.h       |  9 ++---
 .../IceGridViewer/model/ServerInfoModel.h     |  9 ++---
 .../SystemStateMonitorWidget.cpp              | 12 +++----
 .../SystemStateMonitorWidget.h                |  4 ++-
 .../ThreadViewer/RunningTaskModel.cpp         |  4 +--
 .../ThreadViewer/RunningTaskModel.h           |  5 +--
 .../ThreadViewer/ThreadViewer.cpp             |  4 +--
 .../ThreadViewer/ThreadViewer.h               |  5 +--
 .../ThreadViewer/ThreadViewerModel.cpp        |  4 +--
 .../ThreadViewer/ThreadViewerModel.h          |  5 +--
 .../libraries/ArmarXGuiBase/ArmarXGuiPlugin.h | 34 ++++---------------
 .../ArmarXGuiBase/ArmarXWidgetController.cpp  |  4 +--
 .../ArmarXGuiBase/ArmarXWidgetController.h    | 16 ++++++---
 .../libraries/ArmarXGuiBase/PluginCache.cpp   | 24 ++++++-------
 .../libraries/ArmarXGuiBase/PluginCache.h     |  4 +--
 .../ArmarXGuiBase/widgets/CoinViewer.cpp      | 14 ++++----
 .../ArmarXGuiBase/widgets/CoinViewer.h        | 19 +++++++----
 .../PlotterController/PlotterController.cpp   | 16 ++++-----
 .../PlotterController/PlotterController.h     |  5 +--
 65 files changed, 251 insertions(+), 239 deletions(-)

diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
index 4d1107c4..dee84969 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
@@ -124,7 +124,7 @@ namespace armarx
         //    splashSceen->show();
 
         ui = new ::Ui::ArmarXMainWindow();
-        mutex3d.reset(new boost::recursive_mutex);
+        mutex3d = std::make_shared<std::recursive_mutex>();
         ArmarXWidgetInfoPtr viewerWidgetInfo(new ArmarXWidgetInfo(ArmarXComponentWidgetController::createInstance<Viewer3DWidget>, Viewer3DWidget::GetWidgetIcon(), QIcon()));
         pluginCache.cacheWidget(ARMARX_VIEWER_NAME, viewerWidgetInfo);
 
diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
index a57c5a5e..650431f3 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
@@ -115,7 +115,7 @@ namespace armarx
          * \brief Provides access to the coin3d mutex. Use this mutex to protect access to the 3d scene.
          * \return
          */
-        std::shared_ptr<boost::recursive_mutex> getMutex3D();
+        std::shared_ptr<std::recursive_mutex> getMutex3D();
 
         bool existsWidget(const QString& widgetName);
         QString getLibraryPathFromPackage(const QString& packageName);
@@ -256,7 +256,7 @@ namespace armarx
         QToolButton* openWidgetButton;
         QLineEdit* searchField;
         AddArmarXWidgetAction* addWidgetAction;
-        boost::shared_ptr<boost::recursive_mutex> mutex3d;
+        std::shared_ptr<std::recursive_mutex> mutex3d;
         QMap<QString, QAction*> actionList;
 
         QLabel* favoritesLabel;
diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp
index 752346c1..1fa5a84c 100644
--- a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp
+++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.cpp
@@ -79,7 +79,7 @@ namespace armarx
             return;
         }
 
-        ScopedRecursiveLockPtr l = viewer->getScopedLock();
+        auto l = viewer->getScopedLock();
 
         if (index < 0 || index >= cb3DViewers->count())
         {
@@ -147,7 +147,7 @@ namespace armarx
         // clear initialized views and reset node to apply loaded settings
         if (viewer)
         {
-            ScopedRecursiveLockPtr l = viewer->getScopedLock();
+            auto l = viewer->getScopedLock();
 
             selectedViews.clear();
             setNode(cb3DViewers->currentIndex());
@@ -275,7 +275,7 @@ namespace armarx
         }
     }
 
-    void Viewer3DWidget::setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D)
+    void Viewer3DWidget::setMutex3D(RecursiveMutexPtr const& mutex3D)
     {
         this->mutex3D = mutex3D;
         if (viewer)
@@ -341,7 +341,7 @@ namespace armarx
             return;
         }
 
-        ScopedRecursiveLockPtr l = viewer->getScopedLock();
+        auto l = viewer->getScopedLock();
         //    ARMARX_INFO << "scene map size: " << sceneMap.size();
         this->sceneMap = sceneMap;
         int oldIndex = cb3DViewers->currentIndex();
diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h
index 947a1047..2f096cbc 100644
--- a/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h
+++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/ViewerWidget.h
@@ -79,7 +79,7 @@ namespace armarx
          * \brief This mutex is used to protect 3d scene updates.
          * \param mutex3D
          */
-        void setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D) override;
+        void setMutex3D(RecursiveMutexPtr const& mutex3D) override;
 
         QPointer<QWidget> getCustomTitlebarWidget(QWidget* parent = 0) override;
 
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp
index cf348498..3cd4b3c9 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.cpp
@@ -48,7 +48,7 @@ namespace armarx
         handler = getProxy<ConditionHandlerInterfacePrx>("ConditionHandler");
         if (handler)
         {
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             QMetaObject::invokeMethod(__widget, "onConnect");
         }
         refreshAction->setChecked(true);
@@ -86,13 +86,13 @@ namespace armarx
 
     ConditionRegistry ConditionViewerWidgetController::getActiveConditions()
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         return currentConditions;
     }
 
     ConditionRegistry ConditionViewerWidgetController::getPastConditions()
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         return pastConditions;
     }
 
@@ -116,7 +116,7 @@ namespace armarx
             if (handler)
             {
                 auto removeResult = handler->begin_removeAllConditions();
-                ScopedLock lock(dataMutex);
+                std::unique_lock lock(dataMutex);
                 handler->end_removeAllConditions(removeResult);
             }
         }
@@ -134,7 +134,7 @@ namespace armarx
             {
                 auto pastResult = handler->begin_getPastConditions();
                 auto activeResult = handler->begin_getActiveConditions();
-                ScopedLock lock(dataMutex);
+                std::unique_lock lock(dataMutex);
                 pastConditions = handler->end_getPastConditions(pastResult);
                 currentConditions = handler->end_getActiveConditions(activeResult);
             }
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h
index e92aafc5..7c131ad2 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/ConditionViewerWidgetController.h
@@ -31,6 +31,8 @@
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
 #include "widgets/ConditionViewerWidget.h"
 
+#include <mutex>
+
 class QToolBar;
 
 namespace armarx
@@ -88,7 +90,7 @@ namespace armarx
         ConditionRegistry currentConditions;
         ConditionRegistry pastConditions;
         armarx::PeriodicTask<ConditionViewerWidgetController>::pointer_type updateTask;
-        Mutex dataMutex;
+        std::mutex dataMutex;
         QPointer<ConditionViewerWidget> __widget;
         QPointer<QToolBar> customToolbar;
         QAction* refreshAction;
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp
index e7feb698..529d6cf0 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.cpp
@@ -125,7 +125,7 @@ namespace armarx
 
     QString TermNode::getDatafieldValue()
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         try
         {
@@ -149,7 +149,7 @@ namespace armarx
 
     void TermNode::setTermEvaluationState(bool truthy)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         if (truthy)
         {
@@ -171,7 +171,7 @@ namespace armarx
 
     void TermNode::updateChecksTable(TermImplPtr term)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         LiteralImplPtr literal = LiteralImplPtr::dynamicCast(term);
         CheckConfiguration config = literal->getCheckConfiguration();
@@ -245,7 +245,7 @@ namespace armarx
     {
         bool truthy = false;
         {
-            ScopedRecursiveLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             truthy = curDatafield && literaldatafieldName == curDatafield->getDataFieldIdentifier()->getIdentifierStr();
         }
 
@@ -285,7 +285,7 @@ namespace armarx
 
     void TermNode::updateValueString(const QString& valueString)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         checksTable->setItem(literalRow, eCurrentValueCol, new QTableWidgetItem(valueString));
     }
 
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h
index 27022776..6a3f43e3 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/TermNode.h
@@ -29,12 +29,12 @@
 #include <ArmarXCore/core/system/ImportExportComponent.h>
 #include <ArmarXCore/observers/condition/TermImpl.h>
 #include <ArmarXCore/observers/variant/DatafieldRef.h>
-#include <ArmarXCore/core/services/tasks/PeriodicTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXCore/interface/observers/ConditionHandlerInterface.h>
 
 #include <QTableWidget>
 
+#include <mutex>
+
 namespace armarx
 {
     class ARMARXCOMPONENT_IMPORT_EXPORT TermNode;
@@ -101,8 +101,7 @@ namespace armarx
         int literalRow;
         std::string literaldatafieldName;
         DatafieldRefPtr curDatafield;
-        //        armarx::PeriodicTask<TermNode>::pointer_type updateTask;
-        RecursiveMutex dataMutex;
+        std::recursive_mutex dataMutex;
 
         IceManagerPtr manager;
         ConditionHandlerInterfacePrx handler;
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp
index 8416fbf4..cde510dd 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.cpp
@@ -120,7 +120,7 @@ namespace armarx
 
     void ConditionViewerWidget::activeConditionItemSelected(const QItemSelection& selected, const QItemSelection& deselected)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         if (selected.indexes().size() == 0)
         {
@@ -141,7 +141,7 @@ namespace armarx
 
     void ConditionViewerWidget::pastConditionItemSelected(const QItemSelection& selected, const QItemSelection& deselected)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         if (selected.indexes().size() == 0)
         {
@@ -174,7 +174,7 @@ namespace armarx
 
     void ConditionViewerWidget::updateCondition(int conditionId, ConditionRootPtr& condition)
     {
-        ScopedRecursiveLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         scene->clear();
         ui.checksTableWidget->clearContents();
         ui.checksTableWidget->setRowCount(0);
@@ -197,7 +197,7 @@ namespace armarx
         std::vector<TreeNodePtr> qtChildren;
         int conditionId = -1;
         {
-            ScopedRecursiveLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
 
             qtChildren.push_back(root);
             tempChildNodes = root->getChildren();
@@ -247,7 +247,7 @@ namespace armarx
     {
         if (event->timerId() == timerId)
         {
-            ScopedRecursiveLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             // retrieve conditions
             activeConditions = controller->getActiveConditions();
             pastConditions = controller->getPastConditions();
diff --git a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h
index 9c1e8a4f..f43f75bf 100644
--- a/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h
+++ b/source/ArmarXGui/gui-plugins/ConditionViewerPlugin/widgets/ConditionViewerWidget.h
@@ -32,11 +32,13 @@
 #include "../TermNode.h"
 
 #include <ArmarXCore/core/application/Application.h>
+#include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 
 #include <QMainWindow>
 #include <QWidget>
 
 #include <string>
+#include <mutex>
 #include <map>
 
 
@@ -73,7 +75,7 @@ namespace armarx
         ConditionItemModel* pastConditionsModel;
         ConditionRegistry activeConditions;
         ConditionRegistry pastConditions;
-        RecursiveMutex dataMutex;
+        std::recursive_mutex dataMutex;
 
         PeriodicTask<ConditionViewerWidget>::pointer_type updateTask;
         int timerId;
diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h
index 7c093180..0203b80a 100644
--- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h
+++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTable.h
@@ -24,7 +24,6 @@
 
 // ArmarX
 #include <ArmarXCore/core/logging/Logging.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXGui/libraries/ArmarXGuiBase/widgets/editorfileopener.h>
 
 
@@ -34,6 +33,7 @@
 
 // C++
 #include <vector>
+#include <mutex>
 
 #define ARMARX_LOG_TIMESTR "Time"
 #define ARMARX_LOG_COMPONENTSTR "Component"
@@ -100,10 +100,9 @@ namespace armarx
         bool autoscrollActive;
         int newMessageCount;
         MessageType maxNewLogLevelType;
-        Mutex bufferMutex;
+        std::mutex bufferMutex;
         std::vector<LogMessage> logBuffer;
         QString currentLiveFilter, lastLiveFilter;
-        //        std::map<int, QModelIndex>::const_reverse_iterator selectedSearchIndex;
         int selectedSearchIndex;
         EditorFileOpener fileOpener;
 
diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp
index cc4daccb..6a090648 100644
--- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp
+++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.cpp
@@ -56,7 +56,7 @@ namespace armarx
         {
             case (int)UserRoles::FullMsgRole:
             {
-                ScopedLock lock(logEntriesMutex);
+                std::unique_lock lock(logEntriesMutex);
                 if (row >= (signed int)logEntries.size() || row < 0)
                 {
                     return QString("n/A");
@@ -93,7 +93,7 @@ namespace armarx
             case Qt::DisplayRole:
             case Qt::ToolTipRole:
             {
-                ScopedLock lock(logEntriesMutex);
+                std::unique_lock lock(logEntriesMutex);
 
                 //std::cout << "row " << row << " column:" << column << std::endl;
                 if (row >= (signed int)logEntries.size() || row < 0)
@@ -257,7 +257,7 @@ namespace armarx
                 }
 
 
-                ScopedLock lock(logEntriesMutex);
+                std::unique_lock lock(logEntriesMutex);
 
                 //std::cout << "row " << row << " column:" << column << std::endl;
                 if (row >= (signed int)logEntries.size() || row < 0)
@@ -567,7 +567,7 @@ namespace armarx
     {
 
         {
-            ScopedLock lock(logEntriesMutex);
+            std::unique_lock lock(logEntriesMutex);
             std::vector < LogMessage>::iterator it = logEntries.begin();
             int row = 0;
 
@@ -599,7 +599,7 @@ namespace armarx
     bool LogTableModel::addEntry(const LogMessage& entry, int* entriesAdded)
     {
         {
-            ScopedLock lock(logEntriesMutex);
+            std::unique_lock lock(logEntriesMutex);
 
             if (entriesAdded)
             {
@@ -702,7 +702,7 @@ namespace armarx
         int size;
         {
             beginRemoveRows(QModelIndex(), 0, logEntries.size() - 1);
-            ScopedLock lock(logEntriesMutex);
+            std::unique_lock lock(logEntriesMutex);
             size = (int)logEntries.size();
             removeRows(0, logEntries.size() - 1);
             logEntries.clear();
diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h
index 8a547a42..0e26bc47 100644
--- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h
+++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogTableModel.h
@@ -26,11 +26,11 @@
 
 // ArmarX
 #include <ArmarXCore/core/logging/Logging.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
 
 // C++
 #include <vector>
+#include <mutex>
 
 namespace armarx
 {
@@ -104,7 +104,7 @@ namespace armarx
 
         std::vector < LogMessage> logEntries;
         std::vector <bool> rowMatchesSearch;
-        mutable Mutex logEntriesMutex;
+        mutable std::mutex logEntriesMutex;
 
         RunningTask<LogTableModel>::pointer_type searchResultTask;
     };
diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp
index 5742c909..3c52e1de 100644
--- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp
+++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.cpp
@@ -208,7 +208,7 @@ namespace armarx
 
         if (ui.cbVerbosityLevel->currentIndex() <= msg.type)
         {
-            ScopedLock lock(pendingEntriesMutex);
+            std::unique_lock lock(pendingEntriesMutex);
             pendingEntries.push_back(msg);
         }
     }
@@ -758,7 +758,7 @@ namespace armarx
 
         std::vector <LogMessage> pendingEntriesTemp;
         {
-            ScopedLock lock(pendingEntriesMutex);
+            std::unique_lock lock(pendingEntriesMutex);
             pendingEntriesTemp.swap(pendingEntries);
         }
 
diff --git a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h
index d7d42484..c7dcf492 100644
--- a/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h
+++ b/source/ArmarXGui/gui-plugins/LoggingPlugin/ArmarXLogViewer/LogViewer.h
@@ -30,6 +30,8 @@
 #include <QPointer>
 #include <QToolBar>
 
+#include <mutex>
+
 class QTimer;
 
 namespace armarx
@@ -130,7 +132,7 @@ namespace armarx
 
         std::vector <LogMessage> pendingEntries;
 
-        mutable Mutex pendingEntriesMutex;
+        mutable std::mutex pendingEntriesMutex;
         QTimer* pendingEntriesTimer;
         QToolBar* customToolbar;
 
diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp
index c3825b41..55b8acf7 100644
--- a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp
+++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.cpp
@@ -142,7 +142,7 @@ namespace armarx
     {
         {
             //            plotterController->clear();
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             plotterController->setUpdateInterval(dialog->ui.spinBoxUpdateInterval->value());
             plotterController->setShownInterval(dialog->ui.spinBoxShownInterval->value());
             plotterController->setPollingInterval(dialog->ui.spinBoxPollingInterval->value());
@@ -247,7 +247,7 @@ namespace armarx
 
     void ArmarXPlotter::saveSettings(QSettings* settings)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         settings->setValue("updateInterval", plotterController->getUpdateInterval());
         settings->setValue("shownInterval", plotterController->getShownInterval());
         settings->setValue("pollingInterval", plotterController->getPollingInterval());
@@ -259,7 +259,7 @@ namespace armarx
 
     void ArmarXPlotter::loadSettings(QSettings* settings)
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         plotterController->setUpdateInterval(settings->value("updateInterval", 100).toInt());
         plotterController->setShownInterval(settings->value("shownInterval", 60).toInt());
         plotterController->setPollingInterval(settings->value("pollingInterval", 33).toInt());
diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h
index 70aebfac..9a4846c9 100644
--- a/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h
+++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/ArmarXPlotter.h
@@ -163,7 +163,7 @@ namespace armarx
         bool __plottingPaused;
         JSONObjectPtr json;
 
-        Mutex dataMutex;
+        std::mutex dataMutex;
         bool syncDataLogging;
         std::vector<std::string> csvHeader;
         std::ofstream logstream;
diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp
index 8dfa2841..3754ef74 100644
--- a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp
+++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.cpp
@@ -123,7 +123,7 @@ namespace armarx
         ui.listWidgetPlots->clear();
         plotter->detachItems();
         plotter->replot();
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         plotsMap.clear();
     }
 
@@ -145,7 +145,7 @@ namespace armarx
         {
             return;
         }
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         auto it = plotsMap.find(plotName);
         if (it == plotsMap.end())
         {
@@ -193,7 +193,7 @@ namespace armarx
         ARMARX_CHECK_EXPRESSION(!plotsData.empty());
         QString qplotName = QString::fromStdString(plotName);
         {
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             plotsMap[qplotName] = plotsData;
         }
         emit plotAdded(qplotName);
diff --git a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h
index 9cfacd2d..f4ada85a 100644
--- a/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h
+++ b/source/ArmarXGui/gui-plugins/PlotterPlugin/StaticPlotterWidgetController.h
@@ -13,7 +13,6 @@
 #pragma GCC diagnostic pop
 
 #include <ArmarXCore/core/services/tasks/TaskUtil.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 namespace armarx
 {
@@ -74,7 +73,7 @@ namespace armarx
         Ui::StaticPlotterWidget ui;
         QPointer<QwtPlot> plotter;
         std::map<QString, StringVector2fSeqDict > plotsMap;
-        Mutex dataMutex;
+        std::mutex dataMutex;
         QToolBar* customToolbar;
 
         //        StaticPlotterInterfacePrx topicPrx ;
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
index e70fe69e..6e8e9fbb 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
@@ -32,7 +32,6 @@
 #include <ArmarXCore/core/logging/Logging.h>
 #include <QMetaType>
 #include <ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <QToolTip>
 
 using namespace armarx;
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
index 6b0fc866..5b03fbbf 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
@@ -826,7 +826,7 @@ void ScenarioListController::fetchStati()
 {
     std::vector<ApplicationInstancePtr> apps;
     {
-        armarx::ScopedLock lock(applicationInstanceMutex);
+        std::unique_lock lock(applicationInstanceMutex);
         apps.swap(applicationInstances);
     }
     if (apps.empty())
@@ -964,7 +964,7 @@ void ScenarioListController::updateStati()
     }
 
     {
-        armarx::ScopedLock lock(applicationInstanceMutex);
+        std::unique_lock lock(applicationInstanceMutex);
         apps.swap(applicationInstances);
     }
 }
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h
index 64aaf74a..bdc4d561 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.h
@@ -29,17 +29,19 @@
 #include "../gui/scenariolistview.h"
 #include "../gui/createscenarioview.h"
 #include "../gui/filterabletreemodelsortfilterproxymodel.h"
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXCore/core/IceManager.h>
 #include <ArmarXCore/core/IceGridAdmin.h>
 #include <ArmarXCore/core/services/tasks/TaskUtil.h>
 #include <ArmarXCore/util/ScenarioManagerCommon/data_structure/Package.h>
 #include <ArmarXCore/util/ScenarioManagerCommon/executor/Executor.h>
 #include <ArmarXCore/util/ScenarioManagerCommon/data_structure/ApplicationInstance.h>
+#include <ArmarXCore/core/logging/Logging.h>
+
 #include <QObject>
+
 #include <memory>
 #include <vector>
-#include <ArmarXCore/core/logging/Logging.h>
+#include <mutex>
 
 namespace ScenarioManager::Controller
 {
@@ -201,7 +203,7 @@ namespace ScenarioManager::Controller
         Data_Structure::PackageVectorPtr packages;
         // used for fetching application stati, list set before every update by gui thread
         std::vector<ApplicationInstancePtr> applicationInstances;
-        armarx::Mutex applicationInstanceMutex;
+        std::mutex applicationInstanceMutex;
         armarx::SimplePeriodicTask<>::pointer_type updateTask;
         Exec::ExecutorPtr executor;
         IceGrid::AdminPrx iceAdmin;
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp
index a309d5c6..8c1fc45e 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.cpp
@@ -74,7 +74,7 @@ void ApplicationDatabaseView::on_treeView_clicked(const QModelIndex& index)
     emit itemClicked(index);
 }
 
-armarx::Mutex& ApplicationDatabaseView::getMutex()
+std::mutex& ApplicationDatabaseView::getMutex()
 {
     return mutex;
 }
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h
index 49869fca..25720df8 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/applicationdatabaseview.h
@@ -28,10 +28,11 @@
 #include "treemodel.h"
 #include "filterabletreemodelsortfilterproxymodel.h"
 #include "applicationdatabasemodel.h"
-#include <ArmarXCore/core/system/Synchronization.h>
+
 #include <QWidget>
-#include <QMutex>
+
 #include <memory>
+#include <mutex>
 
 namespace Ui
 {
@@ -54,7 +55,7 @@ public:
     explicit ApplicationDatabaseView(QWidget* parent = 0);
     ~ApplicationDatabaseView() override;
 
-    armarx::Mutex& getMutex();
+    std::mutex& getMutex();
 
 signals:
     void testSignal();
@@ -77,6 +78,6 @@ private:
     Ui::ApplicationDatabaseView* ui;
     FilterableTreeModelSortFilterProxyModelPtr model;
 
-    armarx::Mutex mutex;
+    std::mutex mutex;
 };
 
diff --git a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp
index 28605626..682a6e60 100644
--- a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.cpp
@@ -286,7 +286,7 @@ void StateTreeModel::generateGroupDocString(StatechartGroupPtr group, QString do
 
 const CMakePackageFinder& StateTreeModel::getPackageFinder(const QString& packageName)
 {
-    ScopedLock lock(findersMutex);
+    std::unique_lock lock(findersMutex);
     auto it = finders.find(packageName);
     if (it == finders.end())
     {
@@ -480,7 +480,7 @@ void StateTreeModel::generateBaseClasses(const StatechartGroupPtr& group)
 
     std::map<QString, CMakePackageFinder>::const_iterator it;
     {
-        ScopedLock lock(findersMutex);
+        std::unique_lock lock(findersMutex);
         it = finders.find(group->getPackageName());
 
 
diff --git a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h
index 3066deb0..370b13bb 100644
--- a/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h
+++ b/source/ArmarXGui/gui-plugins/StatechartEditorPlugin/model/StateTreeModel.h
@@ -30,12 +30,12 @@
 
 #include <ArmarXCore/observers/variant/VariantInfo.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 #include <QMap>
 #include <QProgressDialog>
 
 #include <filesystem>
+#include <mutex>
 
 namespace armarx
 {
@@ -99,7 +99,7 @@ namespace armarx
         Ice::CommunicatorPtr iceCommunicator;
         StateTreeNodePtr rootNode;
         VariantInfoPtr variantInfo;
-        Mutex findersMutex;
+        std::mutex findersMutex;
         std::map<QString, CMakePackageFinder> finders;
         std::set<std::string> getVariantOfStatesWithNoCpp(const StatechartGroupPtr& group);
     };
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp
index a86870e7..2a9e0c18 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/IceStateConverter.cpp
@@ -38,6 +38,8 @@
 #include "model/stateinstance/LocalState.h"
 #include "model/stateinstance/StateInstance.h"
 
+#include <cmath>
+
 armarx::IceStateConverter::IceStateConverter(armarx::statechartmodel::StatePtr state)
 {
     topState.reset(new statechartmodel::LocalState(state, state->getStateName()));
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp
index e72d92bf..b7cb52ad 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.cpp
@@ -75,7 +75,7 @@ namespace armarx
     {
         SubscriptionMap tempList;
         {
-            ScopedLock lock(mapMutex);
+            std::unique_lock lock(mapMutex);
             tempList.swap(subscriptionQueue);
         }
         ARMARX_DEBUG << tempList.size() << " new subscriptions received";
@@ -86,7 +86,7 @@ namespace armarx
             StateItem* stateItem = elem.second.second;
             StateListenerDataMap::iterator it;
             {
-                ScopedLock lock(mapMutex);
+                std::unique_lock lock(mapMutex);
                 it = stateMap.find(iceState->globalStateIdentifier);
                 if (it != stateMap.end() && state && it->second.states.count(state) > 0)
                 {
@@ -116,7 +116,7 @@ namespace armarx
                     data.stateItems.insert(stateItem);
                 }
 
-                ScopedLock lock(mapMutex);
+                std::unique_lock lock(mapMutex);
                 stateMap[iceState->globalStateIdentifier] = data;
                 //                ARMARX_IMPORTANT << "subscribed to " << iceState->globalStateIdentifier;
             }
@@ -130,7 +130,7 @@ namespace armarx
 
     bool StateWatcher::subscribeToState(StateIceBasePtr iceState, statechartmodel::StatePtr state)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         if (!iceState)
         {
             ARMARX_WARNING << "Ice State NULL";
@@ -148,7 +148,7 @@ namespace armarx
 
     bool StateWatcher::unsubscribeState(StateItem* state)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         for (auto& pair : stateMap)
         {
             for (auto item : pair.second.stateItems)
@@ -165,7 +165,7 @@ namespace armarx
 
     bool StateWatcher::subscribeToState(StateIceBasePtr iceState, StateItem* state)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         if (!iceState)
         {
             ARMARX_WARNING << "Ice State NULL";
@@ -182,7 +182,7 @@ namespace armarx
 
     VariantPtr StateWatcher::getStateParameter(statechartmodel::StatePtr state, const std::string paramMapType) const
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         try
         {
             for (const auto& stateData : stateMap)
@@ -209,7 +209,7 @@ namespace armarx
 
     StateParameterMap StateWatcher::getStateParameterMap(statechartmodel::StatePtr state, const std::string paramMapType) const
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         //        try
         {
             for (const auto& stateData : stateMap)
@@ -244,7 +244,7 @@ namespace armarx
 
     void StateWatcher::clear()
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
 
         stateMap.clear();
     }
@@ -276,7 +276,7 @@ namespace armarx
             std::string stateIdentifier = event.parentName;
             if (event.functionName != Profiler::Profiler::GetEventName(Profiler::Profiler::eFunctionStart))
             {
-                ScopedLock lock(mapMutex);
+                std::unique_lock lock(mapMutex);
                 auto it = stateMap.find(stateIdentifier);
                 if (it == stateMap.end())
                 {
@@ -308,7 +308,7 @@ namespace armarx
     {
         try
         {
-            ScopedLock lock(mapMutex);
+            std::unique_lock lock(mapMutex);
 
             {
                 ARMARX_DEBUG << "Got event reported for active state changed: " << event.parentStateIdentifier;
@@ -430,21 +430,21 @@ namespace armarx
 
     void StateWatcher::reportStatechartInputParameters(const ProfilerStatechartParameters& event, const Ice::Current&)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         //        ARMARX_INFO << "input update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap);
         stateMap[event.stateIdentifier].parameters["inputParameters"] = event.parameterMap;
     }
 
     void StateWatcher::reportStatechartLocalParameters(const ProfilerStatechartParameters& event, const Ice::Current&)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         //        ARMARX_INFO << "local update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap);
         stateMap[event.stateIdentifier].parameters["localParameters"] = event.parameterMap;
     }
 
     void StateWatcher::reportStatechartOutputParameters(const ProfilerStatechartParameters& event, const Ice::Current&)
     {
-        ScopedLock lock(mapMutex);
+        std::unique_lock lock(mapMutex);
         //        ARMARX_INFO << "output update for " << event.stateIdentifier << " content: " << StateUtilFunctions::getDictionaryString(event.parameterMap);
         stateMap[event.stateIdentifier].parameters["outputParameters"] = event.parameterMap;
 
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h
index 25cd2b9d..0b4bfe74 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StateWatcher.h
@@ -25,10 +25,11 @@
 #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.h>
 #include <ArmarXCore/observers/variant/DatafieldRef.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXCore/interface/observers/ProfilerObserverInterface.h>
 #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/view/StateItem.h>
 
+#include <mutex>
+
 namespace armarx
 {
 
@@ -70,7 +71,7 @@ namespace armarx
         void subscriptionFunction();
 
         StateListenerDataMap stateMap;
-        mutable armarx::Mutex mapMutex;
+        mutable std::mutex mapMutex;
         ConditionHandlerInterfacePrx conditionHandler;
         ProfilerObserverInterfacePrx profilerObserver;
         using SubscriptionMap = std::vector<std::pair<StateIceBasePtr, std::pair<statechartmodel::StatePtr, StateItem*>> >;
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp
index bbcba37c..09a94e35 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.cpp
@@ -81,7 +81,7 @@ namespace armarx
     StatechartViewerController::~StatechartViewerController()
     {
         shutdown = true;
-        ScopedRecursiveLock lock(mutex);// wait for network functions to finish
+        std::unique_lock lock(mutex);// wait for network functions to finish
 
     }
 
@@ -156,7 +156,7 @@ namespace armarx
 
     void StatechartViewerController::updateStatechartView(StateIceBasePtr stateptr, IceStateConverterPtr converter)
     {
-        ScopedRecursiveLock lock(mutex);
+        std::unique_lock lock(mutex);
         auto start = IceUtil::Time::now();
         converter->convert(stateptr);
         ARMARX_DEBUG << deactivateSpam(3) << "converting instance took : " << (IceUtil::Time::now() - start).toMilliSecondsDouble() << " ms";
@@ -170,7 +170,7 @@ namespace armarx
         }
         QMap<QPointer<StatechartView>, RemoteStateData> tempConverters;
         {
-            ScopedRecursiveLock lock(mutex);
+            std::unique_lock lock(mutex);
             tempConverters = converters;
         }
         for (RemoteStateData& stateData : tempConverters)
@@ -437,7 +437,7 @@ namespace armarx
 
         if (result == triggerTransition)
         {
-            ScopedRecursiveLock lock(mutex);
+            std::unique_lock lock(mutex);
 
             for (RemoteStateData& data : converters)
             {
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h
index 8d307498..ac03ff99 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/StatechartViewerController.h
@@ -34,6 +34,8 @@
 
 #include <ArmarXGui/gui-plugins/StatechartViewerPlugin/controller/ActiveStateFollower.h>
 
+#include <mutex>
+
 namespace Ui
 {
     class StatechartViewer;
@@ -117,7 +119,7 @@ namespace armarx
         QPointer<QToolBar> customToolbar;
         QAction* autoFollowAction;
         QAction* centerActiveStateAction;
-        RecursiveMutex mutex;
+        std::recursive_mutex mutex;
         bool shutdown = false;
         // ArmarXWidgetController interface
     public:
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h
index 2031f34e..40100e75 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/Layout.h
@@ -23,7 +23,6 @@
  */
 #pragma once
 
-#include <ArmarXCore/core/system/Synchronization.h>
 #include "graphviz/gvc.h"
 #ifdef WITH_CGRAPH
 #  include <graphviz/cgraph.h>
@@ -60,7 +59,7 @@ namespace armarx
         /**
          * @brief mutex Mutex to lock graph
          */
-        RecursiveMutex mutex;
+        std::recursive_mutex mutex;
     };
     using LockableGraphPtr = std::shared_ptr<LockableGraph>;
 
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp
index 4c622068..2b8b5b89 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/LayoutWorker.cpp
@@ -47,7 +47,7 @@ armarx::LayoutWorker::LayoutWorker(size_t workerId, QString name, armarx::GvcPtr
       name(name)
 {
     m_graph = std::make_shared<LockableGraph>();
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
     m_graph->graph = agopen(name.toLatin1().data(), Agdirected, NULL);
     ARMARX_INFO_S << m_graph->graph << " Creating Graph with name " << name.toLatin1().data();
 
@@ -97,7 +97,7 @@ armarx::LayoutWorker::LayoutWorker(size_t workerId, QString name, armarx::GvcPtr
 
 armarx::LayoutWorker::~LayoutWorker()
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
     agclose(m_graph->graph);
 }
 
@@ -137,7 +137,7 @@ void armarx::LayoutWorker::isConnected(size_t workerId)
 
 void armarx::LayoutWorker::layoutWithAlgo(std::string algorithm)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
     //    ARMARX_INFO_S << "Layouting with graph ptr " << m_graph->graph;
     //    int nodeCard = agnnodes(m_graph->graph);
     //    ARMARX_INFO_S << "State " /*<< m_graph->graph->name*/ << " with " << nodeCard << " substates is to be layouted";
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp
index 635a8d26..7e07807e 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/layout/StateModelLayoutMediator.cpp
@@ -311,7 +311,7 @@ void armarx::StateModelLayoutMediator::stateDeleted()
 
 bool armarx::StateModelLayoutMediator::updateInitialTransition(armarx::statechartmodel::TransitionCPtr transition, armarx::statechartmodel::SignalType signalType)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
     if (transition->sourceState)
     {
         return false;
@@ -429,7 +429,7 @@ QPointF armarx::StateModelLayoutMediator::convertPositionToGraphViz(QPointF stat
 
 void armarx::StateModelLayoutMediator::addNode(armarx::statechartmodel::StateInstancePtr substate)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     //Sometimes the eAdded signal for a node reaches the mediator after an eChanged signal. Test whether
     //there already is a node for the given substate and only add one if there isn't one already.
@@ -461,7 +461,7 @@ void armarx::StateModelLayoutMediator::addNode(armarx::statechartmodel::StateIns
 
 void armarx::StateModelLayoutMediator::removeNode(armarx::statechartmodel::StateInstancePtr substate)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     NodePtr node = getNode(substate);
     if (!substate || !substate->getStateClass())
@@ -480,7 +480,7 @@ void armarx::StateModelLayoutMediator::removeNode(armarx::statechartmodel::State
 void armarx::StateModelLayoutMediator::setNodeAttribute(armarx::statechartmodel::StateInstancePtr substate,
         const std::string& attributeName, const std::string& attributeValue)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     NodePtr node = getNode(substate);
 
@@ -495,7 +495,7 @@ void armarx::StateModelLayoutMediator::setNodeAttribute(armarx::statechartmodel:
 
 std::string armarx::StateModelLayoutMediator::getNodeAttribute(armarx::statechartmodel::StateInstancePtr substate, const std::string& attributeName)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     NodePtr node = getNode(substate);
 
@@ -509,7 +509,7 @@ std::string armarx::StateModelLayoutMediator::getNodeAttribute(armarx::statechar
 }
 bool armarx::StateModelLayoutMediator::hasNodeAttribute(armarx::statechartmodel::StateInstancePtr substate, const std::string& attributeName)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     NodePtr node = getNode(substate);
 
@@ -573,7 +573,7 @@ armarx::NodePtr armarx::StateModelLayoutMediator::getNode(armarx::statechartmode
 
 void armarx::StateModelLayoutMediator::addEdge(armarx::statechartmodel::TransitionCPtr transition)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     if (!transitionRepresentable(transition))
     {
@@ -601,7 +601,7 @@ void armarx::StateModelLayoutMediator::addEdge(armarx::statechartmodel::Transiti
 
 void armarx::StateModelLayoutMediator::removeEdge(armarx::statechartmodel::TransitionCPtr transition)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     EdgePtr edge = getEdge(transition);
 
@@ -617,7 +617,7 @@ void armarx::StateModelLayoutMediator::removeEdge(armarx::statechartmodel::Trans
 
 void armarx::StateModelLayoutMediator::setEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName, std::string attributeValue)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     EdgePtr edge = getEdge(transition);
 
@@ -631,7 +631,7 @@ void armarx::StateModelLayoutMediator::setEdgeAttribute(armarx::statechartmodel:
 
 std::string armarx::StateModelLayoutMediator::getEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     EdgePtr edge = getEdge(transition);
 
@@ -646,7 +646,7 @@ std::string armarx::StateModelLayoutMediator::getEdgeAttribute(armarx::statechar
 
 bool armarx::StateModelLayoutMediator::hasEdgeAttribute(armarx::statechartmodel::TransitionCPtr transition, std::string attributeName)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     EdgePtr edge = getEdge(transition);
 
@@ -812,7 +812,7 @@ void armarx::StateModelLayoutMediator::updateNodeName(armarx::statechartmodel::S
 
         if (newName != oldName)
         {
-            ScopedRecursiveLock lock(m_graph->mutex);
+            std::unique_lock lock(m_graph->mutex);
 
             NodePtr node = getNode(oldName);
             setGraphAttribute(node, "label", newName);
@@ -838,7 +838,7 @@ void armarx::StateModelLayoutMediator::updateEdgeLabel(armarx::statechartmodel::
 
 void armarx::StateModelLayoutMediator::updateEdgeTargetAndSource(armarx::statechartmodel::TransitionCPtr transition)
 {
-    ScopedRecursiveLock lock(m_graph->mutex);
+    std::unique_lock lock(m_graph->mutex);
 
     if (transitionRepresentable(transition))
     {
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp
index 90da915f..d718f49c 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/State.cpp
@@ -25,10 +25,11 @@
 #include "stateinstance/RemoteState.h"
 #include "stateinstance/LocalState.h"
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h>
+#include "stateinstance/DynamicRemoteState.h"
 
 #include <IceUtil/UUID.h>
 
-#include "stateinstance/DynamicRemoteState.h"
+#include <cmath>
 
 namespace armarx::statechartmodel
 {
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp
index 78a04bc8..1e1702cb 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/model/stateinstance/StateInstance.cpp
@@ -27,6 +27,8 @@ using namespace statechartmodel;
 
 #include "../State.h"
 
+#include <cmath>
+
 const QSizeF StateInstance::StateDefaultSize = QSizeF(800, 600);
 
 StateInstance::StateInstance(const QString& instanceName, StatePtr parentState) :
diff --git a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp
index 2a9cf3aa..e8fc6d7a 100644
--- a/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp
+++ b/source/ArmarXGui/gui-plugins/StatechartViewerPlugin/view/TransitionItem.cpp
@@ -39,9 +39,11 @@
 #include <QGraphicsView>
 #include <QPropertyAnimation>
 #include <QStyleOptionGraphicsItem>
-#include <memory>
 #include "SplinePath.h"
 
+#include <memory>
+#include <cmath>
+
 
 #define INITIAL_CIRCLE_RADIUS 10
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp
index a23e661d..1c05ad96 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.cpp
@@ -137,7 +137,7 @@ namespace armarx
     }
 
 
-    Mutex& ArmarXManagerItem::getMutex()
+    std::mutex& ArmarXManagerItem::getMutex()
     {
         return mutex;
     }
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h
index 906ba6f3..1e251805 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerItem.h
@@ -30,12 +30,12 @@
 #include <ArmarXCore/core/ArmarXManager.h>
 #include <ArmarXCore/core/ManagedIceObject.h>
 #include <ArmarXCore/core/ManagedIceObjectRegistryInterface.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 #include <QObject>
-#include <QMutex>
 #include <QStandardItem>
 
+#include <mutex>
+
 namespace armarx
 {
     class ArmarXManagerItem : public QStandardItem
@@ -83,11 +83,11 @@ namespace armarx
          *
          * @return Access mutex
          */
-        Mutex& getMutex();
+        std::mutex& getMutex();
 
     private:
         ManagerData data;
-        Mutex mutex;
+        std::mutex mutex;
     };
 }
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp
index 96f91b04..d067affc 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.cpp
@@ -617,7 +617,7 @@ namespace armarx
         return QVariant();
     }
 
-    Mutex& ArmarXManagerModel::getMutex()
+    std::mutex& ArmarXManagerModel::getMutex()
     {
         return mutex;
     }
@@ -630,7 +630,7 @@ namespace armarx
 
         if (managerItem)
         {
-            // ScopedLock lock(getMutex());
+            // std::unique_lock lock(getMutex());
 
             managerItem->setName(item->text());
         }
@@ -659,7 +659,7 @@ namespace armarx
     void ArmarXManagerModel::populate(const QStringList& managerList)
     {
         CHECK_QT_THREAD(this);
-        // ScopedLock lock(getMutex());
+        // std::unique_lock lock(getMutex());
 
         this->clear();
 
@@ -675,7 +675,7 @@ namespace armarx
         CHECK_QT_THREAD(this);
         ArmarXManagerModel* modelCopy = new ArmarXManagerModel();
 
-        ScopedLock lock(getMutex());
+        std::unique_lock lock(getMutex());
 
         for (int i = 0;  i < rowCount(); i++)
         {
@@ -691,8 +691,8 @@ namespace armarx
     void ArmarXManagerModel::copyFrom(ArmarXManagerModel* source)
     {
         CHECK_QT_THREAD(this);
-        // ScopedLock lock(getMutex());
-        // ScopedLock lockSource(source->getMutex());
+        // std::unique_lock lock(getMutex());
+        // std::unique_lock lockSource(source->getMutex());
 
         this->clear();
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h
index d10caf77..b4b54473 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ArmarXManagerModel.h
@@ -37,7 +37,8 @@
 #include <ArmarXCore/core/ArmarXManager.h>
 #include <ArmarXCore/core/ManagedIceObject.h>
 #include <ArmarXCore/core/ManagedIceObjectRegistryInterface.h>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <mutex>
 
 namespace armarx
 {
@@ -153,7 +154,7 @@ namespace armarx
         /**
          * Returns the access mutex
          */
-        Mutex& getMutex();
+        std::mutex& getMutex();
 
         void setIceManager(IceManagerPtr iceManager);
         IceManagerPtr getIceManager() const;
@@ -214,7 +215,7 @@ namespace armarx
         /**
          * Modification access mutex
          */
-        Mutex mutex;
+        std::mutex mutex;
 
         IceManagerPtr iceManager;
         std::map<std::string, DependencyMap> dependenciesMap;
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp
index 4ef5c161..f1b7ad48 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.cpp
@@ -121,7 +121,7 @@ namespace armarx
     {
         QString lastSelectionText = ui->gridNodeSelector->currentText();
         {
-            ScopedLock guard(gridNodeListMutex);
+            std::unique_lock guard(gridNodeListMutex);
             gridNodeList = nodeSeq;
             QStringList nodeNames;
 
@@ -143,7 +143,7 @@ namespace armarx
 
     void IceGridViewer::gridNodeListAdd(const IceGrid::NodeDynamicInfo& node)
     {
-        ScopedLock guard(gridNodeListMutex);
+        std::unique_lock guard(gridNodeListMutex);
         QStringList currentEntries = selectorModel->stringList();
         currentEntries.append(QString::fromStdString(node.info.name));
         gridNodeList.push_back(node);
@@ -155,7 +155,7 @@ namespace armarx
     {
         QString lastSelectionText = ui->gridNodeSelector->currentText();
         {
-            ScopedLock guard(gridNodeListMutex);
+            std::unique_lock guard(gridNodeListMutex);
 
             QStringList currentEntries = selectorModel->stringList();
             currentEntries.removeOne(node);
@@ -180,7 +180,7 @@ namespace armarx
     void IceGridViewer::updateServerInfo(const std::string& nodeName, const IceGrid::ServerDynamicInfo& serverUpdateInfo)
     {
         {
-            ScopedLock guard(gridNodeListMutex);
+            std::unique_lock guard(gridNodeListMutex);
             IceGrid::NodeDynamicInfoSeq::iterator nodeEntry =
                 std::find_if(gridNodeList.begin(), gridNodeList.end(), [nodeName](IceGrid::NodeDynamicInfo nodeInfo)
             {
@@ -222,7 +222,7 @@ namespace armarx
     void IceGridViewer::updateAdapterInfo(const std::string& nodeName, const IceGrid::AdapterDynamicInfo& adapterUpdateInfo)
     {
         {
-            ScopedLock guard(gridNodeListMutex);
+            std::unique_lock guard(gridNodeListMutex);
             IceGrid::NodeDynamicInfoSeq::iterator nodeEntry =
                 std::find_if(gridNodeList.begin(), gridNodeList.end(), [nodeName](IceGrid::NodeDynamicInfo nodeInfo)
             {
@@ -274,7 +274,7 @@ namespace armarx
             return;
         }
 
-        ScopedLock guard(gridNodeListMutex);
+        std::unique_lock guard(gridNodeListMutex);
         nodeInfoModel->setData(gridNodeList[index].info);
         serverInfoModel->setData(gridNodeList[index].servers);
         adapterInfoModel->setData(gridNodeList[index].adapters);
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h
index d5125bec..13eb8ddd 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/IceGridViewer.h
@@ -23,13 +23,14 @@
 #pragma once
 
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 #include <QWidget>
 #include <QStringListModel>
 
 #include <IceGrid/Admin.h>
 
+#include <mutex>
+
 namespace Ui
 {
     class IceGridViewer;
@@ -107,7 +108,7 @@ namespace armarx
         void serverInfoChanged(IceGrid::ServerDynamicInfo serverInfo);
 
     private:
-        mutable Mutex gridNodeListMutex;
+        mutable std::mutex gridNodeListMutex;
         Ui::IceGridViewer* ui;
 
         const std::string ADAPTER_NAME;
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h
index 50c93a9a..776dc111 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/AdapterInfoModel.h
@@ -24,7 +24,8 @@
 
 #include <QAbstractTableModel>
 #include <IceGrid/Admin.h>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <mutex>
 
 class AdapterInfoModel :
     public QAbstractTableModel
@@ -68,7 +69,7 @@ public:
 
         if (role == Qt::DisplayRole)
         {
-            armarx::ScopedLock guard(adapterInfoMutex);
+            std::unique_lock guard(adapterInfoMutex);
 
             switch (index.column())
             {
@@ -126,7 +127,7 @@ public:
 
     bool setData(IceGrid::AdapterDynamicInfoSeq newInfo)
     {
-        armarx::ScopedLock guard(adapterInfoMutex);
+        std::unique_lock guard(adapterInfoMutex);
         beginResetModel();
         adapterInfo = newInfo;
         endResetModel();
@@ -136,6 +137,6 @@ public:
 
 protected:
     IceGrid::AdapterDynamicInfoSeq adapterInfo;
-    mutable armarx::Mutex adapterInfoMutex;
+    mutable std::mutex adapterInfoMutex;
 };
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp
index 60af383b..dbc871f0 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.cpp
@@ -54,7 +54,7 @@ namespace armarx
     {
         const unsigned int& row = index.row();
         const unsigned int& column = index.column();
-        ScopedLock lock(gridNodeListsMutex);
+        std::unique_lock lock(gridNodeListsMutex);
 
         if (row >= gridNodeItemsList.size())
         {
@@ -117,7 +117,7 @@ namespace armarx
     void IceGridModel::setData(const std::vector<std::string>& gridNodeItemsList)
     {
         beginResetModel();
-        ScopedLock lock(gridNodeListsMutex);
+        std::unique_lock lock(gridNodeListsMutex);
         this->gridNodeItemsList = gridNodeItemsList;
         endResetModel();
         emit dataChanged(index(0, 0), index(rowCount(), columnCount()));
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h
index 38265765..355ca545 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/IceGridModel.h
@@ -25,7 +25,7 @@
 #include <QAbstractItemModel>
 #include <QStyledItemDelegate>
 
-#include <ArmarXCore/core/system/Synchronization.h>
+#include <mutex>
 
 namespace armarx
 {
@@ -53,7 +53,7 @@ namespace armarx
         void run();
 
         std::vector<std::string> gridNodeItemsList;
-        mutable Mutex gridNodeListsMutex;
+        mutable std::mutex gridNodeListsMutex;
     };
 }
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h
index e49ab663..7e9d00ed 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/NodeInfoModel.h
@@ -24,7 +24,8 @@
 
 #include <QAbstractTableModel>
 #include <IceGrid/Admin.h>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <mutex>
 
 class NodeInfoModel :
     public QAbstractTableModel
@@ -64,7 +65,7 @@ public:
 
         if (role == Qt::DisplayRole)
         {
-            armarx::ScopedLock guard(nodeInfoMutex);
+            std::unique_lock guard(nodeInfoMutex);
 
             switch (index.column())
             {
@@ -167,7 +168,7 @@ public:
 
     bool setData(IceGrid::NodeInfo newInfo)
     {
-        armarx::ScopedLock guard(nodeInfoMutex);
+        std::unique_lock guard(nodeInfoMutex);
         beginResetModel();
         nodeInfo = newInfo;
         endResetModel();
@@ -177,6 +178,6 @@ public:
 
 protected:
     IceGrid::NodeInfo nodeInfo;
-    mutable armarx::Mutex nodeInfoMutex;
+    mutable std::mutex nodeInfoMutex;
 };
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h
index 3adcfe7d..e03d1b09 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/IceGridViewer/model/ServerInfoModel.h
@@ -24,10 +24,11 @@
 
 #include <QAbstractTableModel>
 #include <IceGrid/Admin.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 #include <QBrush>
 
+#include <mutex>
+
 
 class ServerInfoModel :
     public QAbstractTableModel
@@ -79,7 +80,7 @@ public:
 
         if (role == Qt::DisplayRole)
         {
-            armarx::ScopedLock guard(serverInfoMutex);
+            std::unique_lock guard(serverInfoMutex);
 
             switch (index.column())
             {
@@ -209,7 +210,7 @@ public:
 
     bool setData(IceGrid::ServerDynamicInfoSeq newInfo)
     {
-        armarx::ScopedLock guard(serverInfoMutex);
+        std::unique_lock guard(serverInfoMutex);
         beginResetModel();
         serverInfo = newInfo;
         endResetModel();
@@ -222,6 +223,6 @@ signals:
 
 protected:
     IceGrid::ServerDynamicInfoSeq serverInfo;
-    mutable armarx::Mutex serverInfoMutex;
+    mutable std::mutex serverInfoMutex;
 };
 
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp
index d36765f2..736f9979 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.cpp
@@ -232,7 +232,7 @@ namespace armarx
         }
         else
         {
-            ScopedLock lock(managerPrxMapMutex);
+            std::unique_lock lock(managerPrxMapMutex);
             currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap();
         }
     }
@@ -259,7 +259,7 @@ namespace armarx
     {
         CHECK_QT_THREAD(getWidget());
 
-        ScopedLock lock(monitoredManagerModel->getMutex());
+        std::unique_lock lock(monitoredManagerModel->getMutex());
 
         monitoredManagerModel->updateManagerDetails(managerData);
         filterModel->invalidate();
@@ -339,13 +339,13 @@ namespace armarx
     void SystemStateMonitorWidget::updateManagerObjectsState()
     {
 
-        //    ScopedLock lock(monitoredManagerModel->getMutex());
+        //    std::unique_lock lock(monitoredManagerModel->getMutex());
         //    StateUpdateMap stateMap;
         ArmarXManagerItem::ManagerDataMap managerDataMap;
         {
             decltype(currentManagerPrxMap) proxies;
             {
-                ScopedLock lock(managerPrxMapMutex);
+                std::unique_lock lock(managerPrxMapMutex);
                 proxies = currentManagerPrxMap;
             }
             IceUtil::Time start = IceUtil::Time::now();
@@ -376,7 +376,7 @@ namespace armarx
         this->monitoredManagerModel->copyFrom(
             managerRepositoryDialog->getMonitoredManagersModel());
         ui.monitoredManagersTree->expandToDepth(1);
-        ScopedLock lock(managerPrxMapMutex);
+        std::unique_lock lock(managerPrxMapMutex);
         currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap();
     }
 
@@ -460,7 +460,7 @@ namespace armarx
         //    QMetaObject::invokeMethod(this, "addArmarXManagers", Q_ARG(QStringList, managers));
         addArmarXManagers(managers);
         QMetaObject::invokeMethod(ui.monitoredManagersTree, "expandToDepth", Q_ARG(int, 0));
-        ScopedLock lock(managerPrxMapMutex);
+        std::unique_lock lock(managerPrxMapMutex);
         currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap(managers);
 
     }
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h
index 78b2968d..386423e3 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/SystemStateMonitorWidget.h
@@ -40,6 +40,8 @@
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h>
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXComponentWidgetController.h>
 
+#include <mutex>
+
 namespace Ui
 {
     class SystemStateMonitorWidget;
@@ -175,7 +177,7 @@ namespace armarx
          */
         ArmarXManagerModel* managerRepositoryModel;
 
-        Mutex managerPrxMapMutex;
+        std::mutex managerPrxMapMutex;
         ManagerPrxMap currentManagerPrxMap;
         QTimer filterExpansionTimer;
         /**
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp
index 48dd0305..81449fa2 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.cpp
@@ -50,7 +50,7 @@ namespace armarx
     {
         const unsigned int& row = index.row();
         const unsigned int& column = index.column();
-        ScopedLock lock(taskListsMutex);
+        std::unique_lock lock(taskListsMutex);
 
         if (row >= runningTaskList.size())
         {
@@ -161,7 +161,7 @@ namespace armarx
     {
         beginResetModel();
 
-        ScopedLock lock(taskListsMutex);
+        std::unique_lock lock(taskListsMutex);
         this->runningTaskList = runningTaskList;
         endResetModel();
         emit dataChanged(index(0, 0), index(rowCount(), columnCount()));
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h
index 86347a18..f734b4b6 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/RunningTaskModel.h
@@ -25,7 +25,8 @@
 #include <QAbstractItemModel>
 
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <mutex>
 
 namespace armarx
 {
@@ -54,7 +55,7 @@ namespace armarx
 
         RunningTaskList runningTaskList;
 
-        mutable Mutex taskListsMutex;
+        mutable std::mutex taskListsMutex;
     };
 
 }
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp
index 68f4e389..b1ac02e1 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.cpp
@@ -183,7 +183,7 @@ namespace armarx
             return;
         }
 
-        ScopedRecursiveLock lock(proxyMutex);
+        std::unique_lock lock(proxyMutex);
         threadManagerProxy = getProxy<ThreadListInterfacePrx>(selectedString.toStdString());
         ARMARX_VERBOSE << "new proxy for ThreadViewerModel set: " << selectedString;
     }
@@ -196,7 +196,7 @@ namespace armarx
 
     void ThreadViewer::runThreadManagerUpdate()
     {
-        ScopedRecursiveLock lock(proxyMutex);
+        std::unique_lock lock(proxyMutex);
 
         if (!threadManagerProxy)
         {
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h
index 92539672..5412e5db 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewer.h
@@ -26,10 +26,11 @@
 #include <ArmarXCore/core/services/tasks/ThreadList.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 
 #include <QWidget>
 
+#include <mutex>
+
 namespace Ui
 {
     class ThreadViewer;
@@ -110,7 +111,7 @@ namespace armarx
 
     private:
         void runThreadManagerUpdate();
-        mutable RecursiveMutex proxyMutex;
+        mutable std::recursive_mutex proxyMutex;
         ThreadListInterfacePrx threadManagerProxy;
         PeriodicTask<ThreadViewer>::pointer_type periodicTask;
         RunningTask<ThreadViewer>::pointer_type managerUpdateTask;
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp
index b62e540f..6c4a8f99 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.cpp
@@ -50,7 +50,7 @@ namespace armarx
     {
         const unsigned int& row = index.row();
         const unsigned int& column = index.column();
-        ScopedLock lock(taskListsMutex);
+        std::unique_lock lock(taskListsMutex);
 
         if (row >= periodicTaskList.size())
         {
@@ -176,7 +176,7 @@ namespace armarx
     {
         beginResetModel();
 
-        ScopedLock lock(taskListsMutex);
+        std::unique_lock lock(taskListsMutex);
         this->periodicTaskList = periodicTaskList;
         endResetModel();
         emit dataChanged(index(0, 0), index(rowCount(), columnCount()));
diff --git a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h
index 1882a428..db557773 100644
--- a/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h
+++ b/source/ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ThreadViewer/ThreadViewerModel.h
@@ -25,7 +25,8 @@
 #include <QAbstractItemModel>
 
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <mutex>
 
 namespace armarx
 {
@@ -53,7 +54,7 @@ namespace armarx
         void run();
 
         PeriodicTaskList periodicTaskList;
-        mutable Mutex taskListsMutex;
+        mutable std::mutex taskListsMutex;
     };
 
 }
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h
index 8ffc9ab5..a7f0c1ab 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXGuiPlugin.h
@@ -29,7 +29,7 @@
 #include <ArmarXCore/core/exceptions/Exception.h>
 #include <ArmarXCore/core/util/TemplateMetaProgramming.h>
 
-#include <boost/type_traits/is_base_of.hpp>
+#include <type_traits>
 
 namespace armarx
 {
@@ -57,7 +57,8 @@ namespace armarx
         template < typename ArmarXWidgetType>
         typename std::enable_if < !HasGetWidgetName<ArmarXWidgetType>::value >::type addWidget()
         {
-            BOOST_STATIC_ASSERT_MSG((boost::is_base_of<ArmarXWidgetController, ArmarXWidgetType>::value), "The template parameter of addWidget, must be a class that derives from ArmarXWidget");
+            static_assert(std::is_base_of_v<ArmarXWidgetController, ArmarXWidgetType>,
+                          "The template parameter of addWidget, must be a class that derives from ArmarXWidget");
 
             try
             {
@@ -96,7 +97,8 @@ namespace armarx
         template <typename ArmarXWidgetType>
         typename std::enable_if<HasGetWidgetName<ArmarXWidgetType>::value>::type addWidget()
         {
-            BOOST_STATIC_ASSERT_MSG((boost::is_base_of<ArmarXWidgetController, ArmarXWidgetType>::value), "The template parameter of addWidget, must be a class that derives from ArmarXWidget");
+            static_assert(std::is_base_of_v<ArmarXWidgetController, ArmarXWidgetType>,
+                          "The template parameter of addWidget, must be a class that derives from ArmarXWidget");
 
             try
             {
@@ -107,7 +109,7 @@ namespace armarx
                                                  + "' already exists in a loaded plugin!").toStdString());
                 }
 
-                if (boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>::value)
+                if (std::is_base_of_v<ArmarXComponentWidgetController, ArmarXWidgetType>)
                 {
                     ArmarXWidgetInfoPtr widgetInfo(new ArmarXWidgetInfo(ArmarXComponentWidgetController::createInstance<ArmarXWidgetType>,
                                                    ArmarXWidgetType::GetWidgetIcon(),
@@ -127,30 +129,6 @@ namespace armarx
                 ARMARX_ERROR_S << "Could not add widget!\n" << GetHandledExceptionString();
             }
         }
-        //        template<typename ArmarXWidgetType>
-        //        typename boost::enable_if<boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>, void >::type
-        //        addWidget(const QString & widgetName)
-        //        {
-        //            addWidget<ArmarXWidgetType,ArmarXComponentWidgetController>(widgetName);
-        //        }
-
-        //        template<typename ArmarXWidgetType>
-        //        typename boost::disable_if<boost::is_base_of<ArmarXComponentWidgetController, ArmarXWidgetType>, void >::type
-        //        addWidget(const QString & widgetName)
-        //        {
-        //            addWidget<ArmarXWidgetType,ArmarXWidgetController>(widgetName);
-        //        }
-
-        //        template<typename ArmarXWidgetType, class BaseType>
-        //        void
-        //        addWidget(const QString & widgetName)
-        //        {
-        //            if(__availableWidgets.find(widgetName) != __availableWidgets.end())
-        //                throw LocalException(QString("A widget with the name '"
-        //                                             + widgetName
-        //                                             +"' already exists in a loaded plugin!").toStdString());
-        //            __availableWidgets[widgetName] = BaseType::template createInstance< ArmarXWidgetType >;
-        //        }
 
         WidgetCreatorMap getProvidedWidgets() override
         {
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp
index 8d3d6ed5..1c36823b 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.cpp
@@ -115,15 +115,13 @@ namespace armarx
     }
 
 
-    void ArmarXWidgetController::setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D)
+    void ArmarXWidgetController::setMutex3D(RecursiveMutexPtr const& mutex3D)
     {
-        //ARMARX_INFO << "Widget controller " << getInstanceName() << ": set mutex " << mutex3D.get();
         this->mutex3D = mutex3D;
     }
 
     void ArmarXWidgetController::configAccepted()
     {
-        //    ARMARX_VERBOSE << "config was accepted";
         configured();
         emit configAccepted(this);
     }
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h
index 83fe9704..3c0dd806 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h
@@ -33,11 +33,11 @@
 // Armarx includes
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/Component.h>
-#include <ostream>
 #include "QtUtil.h"
 
-#include <boost/shared_ptr.hpp>
-#include <boost/thread/recursive_mutex.hpp>
+#include <ostream>
+#include <memory>
+#include <mutex>
 
 
 class SoNode;
@@ -266,11 +266,17 @@ namespace armarx
          */
         QPointer<TipDialog> getTipDialog() const;
         void setTipDialog(QPointer<TipDialog> tipDialog);
+
+        // This is all total madness. Why do we put mutexes and locks into shared pointers?
+        using RecursiveMutex = std::recursive_mutex;
+        using RecursiveMutexPtr = std::shared_ptr<RecursiveMutex>;
+        using RecursiveMutexLock = std::unique_lock<RecursiveMutex>;
+        using RecursiveMutexLockPtr = std::shared_ptr<RecursiveMutexLock>;
         /*!
          * \brief This mutex is used to protect 3d scene updates. Usually called by the ArmarXGui main window on creation of this controller.
          * \param mutex3D
          */
-        virtual void setMutex3D(boost::shared_ptr<boost::recursive_mutex> mutex3D);
+        virtual void setMutex3D(RecursiveMutexPtr const& mutex3D);
 
         template <typename Class>
         static ArmarXWidgetControllerPtr createInstance()
@@ -308,7 +314,7 @@ namespace armarx
         QMainWindow* __appMainWindow;
         QPointer<TipDialog> tipDialog;
     protected:
-        boost::shared_ptr<boost::recursive_mutex> mutex3D;
+        std::shared_ptr<std::recursive_mutex> mutex3D;
     };
 }
 
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp
index 776681f8..40b0d0d1 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.cpp
@@ -63,7 +63,7 @@ namespace armarx
         bool found = false;
         QFileInfo info(pluginPath) ;
         {
-            ScopedRecursiveLock lock(cacheMutex);
+            std::unique_lock lock(cacheMutex);
             for (auto& elem : pluginData)
             {
                 //            ARMARX_INFO_S << info.lastModified().toString() << elem.pluginPath;
@@ -99,14 +99,14 @@ namespace armarx
 
     bool PluginCache::cacheWidget(QString widgetName, ArmarXWidgetInfoPtr widgetCreator)
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         pluginData[""].widgets[widgetName] = widgetCreator;
         return true;
     }
 
     ArmarXWidgetInfoPtr PluginCache::getWidgetCreator(const QString& widgetName)
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         for (const PluginData& data : pluginData)
         {
             WidgetCreatorMap::const_iterator it = data.widgets.find(widgetName);
@@ -132,7 +132,7 @@ namespace armarx
 
     QStringList PluginCache::getAvailableWidgetNames() const
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         QStringList result;
         for (const PluginData& data : pluginData)
         {
@@ -147,7 +147,7 @@ namespace armarx
 
     WidgetCreatorMap PluginCache::getAvailableWidgets() const
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         WidgetCreatorMap result;
         for (const PluginData& data : pluginData)
         {
@@ -212,7 +212,7 @@ namespace armarx
             for (QString widgetName : widgetNames)
             {
                 {
-                    ScopedRecursiveLock lock(cacheMutex);
+                    std::unique_lock lock(cacheMutex);
                     QString pluginPath;
                     for (PluginData& data : pluginData)
                     {
@@ -250,7 +250,7 @@ namespace armarx
 
     void PluginCache::clearCacheFile()
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         ARMARX_INFO << "Clearing plugin cache";
         s.clear();
     }
@@ -269,7 +269,7 @@ namespace armarx
 
     void PluginCache::removeWidgetFromCache(QString pluginPath, QString widgetName)
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         QMap<QString, QVariant> widgetMap = s.value("widgets").toMap();
         widgetMap.remove(pluginPath + ":" + widgetName);
         s.setValue("widgets", widgetMap);
@@ -287,7 +287,7 @@ namespace armarx
 
     void PluginCache::removePluginFromCache(QString pluginPath)
     {
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         ARMARX_INFO << "Removing plugin " << pluginPath << " from cache";
         QMap<QString, QVariant> widgetMap = s.value("widgets").toMap();
         QMap<QString, QVariant> newWidgetMap;
@@ -313,7 +313,7 @@ namespace armarx
     void PluginCache::updateLastModifiedTimestamp(const QString& pluginPath)
     {
         QDateTime time = QFileInfo(pluginPath).lastModified();
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         QMap<QString, QVariant> widgetMap = s.value("widgets").toMap();
         ARMARX_DEBUG_S << "Updating last modified timestamp of plugin " << pluginPath << " to " << time.toString();
         auto& pluginDataElement = pluginData[pluginPath];
@@ -337,7 +337,7 @@ namespace armarx
         auto widgets = loadPlugin(loader);
         copyResourcesToCache();
         ARMARX_INFO_S << "Writing plugin " << pluginPath << " to cache";
-        ScopedRecursiveLock lock(cacheMutex);
+        std::unique_lock lock(cacheMutex);
         QMap<QString, QVariant> widgetMap = s.value("widgets").toMap();
         QDateTime time = QFileInfo(pluginPath).lastModified();
         for (auto& elem : widgets)
@@ -363,7 +363,7 @@ namespace armarx
         QByteArray hash;
         QMap<QString, QVariant> map;
         {
-            ScopedRecursiveLock lock(cacheMutex);
+            std::unique_lock lock(cacheMutex);
             map = s.value("widgets").toMap();
         }
         for (auto key : map.keys())
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h
index 78e8f0bb..e1440027 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/PluginCache.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXGui/libraries/ArmarXGuiBase/ArmarXWidgetController.h>
 
 #include <QDateTime>
@@ -9,6 +8,7 @@
 
 #include <memory>
 #include <future>
+#include <mutex>
 
 
 class QProgressDialog;
@@ -63,7 +63,7 @@ namespace armarx
         QMap<QString, PluginData> pluginData;
         ArmarXManagerPtr manager;
         QSettings s;
-        mutable RecursiveMutex cacheMutex;
+        mutable std::recursive_mutex cacheMutex;
         std::future<void> preloadFuture;
         bool shutdown = false;
 
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp
index 809b1094..791c68ec 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.cpp
@@ -35,27 +35,25 @@ namespace armarx
                            SoQtFullViewer::BuildFlag flag,
                            SoQtViewer::Type type)
         : SoQtExaminerViewer(parent, name, embed, flag, type)
+        , mutex(std::make_shared<RecursiveMutex>())
     {
-        mutex.reset(new boost::recursive_mutex);
-        //ARMARX_IMPORTANT_S << "** Coin viewer init mutex:" << mutex.get();
     }
 
     CoinViewer::~CoinViewer()
         = default;
 
-    void CoinViewer::setMutex(boost::shared_ptr<boost::recursive_mutex> m)
+    void CoinViewer::setMutex(RecursiveMutexPtr const& m)
     {
-        //ARMARX_IMPORTANT_S << "set coinviewer mutex3d:" << m.get();
         mutex = m;
     }
 
-    ScopedRecursiveLockPtr CoinViewer::getScopedLock()
+    auto CoinViewer::getScopedLock() -> RecursiveMutexLockPtr
     {
-        ScopedRecursiveLockPtr l;
+        RecursiveMutexLockPtr l;
 
         if (mutex)
         {
-            l.reset(new ScopedRecursiveLock(*mutex));
+            l.reset(new RecursiveMutexLock(*mutex));
         }
 
         return l;
@@ -65,7 +63,7 @@ namespace armarx
     {
         // require lock
         clock_t start = clock();
-        ScopedRecursiveLockPtr l = getScopedLock();
+        auto l = getScopedLock();
         clock_t end = clock();
         long timeMS = (long)(((float)(end - start) / (float)CLOCKS_PER_SEC) * 1000.0);
 
diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h
index 6e42d3db..2ab2ddc2 100644
--- a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h
+++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/CoinViewer.h
@@ -24,8 +24,9 @@
 
 
 #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
-#include <boost/thread/recursive_mutex.hpp>
-#include <ArmarXCore/core/system/Synchronization.h>
+
+#include <memory>
+#include <mutex>
 
 // project
 namespace armarx
@@ -46,16 +47,22 @@ namespace armarx
                    SoQtViewer::Type type = BROWSER);
         ~CoinViewer() override;
 
+        // This is all total madness. Why do we put mutexes and locks into shared pointers?
+        using RecursiveMutex = std::recursive_mutex;
+        using RecursiveMutexPtr = std::shared_ptr<RecursiveMutex>;
+        using RecursiveMutexLock = std::unique_lock<RecursiveMutex>;
+        using RecursiveMutexLockPtr = std::shared_ptr<RecursiveMutexLock>;
+
         /*!
          * If set, the drawing is protected by this mutex. This overwrites the default mutex.
          */
-        void setMutex(boost::shared_ptr<boost::recursive_mutex> m);
+        void setMutex(RecursiveMutexPtr const& m);
 
 
         /*!
          * \return This lock allows to safely access the viewer's scene graph.
          */
-        ScopedRecursiveLockPtr getScopedLock();
+        RecursiveMutexLockPtr getScopedLock();
 
     protected:
 
@@ -64,9 +71,9 @@ namespace armarx
         */
         void actualRedraw(void) override;
 
-        boost::shared_ptr<boost::recursive_mutex> mutex;
+        RecursiveMutexPtr mutex;
     };
 
-    using CoinViewerPtr = boost::shared_ptr<CoinViewer>;
+    using CoinViewerPtr = std::shared_ptr<CoinViewer>;
 }
 
diff --git a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
index 55f76559..0c21ca67 100644
--- a/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
+++ b/source/ArmarXGui/libraries/PlotterController/PlotterController.cpp
@@ -125,7 +125,7 @@ namespace armarx
         {
             return;
         }
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         IceUtil::Time curTime = TimeUtil::GetTime();
         // erase old markers
@@ -347,7 +347,7 @@ namespace armarx
             return std::map<std::string, VariantPtr>();
         }
         std::map< std::string, DataFieldIdentifierBaseList > channelsSplittedByObserver;
-        foreach (QString channel, channels)
+        for (QString const& channel : channels)
         {
             DataFieldIdentifierPtr identifier = new DataFieldIdentifier(channel.toStdString());
             channelsSplittedByObserver[identifier->getObserverName()].push_back(identifier);
@@ -355,7 +355,7 @@ namespace armarx
         }
         std::map<std::string, VariantPtr> newData;
         {
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
 
             // first clear to old entries
             auto now = TimeUtil::GetTime();
@@ -427,7 +427,7 @@ namespace armarx
                 //            QDateTime time(QDateTime::currentDateTime());
                 TimedVariantBaseList variants = proxyMap[observerName]->getDataFields(it->second);
 
-                ScopedLock lock(dataMutex);
+                std::unique_lock lock(dataMutex);
                 //            #    ARMARX_IMPORTANT << "data from observer: " << observerName;
                 for (unsigned int i = 0; i < variants.size(); ++i)
                 {
@@ -521,7 +521,7 @@ namespace armarx
             {
                 samplingIntervalMs = pollingInterval;
             }
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             clear();
             auto now = TimeUtil::GetTime();
             std::map<std::string, TimedVariantBaseList> histories;
@@ -721,7 +721,7 @@ namespace armarx
 
     QStringList PlotterController::getSelectedDatafields() const
     {
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
         return selectedDatafields;
     }
 
@@ -732,7 +732,7 @@ namespace armarx
 
         std::vector<std::string> keys;
 
-        ScopedLock lock(dataMutex);
+        std::unique_lock lock(dataMutex);
 
         for (int i = 0; i < selectedDatafields.size(); i++)
         {
@@ -784,7 +784,7 @@ namespace armarx
     void PlotterController::setSelectedDatafields(const QStringList& value, int samplingIntervalMs)
     {
         {
-            ScopedLock lock(dataMutex);
+            std::unique_lock lock(dataMutex);
             if (selectedDatafields == value)
             {
                 return;
diff --git a/source/ArmarXGui/libraries/PlotterController/PlotterController.h b/source/ArmarXGui/libraries/PlotterController/PlotterController.h
index d3f46386..f149b12d 100644
--- a/source/ArmarXGui/libraries/PlotterController/PlotterController.h
+++ b/source/ArmarXGui/libraries/PlotterController/PlotterController.h
@@ -51,13 +51,14 @@
 #include <ArmarXCore/util/json/JSONObject.h>
 #include <ArmarXCore/core/time/TimeUtil.h>
 #include <ArmarXCore/core/services/tasks/PeriodicTask.h>
-#include <ArmarXCore/core/system/Synchronization.h>
 #include <ArmarXCore/observers/variant/DataFieldIdentifier.h>
 #include <ArmarXCore/observers/variant/Variant.h>
 #include <ArmarXCore/observers/exceptions/local/InvalidChannelException.h>
 #include <ArmarXCore/observers/exceptions/local/InvalidDataFieldException.h>
 #include <ArmarXCore/interface/observers/ObserverInterface.h>
 
+#include <mutex>
+
 namespace armarx
 {
     using QwtPlotMarkerPtr = QwtPlotMarker*;
@@ -158,7 +159,7 @@ namespace armarx
         IceManagerPtr iceManager;
         PeriodicTask<PlotterController>::pointer_type pollingTask;
         QTimer timer;
-        mutable Mutex dataMutex;
+        mutable std::mutex dataMutex;
         GraphDataMap dataMap;
         ProxyMap proxyMap;
         std::map<std::string, QwtPlotCurve*> curves;
-- 
GitLab