diff --git a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
index 1b14cd22f976a9fd133eb892c6c43f3ad55a119f..7009645126a6b34d2af91dfe78766d5a837d6f5f 100644
--- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
@@ -54,9 +54,6 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
     /** Flag for flat-body hypothesis. */
     private final boolean flatBody;
 
-    /** Nb times cell intersection (with DEM) is performed for null intersection (used to avoid infinite loop). */
-    private int nbCall = 0;
-
     /** Simple constructor.
      * @param updater updater used to load Digital Elevation Model tiles
      * @param maxCachedTiles maximum number of tiles stored in the cache
@@ -191,8 +188,14 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
 
         } else { // with a DEM
 
-            final NormalizedGeodeticPoint currentGuess0 = currentGuess;
+            // Keep the initial guess
+            final NormalizedGeodeticPoint currentGuess0 = closeGuess;
+
+            // number of times cell intersection (with DEM) is performed for null intersection (used to avoid infinite loop)
+            int nbCall = 0;
+            // Shift for s to find the solution if foundIntersection is null
             double deltaS = -1.;
+            // if the shifts in one way was not successful, try the other way
             boolean secondChance = false;
 
             while (foundIntersection == null && (nbCall < NB_TIME_CELL_INTERSECTION)) {