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 474dd5f33b4a7240e19115ce41f019898a6e80ed..33c13a4a6375fe1d3a66d3010918ada9849563bb 100644
--- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
@@ -286,7 +286,10 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
                                                                  cN * entry.getAltitude() + cX * exit.getAltitude(),
                                                                  tile.getMinimumLongitude());
                     }
-                    final int crossingLat = tile.getFloorLatitudeIndex(crossingGP.getLatitude());
+                    final int crossingLat =
+                            FastMath.max(0,
+                                         FastMath.min(tile.getLatitudeRows() - 1,
+                                                      tile.getFloorLatitudeIndex(crossingGP.getLatitude())));
 
                     // adjust indices as the crossing point is by definition between the sub-tiles
                     final int crossingLonBefore = crossingLon - (entryLon <= exitLon ? 1 : 0);
@@ -345,7 +348,10 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm {
                                                                  cN * entry.getAltitude()  + cX * exit.getAltitude(),
                                                                  tile.getMinimumLongitude());
                     }
-                    final int crossingLon = tile.getFloorLongitudeIndex(crossingGP.getLongitude());
+                    final int crossingLon =
+                            FastMath.max(0,
+                                         FastMath.min(tile.getLongitudeColumns() - 1,
+                                                      tile.getFloorLongitudeIndex(crossingGP.getLongitude())));
 
                     // adjust indices as the crossing point is by definition between the sub-tiles
                     final int crossingLatBefore = crossingLat - (entryLat <= exitLat ? 1 : 0);