diff --git a/data/RobotAPI/VariantInfo-RobotAPI.xml b/data/RobotAPI/VariantInfo-RobotAPI.xml
index ef43ecebfd31e5a6e7e8db6ac1fa89acfb06e715..9d57e40ea3d4b9902bc04738f66cb15ab532f233 100644
--- a/data/RobotAPI/VariantInfo-RobotAPI.xml
+++ b/data/RobotAPI/VariantInfo-RobotAPI.xml
@@ -267,17 +267,18 @@
         <Proxy include="RobotAPI/interface/components/ObstacleAvoidance/ObstacleAvoidanceInterface.h"
             humanName="Platform obstacle avoidance interface"
             typeName="ObstacleAvoidanceInterfacePrx"
-            memberName="platformObstacleAvoidance"
-            getterName="getPlatformObstacleAvoidance"
-            propertyName="PlatformObstacleAvoidanceName"
+            memberName="obstacleAvoidance"
+            getterName="getObstacleAvoidance"
+            propertyName="ObstacleAvoidanceName"
             propertyIsOptional="true"
             propertyDefaultValue="PlatformObstacleAvoidance" />
-	<Proxy include="RobotAPI/interface/components/ObstacleAvoidance/ObstacleDetectorInterface.h"
+        <Proxy include="RobotAPI/interface/components/ObstacleAvoidance/ObstacleDetectionInterface.h"
             humanName="Platform obstacle detection interface"
             typeName="ObstacleDetectionInterfacePrx"
-            memberName="platformObstacleDetection"
-            getterName="getPlatformObstacleDetection"
-            propertyName="PlatformObstacleDetectionName"
+            memberName="obstacleDetection"
+            getterName="getObstacleDetection"
+            propertyName="ObstacleDetectionName"
+            propertyIsOptional="true"
             propertyDefaultValue="PlatformObstacleAvoidance" />
 	<Proxy include="RobotAPI/interface/components/ObstacleAvoidance/DynamicObstacleManagerInterface.h"
             humanName="Dynamic obstacle manager interface"
@@ -285,6 +286,7 @@
             memberName="dynamicObstacleManager"
             getterName="getDynamicObstacleManager"
             propertyName="DynamicObstacleManagerName"
+            propertyIsOptional="true"
             propertyDefaultValue="DynamicObstacleManager" />
         <Proxy include="RobotAPI/interface/observers/GraspCandidateObserverInterface.h"
             humanName="Grasp Candidate Observer"
diff --git a/source/RobotAPI/components/DSObstacleAvoidance/DSObstacleAvoidance.cpp b/source/RobotAPI/components/DSObstacleAvoidance/DSObstacleAvoidance.cpp
index ee891427aebe42fd391a64efee478ab2e9b260f0..4a83bdedaabbabcc2f46bc4e2815a826ee661156 100644
--- a/source/RobotAPI/components/DSObstacleAvoidance/DSObstacleAvoidance.cpp
+++ b/source/RobotAPI/components/DSObstacleAvoidance/DSObstacleAvoidance.cpp
@@ -316,22 +316,22 @@ armarx::DSObstacleAvoidance::removeObstacle(const std::string& obstacle_name, co
 std::vector<armarx::obstacledetection::Obstacle>
 armarx::DSObstacleAvoidance::getObstacles(const Ice::Current&)
 {
+    ARMARX_DEBUG << "Get Obstacles";
     std::shared_lock l{m_doa.mutex};
 
     std::vector<obstacledetection::Obstacle> obstacle_list;
 
     for (auto& [doa_name, doa_obstacle] : m_doa.env)
     {
-        std::shared_ptr<doa::Ellipsoid> doa_ellipsoid =
-            std::dynamic_pointer_cast<doa::Ellipsoid>(doa_obstacle);
+        ARMARX_DEBUG << "Got an obtascle";
+        std::shared_ptr<doa::Ellipsoid> doa_ellipsoid = std::dynamic_pointer_cast<doa::Ellipsoid>(doa_obstacle);
         obstacledetection::Obstacle obstacle;
 
         obstacle.name = doa_name;
         obstacle.posX = doa_ellipsoid->get_position()(0) * 1000;
         obstacle.posY = doa_ellipsoid->get_position()(1) * 1000;
         obstacle.posZ = doa_ellipsoid->get_position()(2) * 1000;
-        obstacle.yaw = simox::math::mat3f_to_rpy(doa_ellipsoid->get_orientation()
-                       .toRotationMatrix().cast<float>()).z();
+        obstacle.yaw = simox::math::mat3f_to_rpy(doa_ellipsoid->get_orientation().toRotationMatrix().cast<float>()).z();
         obstacle.axisLengthX = doa_ellipsoid->get_axis_lengths(0) * 1000;
         obstacle.axisLengthY = doa_ellipsoid->get_axis_lengths(1) * 1000;
         obstacle.axisLengthZ = doa_ellipsoid->get_axis_lengths(2) * 1000;
@@ -345,9 +345,11 @@ armarx::DSObstacleAvoidance::getObstacles(const Ice::Current&)
         obstacle.curvatureY = doa_ellipsoid->get_curvature_factor()(1);
         obstacle.curvatureZ = doa_ellipsoid->get_curvature_factor()(2);
 
+        ARMARX_DEBUG << "push back " << obstacle.name;
         obstacle_list.push_back(std::move(obstacle));
     }
 
+    ARMARX_DEBUG << "Return obstacle list";
     return obstacle_list;
 }
 
@@ -357,6 +359,8 @@ armarx::DSObstacleAvoidance::modulateVelocity(
     const obstacleavoidance::Agent& agent,
     const Ice::Current&)
 {
+
+    ARMARX_DEBUG << "Modulate velocity";
     std::shared_lock l{m_doa.mutex};
 
     // Create and initialize agent.
@@ -404,7 +408,7 @@ void
 armarx::DSObstacleAvoidance::updateEnvironment(const Ice::Current&)
 {
     ARMARX_VERBOSE << "Updating environment.";
-
+    std::lock_guard l2{m_vis.mutex};
     std::lock_guard l{m_doa.mutex};
 
     // Make working copies of the updates and free them again.
@@ -471,7 +475,6 @@ armarx::DSObstacleAvoidance::updateEnvironment(const Ice::Current&)
     m_doa.env.update();
 
     {
-        std::lock_guard l{m_vis.mutex};
         m_vis.needs_update = true;
     }
 
@@ -483,6 +486,7 @@ armarx::DSObstacleAvoidance::updateEnvironment(const Ice::Current&)
 void
 armarx::DSObstacleAvoidance::writeDebugPlots(const std::string& filename, const Ice::Current&)
 {
+    ARMARX_DEBUG << "Write debug plots";
     std::shared_lock l{m_doa.mutex};
 
     const std::string filename_annotated = getName() + "_" + filename;
@@ -532,6 +536,7 @@ const
 void
 armarx::DSObstacleAvoidance::run_visualization()
 {
+    ARMARX_DEBUG << "Run visualization";
     using namespace armarx::viz;
 
     std::lock_guard l{m_vis.mutex};
diff --git a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
index ccc5409fc336854e175d0245f7a24a5b973f5bb7..46515a2c2f9a61acbaf63c186920478dab82cb1c 100644
--- a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
+++ b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
@@ -143,6 +143,7 @@ namespace armarx
             // First check own obstacles
             for (ManagedObstaclePtr& managed_obstacle : m_managed_obstacles)
             {
+
                 std::lock_guard<std::shared_mutex> l(managed_obstacle->m_mutex);
                 float coverage = ManagedObstacle::line_segment_ellipsis_coverage(
                 {managed_obstacle->m_obstacle.posX, managed_obstacle->m_obstacle.posY}, managed_obstacle->m_obstacle.axisLengthX, managed_obstacle->m_obstacle.axisLengthY, managed_obstacle->m_obstacle.yaw,
@@ -219,16 +220,16 @@ namespace armarx
         ARMARX_DEBUG << "Remove Obstacle " << name << " from obstacle map and from obstacledetection";
         for (ManagedObstaclePtr& managed_obstacle : m_managed_obstacles)
         {
-            if(managed_obstacle->m_obstacle.name == name)
+            if (managed_obstacle->m_obstacle.name == name)
             {
                 managed_obstacle->m_value = std::numeric_limits<double>::min();
                 managed_obstacle->m_updated = true;
                 managed_obstacle->m_published = false;
-                m_obstacle_detection->removeObstacle(name);
-                m_obstacle_detection->updateEnvironment();
-                return; // We assume unique names
+                break;
             }
         }
+        m_obstacle_detection->removeObstacle(name);
+        m_obstacle_detection->updateEnvironment();
     }
 
     void DynamicObstacleManager::wait_unitl_obstacles_are_ready(const Ice::Current&)
@@ -257,6 +258,7 @@ namespace armarx
 
     void DynamicObstacleManager::update_decayable_obstacles()
     {
+        ARMARX_DEBUG << "update obstacles";
         IceUtil::Time started = IceUtil::Time::now();
         std::vector<std::string> remove_obstacles;
 
@@ -265,6 +267,7 @@ namespace armarx
 
         // Update positions
         {
+            ARMARX_DEBUG << "update obstacle position";
             std::shared_lock<std::shared_mutex> l(m_managed_obstacles_mutex);
             if (!m_managed_obstacles.size())
             {
@@ -285,6 +288,7 @@ namespace armarx
         int published_obstacles = 0;
         int updated_obstacles = 0;
         {
+            ARMARX_DEBUG << "update obstacle values and publish";
             std::lock_guard l(m_managed_obstacles_mutex);
             std::sort(m_managed_obstacles.begin(), m_managed_obstacles.end(), ManagedObstacle::ComparatorDESCPrt);
 
@@ -366,6 +370,7 @@ namespace armarx
 
         if (updated)
         {
+            ARMARX_DEBUG << "update environment";
             m_obstacle_detection->updateEnvironment();
         }
         arviz.commit({obstacleLayer});
diff --git a/source/RobotAPI/interface/components/ObstacleAvoidance/DSObstacleAvoidanceInterface.ice b/source/RobotAPI/interface/components/ObstacleAvoidance/DSObstacleAvoidanceInterface.ice
index 04176dc066828cfc28577851d556464880db076d..42ed92db3ba81fe2a0255bab1e9a98c9f386991a 100644
--- a/source/RobotAPI/interface/components/ObstacleAvoidance/DSObstacleAvoidanceInterface.ice
+++ b/source/RobotAPI/interface/components/ObstacleAvoidance/DSObstacleAvoidanceInterface.ice
@@ -56,8 +56,7 @@ module armarx
 	ObstacleAvoidanceInterface, ObstacleDetectionInterface
     {
 
-        dsobstacleavoidance::Config 
-	getConfig();
+        dsobstacleavoidance::Config  getConfig();
 
         void
         writeDebugPlots(string filename);