diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
index 743b4491adb8fb607298dc0abfd276aca946107e..7a6301d2eddd4230379201ba9663f12f8e86c6b3 100644
--- a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
@@ -136,7 +136,13 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm {
                             final double        s         = Vector3D.dotProduct(delta, los) / los.getNormSq();
                             final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los),
                                                                                 ellipsoid.getBodyFrame(), null);
-                            final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), i, j);
+                            final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(),
+                                                                                                            projected.getLongitude(),
+                                                                                                            projected.getAltitude(),
+                                                                                                            gp.getLongitude());
+                            final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(normalizedProjected,
+                                                                                             ellipsoid.convertLos(normalizedProjected, los),
+                                                                                             i, j);
 
                             if (gpImproved != null) {
                                 final Vector3D point = ellipsoid.transform(gpImproved);
@@ -172,10 +178,16 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm {
             final double        s         = Vector3D.dotProduct(delta, los) / los.getNormSq();
             final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los),
                                                                 ellipsoid.getBodyFrame(), null);
-            final Tile          tile      = cache.getTile(projected.getLatitude(), projected.getLongitude());
-            return tile.cellIntersection(projected, ellipsoid.convertLos(projected, los),
-                                          tile.getFloorLatitudeIndex(projected.getLatitude()),
-                                          tile.getFloorLongitudeIndex(projected.getLongitude()));
+            final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(),
+                                                                                            projected.getLongitude(),
+                                                                                            projected.getAltitude(),
+                                                                                            closeGuess.getLongitude());
+            final Tile          tile      = cache.getTile(normalizedProjected.getLatitude(),
+                                                          normalizedProjected.getLongitude());
+            return tile.cellIntersection(normalizedProjected,
+                                         ellipsoid.convertLos(normalizedProjected, los),
+                                         tile.getFloorLatitudeIndex(normalizedProjected.getLatitude()),
+                                         tile.getFloorLongitudeIndex(normalizedProjected.getLongitude()));
         } catch (OrekitException oe) {
             throw new RuggedException(oe, oe.getSpecifier(), oe.getParts());
         }
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 24e756b8994f6d65553ef48c3737cc74d87777f9..e2088e4f8dd0815ff153275f3167a5f6ddb2b9cc 100644
--- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
@@ -195,10 +195,15 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
                 final double        s         = Vector3D.dotProduct(delta, los) / los.getNormSq();
                 final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los),
                                                                     ellipsoid.getBodyFrame(), null);
-                final Tile          tile      = cache.getTile(projected.getLatitude(), projected.getLongitude());
-                return tile.cellIntersection(projected, ellipsoid.convertLos(projected, los),
-                                              tile.getFloorLatitudeIndex(projected.getLatitude()),
-                                              tile.getFloorLongitudeIndex(projected.getLongitude()));
+                final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(),
+                                                                                                projected.getLongitude(),
+                                                                                                projected.getAltitude(),
+                                                                                                closeGuess.getLongitude());
+                final Tile          tile      = cache.getTile(normalizedProjected.getLatitude(),
+                                                              normalizedProjected.getLongitude());
+                return tile.cellIntersection(normalizedProjected, ellipsoid.convertLos(normalizedProjected, los),
+                                              tile.getFloorLatitudeIndex(normalizedProjected.getLatitude()),
+                                              tile.getFloorLongitudeIndex(normalizedProjected.getLongitude()));
             }
         } catch (OrekitException oe) {
             throw new RuggedException(oe, oe.getSpecifier(), oe.getParts());
@@ -457,7 +462,13 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
                     final double        s         = Vector3D.dotProduct(delta, los) / los.getNormSq();
                     final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los),
                                                                         ellipsoid.getBodyFrame(), null);
-                    final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), i, j);
+                    final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(),
+                                                                                                    projected.getLongitude(),
+                                                                                                    projected.getAltitude(),
+                                                                                                    gp.getLongitude());
+                    final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(normalizedProjected,
+                                                                                     ellipsoid.convertLos(normalizedProjected, los),
+                                                                                     i, j);
 
                     if (gpImproved != null) {
                         final Vector3D point = ellipsoid.transform(gpImproved);