diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h
index bd9507336914ecf5d6e9c5681f928f0be38f98b2..ed26d41070f7c442c1f9d75c333e51d13dca825e 100644
--- a/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h
+++ b/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h
@@ -33,8 +33,13 @@
 
 namespace armarx
 {
+    namespace RobotUnitModule
+    {
+        TYPEDEF_PTRS_SHARED(Devices);
+    }
     TYPEDEF_PTRS_SHARED(ControlDevice);
 
+
     namespace ControlDeviceTags
     {
         using namespace DeviceTags;
@@ -104,6 +109,8 @@ namespace armarx
         */
         void addJointController(JointController* jointCtrl);
     private:
+        friend class RobotUnitModule::Devices;
+        std::atomic<RobotUnitModule::Devices*> owner;
         KeyValueVector<std::string, JointController*> jointControllers;
         JointController* activeJointController {nullptr};
         JointController* jointEmergencyStopController {nullptr};
diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h
index 7ec5bc038348177922c579fd3895a69064ebe774..d66de10788422253ad6a1d89eb4ea89d0dcfacd3 100644
--- a/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h
+++ b/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h
@@ -29,6 +29,10 @@
 
 namespace armarx
 {
+    namespace RobotUnitModule
+    {
+        TYPEDEF_PTRS_SHARED(Devices);
+    }
     TYPEDEF_PTRS_SHARED(SensorDevice);
 
     namespace SensorDeviceTags
@@ -54,6 +58,10 @@ namespace armarx
         virtual std::string getReportingFrame() const;
 
         virtual void rtReadSensorValues(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration);
+
+    private:
+        friend class RobotUnitModule::Devices;
+        std::atomic<RobotUnitModule::Devices*> owner;
     };
 
     template<class SensorValueType>
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
index 426c388b885424b370d362dda3824d4cc2648f75..ce8d0cac9604217f13f133d09c33f4e5a60ddc52 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp
@@ -326,6 +326,7 @@ namespace armarx
                 //add it
                 ARMARX_DEBUG << "Adding the ControlDevice "  << cd->getDeviceName() << " " << &cd ;
                 controlDevices.add(cd->getDeviceName(), cd);
+                cd->owner = this;
                 ARMARX_INFO << "added ControlDevice " << cd->getDeviceName();
             }
             ARMARX_INFO << "added ControlDevice " << cd->getDeviceName();
@@ -369,12 +370,14 @@ namespace armarx
                     //this checks if we already added such a device (do this before setting timingSensorDevice)
                     ARMARX_DEBUG << "Adding the SensorDevice "  << sd->getDeviceName() << " " << &sd ;
                     sensorDevices.add(sd->getDeviceName(), sd);
+                    sd->owner = this;
                     rtThreadTimingsSensorDevice = std::dynamic_pointer_cast<RTThreadTimingsSensorDevice>(sd);
                 }
                 else
                 {
                     ARMARX_DEBUG << "Adding the SensorDevice "  << sd->getDeviceName() << " " << &sd ;
                     sensorDevices.add(sd->getDeviceName(), sd);
+                    sd->owner = this;
                 }
             }
             ARMARX_INFO << "added SensorDevice " << sd->getDeviceName() << " (valuetype = " << sd->getSensorValueType() << ")";