diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
index 3cc35d38bb8c3146688ceb2b2be0b4334bc362f3..0564980702ec735105c95a668d56cc768b2e9b36 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp
@@ -203,10 +203,15 @@ namespace armarx::RobotUnitModule
 
             for (std::size_t i = 0; i < actJC.size(); ++i)
             {
+
                 postSwitchSetup_ActivatedJointControllers.at(i) = actJC.at(i);
                 postSwitchSetup_ActivatedJointToNJointControllerAssignement.at(i) = assig.at(i);
                 postSwitchSetup_ActivatedNJointControllers.at(i) = actNJC.at(i);
 
+                if (actNJC.at(i) == nullptr)
+                {
+                    continue;
+                }
                 if (dynamic_cast<SynchronousNJointController*>(actNJC.at(i)))
                 {
                     _activatedSynchronousNJointControllersIdx.at(numSyncNj++) = i;
@@ -217,8 +222,10 @@ namespace armarx::RobotUnitModule
                 }
                 else
                 {
-                    throw std::logic_error{"NJoint controller that is neither SynchronousNJointController"
-                                           " nor AsynchronousNJointController"};
+                    ARMARX_RT_LOGF_ERROR("NJoint controller that is neither SynchronousNJointController"
+                                         " nor AsynchronousNJointController: %s", actNJC.at(i)->rtGetClassName().c_str());
+                    // Throwing exceptions in a destructor causes std::abort to be called
+                    //throw std::logic_error{};
                 }
             }
             for (