diff --git a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
index a57f5db17e7f05eacc0cb76973d909c71fda71d6..404cacfbaf296e03d891698825256e509043374a 100644
--- a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
+++ b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp
@@ -218,7 +218,7 @@ namespace armarx
         std::lock_guard l(m_managed_obstacles_mutex);
 
         ARMARX_DEBUG << "Remove Obstacle " << name << " from obstacle map and from obstacledetection";
-        for (ManagedObstaclePtr& managed_obstacle : m_managed_obstacles)
+        for (ManagedObstaclePtr managed_obstacle : m_managed_obstacles)
         {
             if (managed_obstacle->m_obstacle.name == name)
             {
@@ -244,15 +244,15 @@ namespace armarx
     {
         std::shared_lock<std::shared_mutex> l{m_managed_obstacles_mutex};
 
-        const float sample_step = 50; // in [mm], towards goal.
+        const float sample_step = 5; // in [mm], towards goal.
         const float distance_to_goal = (goal - position).norm();
         float current_distance = sample_step;
 
-        while (sample_step < distance_to_goal)
+        while (current_distance < distance_to_goal)
         {
-            for (const auto& man_obstacle : m_managed_obstacles)
+            for (const auto man_obstacle : m_managed_obstacles)
             {
-                Eigen::Vector2f sample = position + ((goal - position).normalized() * sample_step);
+                Eigen::Vector2f sample = position + ((goal - position).normalized() * current_distance);
                 obstacledetection::Obstacle obstacle = man_obstacle->m_obstacle;
                 Eigen::Vector2f obstacle_origin{obstacle.posX, obstacle.posY};
 
@@ -265,6 +265,7 @@ namespace armarx
             current_distance += sample_step;
         }
 
+
         return std::numeric_limits<float>::infinity();
     }
 
diff --git a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
index 84b7adb4d3a668b22d71b66c71b812795dcd626c..cbfb380d13923f7fb5eefa67693a6ff8646744e3 100644
--- a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
+++ b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp
@@ -354,20 +354,26 @@ armarx::ObstacleAwarePlatformUnit::get_velocities()
 
     // Acquire control_data mutex to ensure data remains consistent.
     std::scoped_lock l{m_control_data.mutex};
-
+    ARMARX_LOG << __LINE__;
     // Update agent and get target velocities.
     update_agent_dependent_values();
+    ARMARX_LOG << __LINE__;
     const Eigen::Vector2f target_vel = get_target_velocity();
+    ARMARX_LOG << __LINE__;
     const float target_rot_vel = get_target_rotational_velocity();
-
+    ARMARX_LOG << __LINE__;
     // Apply obstacle avoidance and apply post processing to get the modulated velocity.
     const Eigen::Vector2f modulated_vel = [this, &target_vel]
     {
-        float distance = m_obsman->distanceToObstacle(m_control_data.agent_pos, m_control_data.target_pos);
-        // https://www.wolframalpha.com/input/?i=line+through+%28750%2C+0%29+and+%282000%2C+1%29
-        float modifier = std::clamp((distance / 1250) - 0.6, 0.0, 1.0);
+        const float distance = m_obsman->distanceToObstacle(m_control_data.agent_pos, m_control_data.target_pos);
+
+        ARMARX_DEBUG << "Distance to obstacle: " << distance;
+
+        // https://www.wolframalpha.com/input/?i=line+through+%281000%2C+0%29+and+%282000%2C+1%29
+        float modifier = std::clamp((distance / 1000) - 1., 0.0, 1.0);
 
-        return modifier * target_vel;
+        const Eigen::Vector2f vel = modifier * target_vel;
+        return vel.norm() > 20 ? vel : Eigen::Vector2f{0, 0};
     }();
 
     ARMARX_CHECK(modulated_vel.allFinite()) << "Velocity contains non-finite values.";