diff --git a/src/NST/agrif_oce_sponge.F90 b/src/NST/agrif_oce_sponge.F90
index fe2997c0b95928072112a18c86c0e90c8fa15290..ce2d65751c65305eca1082b47621712c6143914b 100644
--- a/src/NST/agrif_oce_sponge.F90
+++ b/src/NST/agrif_oce_sponge.F90
@@ -395,7 +395,7 @@ CONTAINS
       INTEGER  ::   iku, ikv
       REAL(wp) :: ztsa, zabe1, zabe2, zbtr, zhtot
       REAl(wp) :: zflag, zdmod, zdtot
-      REAL(wp), DIMENSION(i1-1:i2,j1-1:j2,jpk) :: ztu, ztv
+      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk) :: ztu, ztv
       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tsbdiff
       ! vertical interpolation:
       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tabres_child
@@ -551,17 +551,18 @@ CONTAINS
 
          DO jn = 1, jpts            
             DO jk = 1, jpkm1
-               ztu(i1-1:i2,j1-1:j2,jk) = 0._wp
+               ztu(i2,j1:j2,jk) = 0._wp
                DO jj = j1,j2
                   DO ji = i1,i2-1
                      zabe1 = rn_sponge_tra * r1_Dt * umask(ji,jj,jk) * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a)
                      zdtot =  tsbdiff(ji+1,jj,jk,jn) -  tsbdiff(ji,jj,jk,jn) 
                      zdmod =       ts(ji+1,jj,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a)
                      zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod)
+                     IF (ABS(zdtot*zdmod)<=1.e-6) zflag = 1._wp ! for 1:1 repro
                      ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod ) 
                   END DO
                END DO
-               ztv(i1-1:i2,j1-1:j2,jk) = 0._wp
+               ztv(i1:i2,j2,jk) = 0._wp
                DO ji = i1,i2
                   DO jj = j1,j2-1
                      zabe2 = rn_sponge_tra * r1_Dt * vmask(ji,jj,jk) * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a)
@@ -569,6 +570,7 @@ CONTAINS
                      zdtot =  tsbdiff(ji,jj+1,jk,jn) -  tsbdiff(ji,jj,jk,jn) 
                      zdmod =       ts(ji,jj+1,jk,jn,Kbb_a) - ts(ji,jj,jk,jn,Kbb_a)
                      zflag = 0.5_wp + SIGN(0.5_wp, zdtot*zdmod)
+                     IF (ABS(zdtot*zdmod)<=1.e-6) zflag = 1._wp ! for 1:1 repro
                      ztv(ji,jj,jk) = zabe2 * fspv(ji,jj) * ( zflag * zdtot + (1._wp - zflag) * zdmod ) 
                   END DO
                END DO
@@ -586,10 +588,9 @@ CONTAINS
                ENDIF
             END DO
             !
-! JC: there is something wrong with the Laplacian in corners
             DO jk = 1, jpkm1
-               DO jj = j1,j2
-                  DO ji = i1,i2
+               DO jj = j1+1,j2-1
+                  DO ji = i1+1,i2-1
                      IF (.NOT. tabspongedone_tsn(ji,jj)) THEN 
                         zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a)
                         ! horizontal diffusive trends
@@ -606,7 +607,7 @@ CONTAINS
             !
          END DO
          !
-         tabspongedone_tsn(i1:i2,j1:j2) = .TRUE.
+         tabspongedone_tsn(i1+1:i2-1,j1+1:j2-1) = .TRUE.
          !
       ENDIF
       !
diff --git a/src/NST/agrif_oce_update.F90 b/src/NST/agrif_oce_update.F90
index e48bd2dfaf079416266109c44ba7643139ce87da..8e9142fd6fe841d70741a08793766da3b9e26966 100644
--- a/src/NST/agrif_oce_update.F90
+++ b/src/NST/agrif_oce_update.F90
@@ -202,15 +202,14 @@ CONTAINS
       Agrif_UseSpecialValueInUpdate = .FALSE.
 # if ! defined DECAL_FEEDBACK_2D
       CALL Agrif_Update_Variable(r3t_id,  locupdate=(/  nn_shift_bar,-2/), procname=update_r3t) 
-      CALL Agrif_Update_Variable(r3f_id,  locupdate=(/  nn_shift_bar,-2/), procname=update_r3f) 
       CALL Agrif_Update_Variable(r3u_id, locupdate1=(/  nn_shift_bar,-2/), locupdate2=(/  nn_shift_bar,-2/), procname=update_r3u) 
       CALL Agrif_Update_Variable(r3v_id, locupdate1=(/  nn_shift_bar,-2/), locupdate2=(/  nn_shift_bar,-2/), procname=update_r3v) 
 # else
       CALL Agrif_Update_Variable(r3t_id,  locupdate=(/1+nn_shift_bar,-2/), procname=update_r3t) 
-      CALL Agrif_Update_Variable(r3f_id,  locupdate=(/1+nn_shift_bar,-2/), procname=update_r3f) 
       CALL Agrif_Update_Variable(r3u_id, locupdate1=(/  nn_shift_bar,-2/), locupdate2=(/1+nn_shift_bar,-2/), procname=update_r3u) 
       CALL Agrif_Update_Variable(r3v_id, locupdate1=(/1+nn_shift_bar,-2/), locupdate2=(/  nn_shift_bar,-2/), procname=update_r3v) 
 # endif
+      CALL Agrif_Update_Variable(r3f_id,  locupdate=(/1+nn_shift_bar,-2/), procname=update_r3f) 
       !
       ! Old way (update e3 at UVF-points everywhere on parent domain):
 !      CALL Agrif_ChildGrid_To_ParentGrid()
diff --git a/src/NST/agrif_top_sponge.F90 b/src/NST/agrif_top_sponge.F90
index a3706693f70e7e90f41bbdf2c93b927c0bb88c47..1ef7262804ba792c7abe91e30e52166c5b49bd02 100644
--- a/src/NST/agrif_top_sponge.F90
+++ b/src/NST/agrif_top_sponge.F90
@@ -77,7 +77,7 @@ CONTAINS
       INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices
       INTEGER  ::   iku, ikv
       REAL(wp) :: ztra, zabe1, zabe2, zbtr, zhtot
-      REAL(wp), DIMENSION(i1-1:i2,j1-1:j2,jpk) :: ztu, ztv
+      REAL(wp), DIMENSION(i1:i2,j1:j2,jpk) :: ztu, ztv
       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::trbdiff
       ! vertical interpolation:
       REAL(wp), DIMENSION(i1:i2,j1:j2,jpk,n1:n2) ::tabres_child
@@ -230,14 +230,14 @@ CONTAINS
 
          DO jn = 1, jptra            
             DO jk = 1, jpkm1
-               ztu(i1-1:i2,j1-1:j2,jk) = 0._wp
+               ztu(i2,j1:j2,jk) = 0._wp
                DO jj = j1,j2
                   DO ji = i1,i2-1
                      zabe1 = rn_sponge_tra * r1_Dt * umask(ji,jj,jk) * e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a)
                      ztu(ji,jj,jk) = zabe1 * fspu(ji,jj) * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
                   END DO
                END DO
-               ztv(i1-1:i2,j1-1:j2,jk) = 0._wp
+               ztv(i1:i2,j2,jk) = 0._wp
                DO ji = i1,i2
                   DO jj = j1,j2-1
                      zabe2 = rn_sponge_tra * r1_Dt * vmask(ji,jj,jk) * e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a)
@@ -260,8 +260,8 @@ CONTAINS
             !
 ! JC: there is something wrong with the Laplacian in corners
             DO jk = 1, jpkm1
-               DO jj = j1,j2
-                  DO ji = i1,i2
+               DO jj = j1+1,j2-1
+                  DO ji = i1+1,i2-1
                      IF (.NOT. tabspongedone_trn(ji,jj)) THEN 
                         zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a)
                         ! horizontal diffusive trends
@@ -278,7 +278,7 @@ CONTAINS
             !
          END DO
          !
-         tabspongedone_trn(i1:i2,j1:j2) = .TRUE.
+         tabspongedone_trn(i1+1:i2-1,j1+1:j2-1) = .TRUE.
          !
       ENDIF
       !
diff --git a/src/NST/agrif_user.F90 b/src/NST/agrif_user.F90
index 5f547049e8739c05c617d2bde85b6e101c621265..5d4a83b87eb2436ba6e8f10943313fcff615c912 100644
--- a/src/NST/agrif_user.F90
+++ b/src/NST/agrif_user.F90
@@ -592,9 +592,10 @@
       CALL Agrif_Set_bc(  un_interp_id, (/0,ind1-1/) ) 
       CALL Agrif_Set_bc(  vn_interp_id, (/0,ind1-1/) )
 
-      CALL Agrif_Set_bc(  ts_sponge_id, (/-nn_sponge_len*imaxrho-1,0/) )  ! if west,  rhox=3, nn_sponge_len=2 
-      CALL Agrif_Set_bc(  un_sponge_id, (/-nn_sponge_len*imaxrho-1,0/) )  ! and nbghost=3: 
-      CALL Agrif_Set_bc(  vn_sponge_id, (/-nn_sponge_len*imaxrho-1,0/) )  ! columns 4 to 11
+      !                if west,  rhox=3, nn_sponge_len=2 and and nbghost=3:
+      CALL Agrif_Set_bc(  ts_sponge_id, (/-nn_sponge_len*imaxrho-1,0/) )  ! columns 4-11
+      CALL Agrif_Set_bc(  un_sponge_id, (/-nn_sponge_len*imaxrho-2,0/) )  ! columns 4-12
+      CALL Agrif_Set_bc(  vn_sponge_id, (/-nn_sponge_len*imaxrho-2,0/) )  ! columns 4-12
 
       CALL Agrif_Set_bc(       sshn_id, (/-imaxrho*nn_shift_bar,ind1-1/) )
       CALL Agrif_Set_bc(   sshn_frc_id, (/-imaxrho*nn_shift_bar,ind1-1/) )