diff --git a/CMakeLists.txt b/CMakeLists.txt
index f60a728bec5f475b90a42dbdb028ac20096f91ef..e02593a0c84328633656d19de506b4ea3df9e1b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,4 +56,12 @@ target_link_libraries(extraction_eddies ${contour_531_LIBRARY}
 
 include(Tests/CMakeLists.txt)
 include(ConfigureCompilerFlags)
+
+if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
+  # Gfortran bug with quiet NaNs
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70817
+  string(REPLACE "-ffpe-trap=invalid" "" CMAKE_Fortran_FLAGS_DEBUG
+    ${CMAKE_Fortran_FLAGS_DEBUG})
+endif()
+  
 include(TAGS)
diff --git a/Documentation_texfol/documentation.tex b/Documentation_texfol/documentation.tex
index 7b44ad308e135f2061ba8e04b32e62439695e16c..af8c26f08195b4be8b9f33718868c4fe842d6361 100644
--- a/Documentation_texfol/documentation.tex
+++ b/Documentation_texfol/documentation.tex
@@ -1433,8 +1433,8 @@ un seul processus.
 Tous les arguments sont des données. e1, e2 : scalaires de type
 eddy. j1, j2, indices de position dans la fenêtre correspondant à e1,
 e2. j : indice de position dans la fenêtre auquel on veut
-interpoler. k, i : indices de date et de tourbillon. Cf. algorithme
-(\ref{alg:interpolate_eddy}).
+interpoler. k, i : indices de date et de tourbillon pour le tourbillon
+interpolé. Cf. algorithme (\ref{alg:interpolate_eddy}).
 \begin{algorithm}[htbp]
   \begin{algorithmic}
     \STATE e = interpolation entre e1 et e2
@@ -1497,30 +1497,27 @@ flow(j)\%list\_vis\%delta\_in, flow\%number\_eddies. Cf. algorithme
     \STATE weight\_delta = weight(flow(j - delta)\%list\_vis(i1),
     flow(j)\%list\_vis(i2))
 
-    \STATE flow(j - delta + 1)\%number\_eddies += 1
+    \STATE i\_pred = i1
 
-    \STATE appel de interpolate\_eddy(flow(j -
-    delta)\%list\_vis(i1), flow(j)\%list\_vis(i2), j - delta, j, j - delta + 1,
-    k - delta + 1, flow(j - delta + 1)\%number\_eddies)
-
-    \STATE écrire dans graph.txt : k - delta, i1, k - delta + 1,
-    flow(j - delta + 1)\%number\_eddies, weight\_delta
-
-    \FOR{j\_interp = j - delta + 2 \TO j - 1}
+    \FOR{j\_interp = j - delta + 1 \TO j - 1}
 
+    \STATE \COMMENT{compte d'un successeur fictif en j\_interp}
+    
     \STATE flow(j\_interp)\%number\_eddies += 1
 
     \STATE appel de interpolate\_eddy(flow(j -
     delta)\%list\_vis(i1), flow(j)\%list\_vis(i2), j - delta, j, j\_interp, k -
     j + j\_interp, flow(j\_interp)\%number\_eddies)
 
-    \STATE écrire dans graph.txt : k - j + j\_interp - 1,
-    flow(j\_interp - 1)\%number\_eddies, k - j + j\_interp,
-    flow(j\_interp)\%number\_eddies, weight\_delta
+    \STATE écrire dans graph.txt : k - j + j\_interp - 1, i\_pred, k -
+    j + j\_interp, flow(j\_interp)\%number\_eddies, weight\_delta
+
+    \STATE i\_pred = flow(j\_interp)\%number\_eddies
+    
     \ENDFOR
 
-    \STATE écrire dans graph.txt : k - 1, flow(j - 1)\%number\_eddies, k,
-    i2, weight\_delta
+    \STATE écrire dans graph.txt : k - 1, i\_pred, k, i2,
+    weight\_delta
 
     \STATE flow(j - delta)\%list\_vis(i1)\%delta\_out = delta
   
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 8b360eae526f280575f97d2c795c188e046ae92e..d51232cd644feeeed8e173cc6067a08a26d95423 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -30,9 +30,9 @@ target_link_libraries(test_nearby_extr ${contour_531_LIBRARY}
 # test_successive_overlap
 
 add_executable(test_successive_overlap derived_types.f90
-  successive_overlap.f90 read_snapshot.f90 spher_polygon_area.f90
+  overlap.f90 read_snapshot.f90 spher_polygon_area.f90
   spher_polyline_area.f90 weight.f90 read_eddy.f90
-  read_field_indices.f90 candidate_overlap.f90
+  read_field_indices.f90 candidate_overlap.f90 interpolate_eddy.f90
   ${CMAKE_CURRENT_LIST_DIR}/test_successive_overlap.f90)
 
 target_include_directories(test_successive_overlap PRIVATE
diff --git a/Tests/test_successive_overlap.f90 b/Tests/test_successive_overlap.f90
index 68aeb4f728933525aa4aeaeba4429e61889731cb..a5e4cc6e661da6e91d1af1bc7b6fff2f80891d78 100644
--- a/Tests/test_successive_overlap.f90
+++ b/Tests/test_successive_overlap.f90
@@ -11,7 +11,7 @@ program test_successive_overlap
   use derived_types, only: snapshot
   use read_field_indices_m, only: read_field_indices
   use read_snapshot_m, only: read_snapshot
-  use successive_overlap_m, only: successive_overlap
+  use overlap_m, only: overlap
 
   implicit none
 
@@ -98,8 +98,8 @@ program test_successive_overlap
        // '"successor eddy subscript"'
   write(unit_edgelist, fmt = *) "k1 i1 k2 i2 weight"
 
-  call successive_overlap(flow, unit_edgelist, nlon, nlat, periodic, dist_lim, &
-       j = 2, k = k)
+  call overlap(flow, unit_edgelist, nlon, nlat, periodic, dist_lim, j = 2, &
+       k = k, delta = 1)
   close(unit_edgelist)
   print *, 'Created file "edgelist.csv".'
 
diff --git a/candidate_overlap.f90 b/candidate_overlap.f90
index 950601a282bc6c62b93ceca21a27266b37b306a5..b676a862395ff9751ab12743e2837ee018bac30a 100644
--- a/candidate_overlap.f90
+++ b/candidate_overlap.f90
@@ -4,7 +4,7 @@ module candidate_overlap_m
 
 contains
 
-  function candidate_overlap(extr_map, list_vis, cyclone)
+  function candidate_overlap(extr_map, list_vis, cyclone, delta_out)
 
     ! Find the eddies in extr_map that are valid and have a given
     ! cyclonicity.
@@ -22,6 +22,7 @@ contains
     ! cyclone to be defined.
 
     logical, intent(in):: cyclone ! cyclonicity of the target extremum
+    integer, intent(in):: delta_out
 
     !---------------------------------------------------------------------
 
diff --git a/interpolate_eddy.f90 b/interpolate_eddy.f90
new file mode 100644
index 0000000000000000000000000000000000000000..c224af41ba5b19cb9c706350cb858b854f956467
--- /dev/null
+++ b/interpolate_eddy.f90
@@ -0,0 +1,11 @@
+module interpolate_eddy_m
+
+  implicit none
+
+contains
+
+  subroutine interpolate_eddy
+
+  end subroutine interpolate_eddy
+
+end module interpolate_eddy_m
diff --git a/successive_overlap.f90 b/overlap.f90
similarity index 56%
rename from successive_overlap.f90
rename to overlap.f90
index e755c0ab18abc61cd39712ba75f1e8097a53f503..278a182d9548c845cfe7e8878ea26093a3138d84 100644
--- a/successive_overlap.f90
+++ b/overlap.f90
@@ -1,15 +1,15 @@
-module successive_overlap_m
+module overlap_m
 
   implicit none
 
 contains
 
-  subroutine successive_overlap(flow, unit_edgelist, nlon, nlat, periodic, &
-       dist_lim, j, k)
+  subroutine overlap(flow, unit_edgelist, nlon, nlat, periodic, &
+       dist_lim, j, k, delta)
 
-    ! Finds edges between flow(j - 1) and flow(j), corresponding to
-    ! dates k - 1 and k. Writes these edges to unit_edgelist. Updates
-    ! flow(j - 1)%list_vis%delta_out and flow(j)%list_vis%delta_in.
+    ! Finds edges between flow(j - delta) and flow(j), corresponding to
+    ! dates k - delta and k. Writes these edges to unit_edgelist. Updates
+    ! flow(j - delta)%list_vis%delta_out and flow(j)%list_vis%delta_in.
 
     ! Libraries:
     use contour_531, only: polyline
@@ -18,6 +18,7 @@ contains
 
     use candidate_overlap_m, only: candidate_overlap
     use derived_types, only: snapshot
+    use interpolate_eddy_m, only: interpolate_eddy
     use spher_polygon_area_m, only: spher_polygon_area
     use spher_polyline_area_m, only: spher_polyline_area
     use weight_m, only: weight
@@ -35,12 +36,14 @@ contains
     ! position in time window, between 2 and max_delta + 1
 
     integer, intent(in):: k ! date index
+    integer, intent(in):: delta
 
     ! Local:
 
-    integer i1, i2, l, n_select, m
+    integer i1, i2, l, n_select, m, i_pred, j_interp
     type(polyline) polyline_1, polyline_2
     type(polygon) res_pol
+    real w
 
     integer, allocatable:: selection(:)
     ! identifying numbers of a selection of extrema
@@ -51,12 +54,12 @@ contains
 
     !-----------------------------------------------------------------------
 
-    do i1 = 1, flow(j - 1)%number_vis_extr
-       if (flow(j - 1)%list_vis(i1)%valid) then
+    do i1 = 1, flow(j - delta)%number_vis_extr
+       if (flow(j - delta)%list_vis(i1)%valid) then
           ! Define the geographical window around each eddy extremum:
 
-          llc = flow(j - 1)%ind_extr(:, i1) - dist_lim
-          urc = flow(j - 1)%ind_extr(:, i1) + dist_lim
+          llc = flow(j - delta)%ind_extr(:, i1) - dist_lim
+          urc = flow(j - delta)%ind_extr(:, i1) + dist_lim
 
           llc(2) = max(llc(2), 1)
           urc(2) = min(urc(2), nlat)
@@ -68,12 +71,13 @@ contains
 
           selection = candidate_overlap(flow(j)%extr_map(llc(1):urc(1), &
                llc(2):urc(2)), flow(j)%list_vis, &
-               flow(j - 1)%list_vis(i1)%cyclone)
+               flow(j - delta)%list_vis(i1)%cyclone, &
+               flow(j - delta)%list_vis(i1)%delta_out)
           n_select = size(selection)
           if (n_select /= 0) polyline_1 &
-               = merge(flow(j - 1)%list_vis(i1)%speed_cont%polyline, &
-               flow(j - 1)%list_vis(i1)%out_cont%polyline, &
-               flow(j - 1)%list_vis(i1)%speed_cont%n_points /= 0)
+               = merge(flow(j - delta)%list_vis(i1)%speed_cont%polyline, &
+               flow(j - delta)%list_vis(i1)%out_cont%polyline, &
+               flow(j - delta)%list_vis(i1)%speed_cont%n_points /= 0)
 
           DO l = 1, n_select
              i2 = selection(l)
@@ -83,12 +87,12 @@ contains
 
              ! Shift the longitudes of polyline_2 to values close to the
              ! longitude of extremum i1:
-             m = floor((flow(j - 1)%list_vis(i1)%coord_extr(1) &
+             m = floor((flow(j - delta)%list_vis(i1)%coord_extr(1) &
                   - flow(j)%list_vis(i2)%coord_extr(1)) / twopi + 0.5)
              polyline_2%points(1, :) = polyline_2%points(1, :) + m * twopi
 
-             call gpc_polygon_clip_f(GPC_INT, polygon(nparts = 1, &
-                  part = [polyline_1], hole = [.false.]), &
+             call gpc_polygon_clip_f(GPC_INT, &
+                  polygon(nparts = 1, part = [polyline_1], hole = [.false.]), &
                   polygon(nparts = 1, part = [polyline_2], hole = [.false.]), &
                   res_pol)
 
@@ -97,16 +101,31 @@ contains
                 if (spher_polygon_area(res_pol) >= 0.25 &
                      * min(spher_polyline_area(polyline_1), &
                      spher_polyline_area(polyline_2))) then
-                   write(unit_edgelist, fmt = *) k - 1, i1, k, i2, &
-                        weight(flow(j - 1)%list_vis(i1), flow(j)%list_vis(i2))
-                   flow(j - 1)%list_vis(i1)%delta_out = 1
-                   flow(j)%list_vis(i2)%delta_in = 1
+                   w = weight(flow(j - delta)%list_vis(i1), &
+                        flow(j)%list_vis(i2))
+                   i_pred = i1
+
+                   do j_interp = j - delta + 1, j - 1
+                      ! Count one more fictitious eddy at j_interp!
+                      flow(j_interp)%number_eddies &
+                           = flow(j_interp)%number_eddies + 1
+
+                      call interpolate_eddy
+                      write(unit_edgelist, fmt = *) k - j + j_interp - 1, &
+                           i_pred, k - j + j_interp, &
+                           flow(j_interp)%number_eddies, w
+                      i_pred = flow(j_interp)%number_eddies
+                   end do
+
+                   write(unit_edgelist, fmt = *) k - 1, i_pred, k, i2, w
+                   flow(j - delta)%list_vis(i1)%delta_out = delta
+                   flow(j)%list_vis(i2)%delta_in = delta
                 end if
              end if
           end DO
        end if
     end do
 
-  end subroutine successive_overlap
+  end subroutine overlap
   
-end module successive_overlap_m
+end module overlap_m
diff --git a/read_snapshot.f90 b/read_snapshot.f90
index 4438f1bc706b24c0b8b4c4579e3e3410eed434d9..2b24996b6ff570dc8b172bea7782eac337067da6 100644
--- a/read_snapshot.f90
+++ b/read_snapshot.f90
@@ -11,7 +11,7 @@ contains
 
     ! Libraries:
     use contour_531, only: convert_to_ind 
-    use nr_util, only: assert, deg_to_rad
+    use nr_util, only: assert
     use shapelib, only: shpfileobject
     use shapelib_03, only: shp_get_info_03