diff --git a/source/RobotAPI/components/ArViz/ArVizStorage.h b/source/RobotAPI/components/ArViz/ArVizStorage.h
index 0afaed33a07d95b74c2325e6fd7dfa64e018938b..08b7d20ff5440d018e2c39604ab00dd7b4918f23 100644
--- a/source/RobotAPI/components/ArViz/ArVizStorage.h
+++ b/source/RobotAPI/components/ArViz/ArVizStorage.h
@@ -28,8 +28,6 @@
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/services/tasks/RunningTask.h>
 
-#include <boost/circular_buffer.hpp>
-
 #include <mutex>
 #include <atomic>
 #include <condition_variable>
diff --git a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
index d9beef41b45235611beec0b6d02bc66fadcc4178..f11c7aa9de6672cafcda2bbcfdb2e5114eb2be69 100644
--- a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
@@ -1,13 +1,12 @@
 #include "Visualizer.h"
 
 #include <ArmarXCore/core/logging/Logging.h>
+#include <ArmarXCore/util/CPPUtility/GetTypeString.h>
 
 #include <Inventor/sensors/SoTimerSensor.h>
 #include <Inventor/nodes/SoUnits.h>
 #include <thread>
 
-#include <boost/core/demangle.hpp>
-
 #include "VisualizationRobot.h"
 
 namespace armarx::viz
@@ -168,7 +167,7 @@ namespace armarx::viz
             {
                 ARMARX_WARNING << deactivateSpam(1)
                                << "No visualizer for element type found: "
-                               << boost::core::demangle(elementType.name());
+                               << armarx::GetTypeString(elementType);
                 continue;
             }
             coin::ElementVisualizer* visualizer = elementVisualizers[visuIndex].get();
@@ -216,7 +215,7 @@ namespace armarx::viz
             }
             else
             {
-                std::string typeName = boost::core::demangle(elementType.name());
+                std::string typeName = armarx::GetTypeString(elementType);
                 ARMARX_WARNING << deactivateSpam(typeName, 1)
                                << "CoinElementVisualizer returned null for type: " << typeName << "\n"
                                << "You need to register a visualizer for each type in ArViz/Coin/Visualizer.cpp";
diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
index 53fb866aa9f7f349bcb7ce5090552e58b0bbb21e..473ec9a16d21f415925efedbfa8c5150ae2f55ea 100644
--- a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
+++ b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp
@@ -23,8 +23,6 @@
  */
 
 #include "RobotStateComponent.h"
-#include <boost/foreach.hpp>
-#include <boost/format.hpp>
 
 #include <Ice/ObjectAdapter.h>
 
diff --git a/source/RobotAPI/components/RobotState/SharedRobotServants.cpp b/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
index da99bba0da26c375c7e1ad0d03936611dd2abae5..cfc854b4c19309b39c56591fda88ca4b54300086 100644
--- a/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
+++ b/source/RobotAPI/components/RobotState/SharedRobotServants.cpp
@@ -25,8 +25,6 @@
 
 #include <ArmarXCore/core/logging/Logging.h>
 
-#include <boost/foreach.hpp>
-
 #include <Eigen/Geometry>
 
 #include <VirtualRobot/Nodes/RobotNode.h>
@@ -68,7 +66,7 @@ namespace armarx
 
     void SharedObjectBase::ref(const Current& current)
     {
-        boost::lock_guard<boost::mutex> lock(this->_counterMutex);
+        std::unique_lock lock(this->_counterMutex);
 
         _referenceCount++;
 
@@ -79,7 +77,7 @@ namespace armarx
 
     void SharedObjectBase::unref(const Current& current)
     {
-        boost::lock_guard<boost::mutex> lock(this->_counterMutex);
+        std::unique_lock lock(this->_counterMutex);
 
 #ifdef VERBOSE
         ARMARX_LOG_S << "unref: " <<   _referenceCount << " " << this << flush;
@@ -237,7 +235,7 @@ namespace armarx
         ReadLockPtr lock = _node->getRobot()->getReadLock();
         std::vector<SceneObjectPtr> children = _node->getChildren();
         NameList names;
-        BOOST_FOREACH(SceneObjectPtr node, children)
+        for (SceneObjectPtr const& node : children)
         {
             names.push_back(node->getName());
         }
@@ -249,7 +247,7 @@ namespace armarx
         ReadLockPtr lock = _node->getRobot()->getReadLock();
         std::vector<RobotNodePtr> parents = _node->getAllParents(_node->getRobot()->getRobotNodeSet(name));
         NameList names;
-        BOOST_FOREACH(RobotNodePtr node, parents)
+        for (RobotNodePtr const& node : parents)
         {
             names.push_back(node->getName());
         }
@@ -320,7 +318,7 @@ namespace armarx
 #ifdef VERBOSE
         ARMARX_WARNING_S << "destruct " << this << flush;
 #endif
-        boost::recursive_mutex::scoped_lock cloneLock(m);
+        std::unique_lock cloneLock(m);
 
         for (auto value : this->_cachedNodes)
         {
@@ -341,7 +339,7 @@ namespace armarx
     {
         //    ARMARX_LOG_S << "Looking for node: " << name << flush;
         assert(_robot);
-        boost::recursive_mutex::scoped_lock cloneLock(m);
+        std::unique_lock cloneLock(m);
         SharedRobotNodeInterfacePrx prx;
 
         if (this->_cachedNodes.find(name) == this->_cachedNodes.end())
@@ -369,7 +367,7 @@ namespace armarx
     SharedRobotNodeInterfacePrx SharedRobotServant::getRootNode(const Current& current)
     {
         assert(_robot);
-        boost::recursive_mutex::scoped_lock cloneLock(m);
+        std::unique_lock cloneLock(m);
         std::string name = _robot->getRootNode()/*,current*/->getName();
         return this->getRobotNode(name, current);
     }
@@ -384,7 +382,7 @@ namespace armarx
     {
         std::vector<RobotNodePtr> robotNodes = _robot->getRobotNodes();
         NameList names;
-        BOOST_FOREACH(RobotNodePtr node, robotNodes)
+        for (RobotNodePtr const& node : robotNodes)
         {
             names.push_back(node->getName());
         }
@@ -402,7 +400,7 @@ namespace armarx
 
         std::vector<RobotNodePtr> robotNodes = robotNodeSet->getAllRobotNodes();
         NameList names;
-        BOOST_FOREACH(RobotNodePtr node, robotNodes)
+        for (RobotNodePtr const& node : robotNodes)
         {
             names.push_back(node->getName());
         }
@@ -421,7 +419,7 @@ namespace armarx
     {
         std::vector<RobotNodeSetPtr> robotNodeSets = _robot->getRobotNodeSets();
         NameList names;
-        BOOST_FOREACH(RobotNodeSetPtr set, robotNodeSets)
+        for (RobotNodeSetPtr const& set : robotNodeSets)
         {
             names.push_back(set->getName());
         }
diff --git a/source/RobotAPI/components/RobotState/SharedRobotServants.h b/source/RobotAPI/components/RobotState/SharedRobotServants.h
index 76addb6ea428eacfbf37548067956fe33fd6d1f3..5dff6c3891075d67a6a3e0ff9fa1f3a9a5d615f3 100644
--- a/source/RobotAPI/components/RobotState/SharedRobotServants.h
+++ b/source/RobotAPI/components/RobotState/SharedRobotServants.h
@@ -30,7 +30,7 @@
 
 #include <VirtualRobot/VirtualRobot.h>
 
-#include <boost/thread.hpp>
+#include <mutex>
 
 namespace armarx
 {
@@ -51,7 +51,7 @@ namespace armarx
         SharedObjectBase();
     private:
         unsigned int _referenceCount;
-        boost::mutex _counterMutex;
+        std::mutex _counterMutex;
     };
 
     /**
@@ -141,7 +141,7 @@ namespace armarx
         RobotStateComponentInterfacePrx getRobotStateComponent(const Ice::Current&) const override;
     protected:
         VirtualRobot::RobotPtr _robot;
-        boost::recursive_mutex m;
+        std::recursive_mutex m;
         std::map<std::string, SharedRobotNodeInterfacePrx> _cachedNodes;
         IceUtil::Time updateTimestamp;
         RobotStateComponentInterfacePrx robotStateComponent;
diff --git a/source/RobotAPI/components/units/HeadIKUnit.cpp b/source/RobotAPI/components/units/HeadIKUnit.cpp
index b4d6e62f6f1e203f4930e2ea56b424b08455c838..8e3037badb78a49b9cd6ef2847460c70995f448b 100644
--- a/source/RobotAPI/components/units/HeadIKUnit.cpp
+++ b/source/RobotAPI/components/units/HeadIKUnit.cpp
@@ -33,8 +33,11 @@
 
 #include <boost/algorithm/string/trim.hpp>
 
+#include <boost/shared_ptr.hpp>
 #include <memory>
 
+using boost::dynamic_pointer_cast;
+using std::dynamic_pointer_cast;
 
 namespace armarx
 {
@@ -308,9 +311,6 @@ namespace armarx
                 auto tcpNode = kinematicChain->getTCP();
                 VirtualRobot::RobotNodePrismaticPtr virtualPrismaticJoint;
 
-
-                using boost::dynamic_pointer_cast;
-                using std::dynamic_pointer_cast;
                 virtualPrismaticJoint = dynamic_pointer_cast<VirtualRobot::RobotNodePrismatic>(tcpNode);
                 if (!virtualPrismaticJoint)
                 {
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.cpp
index fbd850fd60d3769abd1a895d1087927e75f5ad78..e42b68f1d78db459b423fd93e2c6723fa1cdd39e 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.cpp
@@ -80,7 +80,7 @@ namespace armarx
         return d;
     }
 
-    boost::optional<std::vector<char> > NJointControllerBase::isNotInConflictWith(const std::vector<char>& used) const
+    std::optional<std::vector<char> > NJointControllerBase::isNotInConflictWith(const std::vector<char>& used) const
     {
         ARMARX_CHECK_EXPRESSION(used.size() == controlDeviceUsedBitmap.size());
         auto result = used;
@@ -90,13 +90,13 @@ namespace armarx
             {
                 if (used.at(i))
                 {
-                    return boost::optional<std::vector<char>>();
+                    return std::nullopt;
                 }
                 result.at(i) = true;
             }
 
         }
-        return {true, std::move(result)};
+        return std::move(result);
     }
 
     NJointControllerStatus NJointControllerBase::getControllerStatus(const Ice::Current&) const
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.h
index 26c8a6aedb6cf2f5a85254987fd3f61ce87ead01..e20d9525d3c36676e47203a25a11d4e26eaf2968 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.h
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.h
@@ -28,8 +28,6 @@
 #include <functional>
 #include <unordered_set>
 
-#include <boost/optional.hpp>
-
 #include <ArmarXCore/core/Component.h>
 #include <ArmarXCore/core/util/Registrar.h>
 #include <ArmarXCore/core/util/TripleBuffer.h>
@@ -53,6 +51,7 @@
 #include "../util/ControlThreadOutputBuffer.h"
 
 #include <VirtualRobot/VirtualRobot.h>
+#include <optional>
 
 namespace armarx::RobotUnitModule
 {
@@ -870,11 +869,11 @@ namespace armarx
         const std::map<std::string, const JointController*>& getControlDevicesUsedJointController();
 
         //check for conflict
-        boost::optional<std::vector<char>> isNotInConflictWith(const NJointControllerBasePtr& other) const;
-        boost::optional<std::vector<char>> isNotInConflictWith(const std::vector<char>& used) const;
+        std::optional<std::vector<char>> isNotInConflictWith(const NJointControllerBasePtr& other) const;
+        std::optional<std::vector<char>> isNotInConflictWith(const std::vector<char>& used) const;
 
         template<class ItT>
-        static boost::optional<std::vector<char>> AreNotInConflict(ItT first, ItT last);
+        static std::optional<std::vector<char>> AreNotInConflict(ItT first, ItT last);
         // //////////////////////////////////////////////////////////////////////////////////////// //
         // ////////////////////////////////////// publishing ////////////////////////////////////// //
         // //////////////////////////////////////////////////////////////////////////////////////// //
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.ipp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.ipp
index bcefd5a83350721c67aff181034f5f0ef80fe8d6..0b89eaf5f18d12223a623d3b1eba13d672ddfd3b 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.ipp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointController.ipp
@@ -149,7 +149,7 @@ namespace armarx
         return controlDeviceUsedJointController;
     }
 
-    inline boost::optional<std::vector<char> > NJointControllerBase::isNotInConflictWith(const NJointControllerBasePtr& other) const
+    inline std::optional<std::vector<char> > NJointControllerBase::isNotInConflictWith(const NJointControllerBasePtr& other) const
     {
         return isNotInConflictWith(other->getControlDeviceUsedBitmap());
     }
@@ -273,11 +273,11 @@ namespace armarx
 namespace armarx
 {
     template<class ItT>
-    inline boost::optional<std::vector<char>> NJointControllerBase::AreNotInConflict(ItT first, ItT last)
+    inline std::optional<std::vector<char>> NJointControllerBase::AreNotInConflict(ItT first, ItT last)
     {
         if (first == last)
         {
-            return {true, std::vector<char>{}};
+            return std::vector<char>{};
         }
         std::size_t n = (*first)->getControlDeviceUsedBitmap().size();
         std::vector<char> inuse(n, false);
@@ -288,10 +288,10 @@ namespace armarx
             {
                 return r;
             }
-            inuse = std::move(r.get());
+            inuse = std::move(*r);
             ++first;
         }
-        return {true, std::move(inuse)};
+        return std::move(inuse);
     }
 }
 namespace armarx::detail
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
index 1cb5f37569f80c4d8ada490a901c6633c61877e1..8f5960857d371d51d9053113a3b032732f3bb905 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp
@@ -364,7 +364,7 @@ namespace armarx::RobotUnitModule
                 ARMARX_ERROR << ss.str();
                 throw InvalidArgumentException {ss.str()};
             }
-            inuse = std::move(r.get());
+            inuse = std::move(*r);
         }
         ARMARX_DEBUG << "all requested controllers are conflict free" << std::flush;
         auto printInUse = ARMARX_STREAM_PRINTER
@@ -393,7 +393,7 @@ namespace armarx::RobotUnitModule
                     ARMARX_DEBUG << "keeping  already requested NJointControllerBase '"
                                  << nJointCtrl->getInstanceName() << "' in   list of requested controllers";
                     ctrlsToAct.insert(nJointCtrl);
-                    inuse = std::move(r.get());
+                    inuse = std::move(*r);
                 }
                 else
                 {
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.h
index 65e8263cc44f4669dd43f0c4b084840f76b2b847..7913d2dd9a4a27c7b90ee4b6d4e5a7b9d4d13736 100644
--- a/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/Units/KinematicSubUnit.h
@@ -24,8 +24,6 @@
 
 #include <mutex>
 
-#include <boost/algorithm/string.hpp>
-
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include <RobotAPI/components/units/KinematicUnit.h>
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
index f67bb14d7a0df2743ee3d65410f58f768937f1fb..99ec57ddd276fe00bbc9ca9c76967d8e1d56ac11 100755
--- a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.cpp
@@ -21,6 +21,8 @@
  */
 #include "PlatformSubUnit.h"
 
+#include <boost/algorithm/clamp.hpp>
+
 void armarx::PlatformSubUnit::update(const armarx::SensorAndControl& sc, const JointAndNJointControllers&)
 {
     if (!getProxy())
diff --git a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
index 7420f33e06d32adbbcc66d1b0ed09dc66effdfd5..7fb01dd2a3d2f49059a5906c7ea998ed8c95a4d9 100755
--- a/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
+++ b/source/RobotAPI/components/units/RobotUnit/Units/PlatformSubUnit.h
@@ -24,8 +24,6 @@
 
 #include <mutex>
 
-#include <boost/algorithm/clamp.hpp>
-
 #include <Eigen/Core>
 
 #include <VirtualRobot/MathTools.h>
diff --git a/source/RobotAPI/components/units/TCPControlUnit.cpp b/source/RobotAPI/components/units/TCPControlUnit.cpp
index 2e3f100c89d4e1b7e26d37e72ef075dda0ff8e4c..8cb2c9095305c1157fe0685f57ac2c879fe8c47d 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.cpp
+++ b/source/RobotAPI/components/units/TCPControlUnit.cpp
@@ -23,8 +23,6 @@
 #include "TCPControlUnit.h"
 #include <RobotAPI/libraries/core/LinkedPose.h>
 
-#include <boost/unordered_map.hpp>
-
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 #include <ArmarXCore/core/system/ArmarXDataPath.h>
@@ -37,6 +35,7 @@
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/classification.hpp>
 
+#include <boost/shared_ptr.hpp>
 #include <memory>
 
 using namespace VirtualRobot;
diff --git a/source/RobotAPI/components/units/TCPControlUnit.h b/source/RobotAPI/components/units/TCPControlUnit.h
index e24e2f8dc344b1b44a4bd24ca2240506d0c329c8..8b373d10178d0975bbf78831b08859c15781f9b6 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.h
+++ b/source/RobotAPI/components/units/TCPControlUnit.h
@@ -31,6 +31,8 @@
 #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h>
 #include <ArmarXCore/interface/observers/ObserverInterface.h>
 
+#include <memory>
+
 namespace armarx
 {
     /**
@@ -275,7 +277,7 @@ namespace armarx
         std::map<VirtualRobot:: SceneObjectPtr, Eigen::VectorXf> tcpWeights;
         Eigen::VectorXf tcpWeightVec;
     };
-    using EDifferentialIKPtr = boost::shared_ptr<EDifferentialIK>;
+    using EDifferentialIKPtr = std::shared_ptr<EDifferentialIK>;
 
 }
 
diff --git a/source/RobotAPI/drivers/HokuyoLaserUnit/HokuyoLaserUnit.cpp b/source/RobotAPI/drivers/HokuyoLaserUnit/HokuyoLaserUnit.cpp
index 9f1508cce0928aa91169c61cd36f5389ef6d75aa..af108e0e0839fe4b8d1d6c912163e67e0ffeaec9 100644
--- a/source/RobotAPI/drivers/HokuyoLaserUnit/HokuyoLaserUnit.cpp
+++ b/source/RobotAPI/drivers/HokuyoLaserUnit/HokuyoLaserUnit.cpp
@@ -24,9 +24,7 @@
 
 #include <ArmarXCore/observers/variant/TimestampVariant.h>
 
-#include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/replace.hpp>
-#include <boost/algorithm/string/classification.hpp>
 
 #include <HokuyoLaserScannerDriver/urg_utils.h>
 
@@ -45,14 +43,12 @@ void HokuyoLaserUnit::onInitComponent()
     angleOffset = getProperty<float>("AngleOffset").getValue();
 
     std::string deviceStrings = getProperty<std::string>("Devices").getValue();
-    std::vector<std::string> splitDeviceStrings;
-    boost::split(splitDeviceStrings, deviceStrings, boost::is_any_of(";"));
+    std::vector<std::string> splitDeviceStrings = Split(deviceStrings, ";");
     devices.clear();
     devices.reserve(splitDeviceStrings.size());
     for (std::string const& deviceString : splitDeviceStrings)
     {
-        std::vector<std::string> deviceInfo;
-        boost::split(deviceInfo, deviceString, boost::is_any_of(","));
+        std::vector<std::string> deviceInfo = Split(deviceString, ",");
         if (deviceInfo.size() != 3)
         {
             ARMARX_WARNING << "Unexpected format for laser scanner device: " << deviceString
diff --git a/source/RobotAPI/drivers/OrientedTactileSensor/OrientedTactileSensorUnit.h b/source/RobotAPI/drivers/OrientedTactileSensor/OrientedTactileSensorUnit.h
index d8a1c3496194a4b1fa3850a67e9b53159a683bc2..7e584629a24c0673cd3fb145a28ea3b771358974 100644
--- a/source/RobotAPI/drivers/OrientedTactileSensor/OrientedTactileSensorUnit.h
+++ b/source/RobotAPI/drivers/OrientedTactileSensor/OrientedTactileSensorUnit.h
@@ -9,7 +9,6 @@
 #include <iostream>
 #include <fstream>
 #include <stdio.h>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <Eigen/Dense>
 #include <RobotAPI/libraries/SimpleJsonLogger/SimpleJsonLogger.h>
 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
diff --git a/source/RobotAPI/drivers/WeissHapticSensor/SerialInterface.cpp b/source/RobotAPI/drivers/WeissHapticSensor/SerialInterface.cpp
index 8559064a772d5b9dc299df845b56481c7f031b68..b0a2f0b3705d9c00c88fff8e0470651f8f3f2f43 100644
--- a/source/RobotAPI/drivers/WeissHapticSensor/SerialInterface.cpp
+++ b/source/RobotAPI/drivers/WeissHapticSensor/SerialInterface.cpp
@@ -35,7 +35,6 @@
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <iostream>
-#include <boost/lexical_cast.hpp>
 #include <boost/format.hpp>
 
 static inline tcflag_t __bitrate_to_flag(unsigned int bitrate)
diff --git a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp
index 3f13ff1bcc6aa970425931d46afe02cf12657c1c..899c86434cea6757fb0cbb899203131452dea07d 100644
--- a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp
+++ b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp
@@ -123,7 +123,7 @@ std::string WeissHapticSensor::getDeviceName()
 
 void WeissHapticSensor::scheduleSetDeviceTag(std::string tag)
 {
-    boost::mutex::scoped_lock lock(mutex);
+    std::unique_lock lock(mutex);
     setDeviceTagValue = tag;
     setDeviceTagScheduled = true;
 }
@@ -206,7 +206,7 @@ void WeissHapticSensor::frameAcquisitionTaskLoop()
 
         if (setDeviceTagScheduled)
         {
-            boost::mutex::scoped_lock lock(mutex);
+            std::unique_lock lock(mutex);
             setDeviceTagScheduled = false;
 
             ARMARX_INFO << "[" << device << "] Stopping periodic frame aquisition to set new device tag";
diff --git a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.h b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.h
index 9e006ae3d9f367d041d7c501eb62142b02f62d1c..25191aab19608735c499bacfe3f9d7ae0fb1e401 100644
--- a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.h
+++ b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.h
@@ -34,7 +34,8 @@
 #include <ArmarXCore/observers/variant/TimestampVariant.h>
 #include <RobotAPI/libraries/core/math/SlidingWindowVectorMedian.h>
 #include <ArmarXCore/util/variants/eigen3/MatrixVariant.h>
-#include <boost/thread/mutex.hpp>
+
+#include <mutex>
 
 namespace armarx
 {
@@ -73,7 +74,7 @@ namespace armarx
         bool setDeviceTagScheduled;
         std::string setDeviceTagValue;
 
-        boost::mutex mutex;
+        std::mutex mutex;
         int minimumReportIntervalMs;
     };
 }
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index 376a6495427caad47ff9b00f42f6e8d0eaa876b3..17ce02826bd5eb2ab427cfc88310292b82d2d6f3 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -55,9 +55,6 @@
 #include <Inventor/Qt/SoQt.h>
 #include <ArmarXCore/observers/filters/MedianFilter.h>
 
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
-
 // System
 #include <stdio.h>
 #include <string>
@@ -185,13 +182,9 @@ void KinematicUnitWidgetController::onConnectComponent()
             }
 
             CMakePackageFinder project(projectName);
-            Ice::StringSeq projectIncludePaths;
             auto pathsString = project.getDataDir();
             ARMARX_VERBOSE << "Data paths of ArmarX package " << projectName << ": " << pathsString;
-            boost::split(projectIncludePaths,
-                         pathsString,
-                         boost::is_any_of(";,"),
-                         boost::token_compress_on);
+            Ice::StringSeq projectIncludePaths = Split(pathsString, ";,", true, true);
             ARMARX_VERBOSE << "Result: Data paths of ArmarX package " << projectName << ": " << projectIncludePaths;
             includePaths.insert(includePaths.end(), projectIncludePaths.begin(), projectIncludePaths.end());
         }
diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp
index 3f2d74a09c04af7cdef406f37afd5f30feca3647..9141512a800d382cbe917659b1fd236b7598bae8 100644
--- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp
+++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp
@@ -23,6 +23,8 @@
 #include <ArmarXCore/core/exceptions/Exception.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <thread>
+
 namespace armarx
 {
     RobotUnitWidgetBase::RobotUnitWidgetBase(QString name, QWidget* parent) :
diff --git a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
index aec5c63406608dbf98b4891c70a457a38ba0aed8..90bd124234f8eeb6f3c43d9ec2785786b542e7a1 100644
--- a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp
@@ -46,9 +46,6 @@
 #include <ArmarXGui/libraries/StructuralJson/JsonWriter.h>
 #include <ArmarXCore/util/json/JSONObject.h>
 
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
-
 // System
 #include <stdio.h>
 #include <string>
@@ -184,13 +181,9 @@ void RobotViewerWidgetController::onConnectComponent()
             }
 
             CMakePackageFinder project(projectName);
-            Ice::StringSeq projectIncludePaths;
             auto pathsString = project.getDataDir();
             ARMARX_VERBOSE << "Data paths of ArmarX package " << projectName << ": " << pathsString;
-            boost::split(projectIncludePaths,
-                         pathsString,
-                         boost::is_any_of(";,"),
-                         boost::token_compress_on);
+            Ice::StringSeq projectIncludePaths = Split(pathsString, ";,", true, true);
             ARMARX_VERBOSE << "Result: Data paths of ArmarX package " << projectName << ": " << projectIncludePaths;
             includePaths.insert(includePaths.end(), projectIncludePaths.begin(), projectIncludePaths.end());
 
diff --git a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractFunctionalDevice.h b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractFunctionalDevice.h
index ab2ad3915589358848b643d624dae4270eb035a8..0bbbf7011e67bcb59c3e1dacbc0e5fe5541f1221 100644
--- a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractFunctionalDevice.h
+++ b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractFunctionalDevice.h
@@ -2,7 +2,6 @@
 
 #include <ArmarXCore/core/rapidxml/wrapper/DefaultRapidXmlReader.h>
 #include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h>
-#include <boost/smart_ptr/shared_ptr.hpp>
 #include <RobotAPI/components/units/RobotUnit/JointControllers/JointController.h>
 #include <RobotAPI/libraries/ArmarXEtherCAT/VirtualDeviceFactory.h>
 
diff --git a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
index bd95565df108c2b30086bb83aae8a2588cb9cc86..e03a10bc85480726d8cf85b758164b159a266b0d 100644
--- a/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
+++ b/source/RobotAPI/libraries/RobotStatechartHelpers/RobotNameHelper.h
@@ -27,8 +27,6 @@
 
 #include <ArmarXCore/statechart/xmlstates/profiles/StatechartProfiles.h>
 
-#include <boost/optional.hpp>
-
 #include <VirtualRobot/Robot.h>
 
 namespace armarx
diff --git a/source/RobotAPI/libraries/core/FramedPose.h b/source/RobotAPI/libraries/core/FramedPose.h
index 319e542d33664ec0a7d19c54422814369172435f..3e987d97dacfa905903e8ac6f86cbf3c8afb87fb 100644
--- a/source/RobotAPI/libraries/core/FramedPose.h
+++ b/source/RobotAPI/libraries/core/FramedPose.h
@@ -39,8 +39,6 @@
 #include <Eigen/Core>
 #include <Eigen/Geometry>
 
-#include <boost/shared_ptr.hpp>
-
 #include <sstream>
 
 namespace armarx::VariantType
diff --git a/source/RobotAPI/libraries/diffik/NaturalDiffIK.h b/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
index f4c9a5af180f2ee62426584c3cbd4e0e06befc05..0bdafb506e4cf6a22203b9b88cde2eccacba32d6 100644
--- a/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/NaturalDiffIK.h
@@ -23,8 +23,6 @@
 
 #pragma once
 
-#include <boost/shared_ptr.hpp>
-
 #include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/RobotNodeSet.h>
 #include <VirtualRobot/IK/DifferentialIK.h>
diff --git a/source/RobotAPI/libraries/diffik/SimpleDiffIK.h b/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
index 4ae4e22fa9ddf740455e9eec2cb561f365a7ca53..ffd371a6fe8d8ea8cd080e97fc1658c632b46868 100644
--- a/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/SimpleDiffIK.h
@@ -23,14 +23,14 @@
 
 #pragma once
 
-#include <boost/shared_ptr.hpp>
-
 #include <VirtualRobot/Nodes/RobotNode.h>
 #include <VirtualRobot/RobotNodeSet.h>
 
+#include <memory>
+
 namespace armarx
 {
-    typedef boost::shared_ptr<class SimpleDiffIK> SimpleDiffIKPtr;
+    typedef std::shared_ptr<class SimpleDiffIK> SimpleDiffIKPtr;
 
     class SimpleDiffIK
     {
diff --git a/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.h b/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.h
index d87c65c4bf5136cf2ea3812059242ed6710c87b5..eb75ba24394fb6deb1ae836b195e788d82957624 100644
--- a/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.h
+++ b/source/RobotAPI/libraries/natik/CartesianNaturalPositionControllerProxy.h
@@ -25,11 +25,12 @@
 
 #include "NaturalIK.h"
 
-#include <boost/shared_ptr.hpp>
 #include <RobotAPI/interface/units/RobotUnit/NJointCartesianNaturalPositionController.h>
 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
 #include <RobotAPI/interface/aron.h>
 
+#include <memory>
+
 namespace armarx
 {
     typedef std::shared_ptr<class CartesianNaturalPositionControllerProxy> CartesianNaturalPositionControllerProxyPtr;