diff --git a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h
index ae22a060ba80dc1060512f396937b238435d6e6c..05a72f741c84caccee068b418fced5d905304042 100644
--- a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h
+++ b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h
@@ -20,7 +20,7 @@ namespace armarx
 
     public:
         AbstractSlave(const armarx::SlaveIdentifier slaveIdentifier, uint16_t slaveNumber);
-
+        virtual ~AbstractSlave(){}
         /**
          * This is called after EtherCAT Bus is PreOp Mode. This is where the PDO Mapping can be configured for the slave.
          */
diff --git a/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h b/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h
index d6146946e4ef668bb92e9a94a9865630258ef808..dad5a4d22fcd49b272231fdf3f9ba56e20327725 100644
--- a/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h
+++ b/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h
@@ -35,7 +35,21 @@ namespace armarx
     {
     public:
         size_t load(const MultiNodeRapidXMLReader &rootNodeConfigs, const VirtualRobot::RobotPtr& robot);
+        template <typename Type>
+        std::vector<std::shared_ptr<Type>> getDevicesOfType() const
+        {
+            std::vector<std::shared_ptr<Type>> results;
+            for (auto& dev : devices)
+            {
+                auto castedDev = std::dynamic_pointer_cast<Type>(dev);
+                if(castedDev)
+                {
+                    results.push_back(castedDev);
+                }
 
+            }
+            return results;
+        }
         std::vector<AbstractFunctionalDevicePtr> getAllInitializedFunctionalDevices() const;
         std::vector<AbstractFunctionalDevicePtr> getAllUninitializedFunctionalDevices() const;
         virtual std::vector<AbstractFunctionalDevicePtr> getAllFunctionalDevices() const = 0;