diff --git a/Core/include/Acts/Fitter/KalmanFitter.hpp b/Core/include/Acts/Fitter/KalmanFitter.hpp
index 56c8d1da901fe93070552ce8e6886808c06c376f..3b222c0d4f5fbac0254eebce1ec17583fcc4f9ad 100644
--- a/Core/include/Acts/Fitter/KalmanFitter.hpp
+++ b/Core/include/Acts/Fitter/KalmanFitter.hpp
@@ -243,8 +243,8 @@ class KalmanFitter {
       }
 
       // Finalization:
-      // - When all track states have been handled
-      if (result.processedStates == inputMeasurements.size() and
+      // When the navigation is breaked
+      if (state.navigation.navigationBreak and result.processedStates > 0 and
           not result.smoothed) {
         // -> Sort the track states (as now the path length is set)
         // -> Call the smoothing
diff --git a/Core/include/Acts/Propagator/DirectNavigator.hpp b/Core/include/Acts/Propagator/DirectNavigator.hpp
index bcf26f9a82660ce748c97f05d8c22efe808320d7..673305a0c0426c80a87186071155fccaf4b5cccc 100644
--- a/Core/include/Acts/Propagator/DirectNavigator.hpp
+++ b/Core/include/Acts/Propagator/DirectNavigator.hpp
@@ -134,22 +134,34 @@ class DirectNavigator {
       return dstream.str();
     });
     // Check if we are on surface
+<<<<<<< HEAD
     if (state.navigation.nextSurfaceIter !=
         state.navigation.surfaceSequence.end()) {
       // Establish the surface status
       auto surfaceStatus = stepper.updateSurfaceStatus(
           state.stepping, **state.navigation.nextSurfaceIter, false);
       if (surfaceStatus == Intersection::Status::onSurface) {
+=======
+    if (state.navigation.nextSurfaceIter != state.navigation.endSurfaceIter) {
+      if (stepper.surfaceReached(state.stepping,
+                                 *state.navigation.nextSurfaceIter)) {
+>>>>>>> 695c717e... Fix the DirectNavigator
         // Set the current surface
         state.navigation.currentSurface = *state.navigation.nextSurfaceIter;
         debugLog(state, [&] {
           std::stringstream dstream;
+<<<<<<< HEAD
           dstream << "Current surface set to  "
                   << state.navigation.currentSurface->geoID();
+=======
+          dstream << "Current surface set to  ";
+          dstream << state.navigation.currentSurface->geoID();
+>>>>>>> 695c717e... Fix the DirectNavigator
           return dstream.str();
         });
         // Move the sequence to the next surface
         ++state.navigation.nextSurfaceIter;
+<<<<<<< HEAD
         if (state.navigation.nextSurfaceIter !=
             state.navigation.surfaceSequence.end()) {
           debugLog(state, [&] {
@@ -167,6 +179,14 @@ class DirectNavigator {
                   << stepper.outputStepSize(state.stepping);
           return dstream.str();
         });
+=======
+      } else if ((*state.navigation.nextSurfaceIter)
+                     ->isOnSurface(state.geoContext,
+                                   stepper.position(state.stepping),
+                                   stepper.direction(state.stepping), false)) {
+        // Move the sequence to the next surface
+        ++state.navigation.nextSurfaceIter;
+>>>>>>> 695c717e... Fix the DirectNavigator
       }
     }
   }