diff --git a/src/NST/agrif_all_update.F90 b/src/NST/agrif_all_update.F90
index 8fc617eba676216116c165d70709a00c11f1b8e4..753bee7cd3ae087392792fe42a48addd6127ab73 100644
--- a/src/NST/agrif_all_update.F90
+++ b/src/NST/agrif_all_update.F90
@@ -99,9 +99,13 @@ CONTAINS
            &                                  uu_b(:,:, Kbb_a), 'U',-1._wp, &
            &                                  vv_b(:,:, Kmm_a), 'V',-1._wp, &
            &                                  vv_b(:,:, Kbb_a), 'V',-1._wp, &
+# if ! defined key_RK3
            &                                  ub2_b(:,:),   'U',-1._wp,     &
-           &                                  ub2_i_b(:,:), 'U',-1._wp,     &
+           &                                  un_bf(:,:),   'U',-1._wp,     &
            &                                  vb2_b(:,:),   'V',-1._wp,     &
+           &                                  vn_bf(:,:),   'V',-1._wp,     &
+# endif
+           &                                  ub2_i_b(:,:), 'U',-1._wp,     &
            &                                  vb2_i_b(:,:), 'V',-1._wp      ) 
 
 #if defined key_qco
diff --git a/src/NST/agrif_oce_interp.F90 b/src/NST/agrif_oce_interp.F90
index b7ff728cbdd9a2d8e7ab963d657974bfd9db3c8a..7d25ea55436f84ebe8c2b190d28aca05d0f0d259 100644
--- a/src/NST/agrif_oce_interp.F90
+++ b/src/NST/agrif_oce_interp.F90
@@ -28,7 +28,6 @@ MODULE agrif_oce_interp
    USE zdf_oce
    USE agrif_oce
    USE phycst
-!!!   USE dynspg_ts, ONLY: un_adv, vn_adv
    !
    USE in_out_manager
    USE agrif_oce_sponge
@@ -1441,10 +1440,11 @@ CONTAINS
       !!----------------------------------------------------------------------  
       IF( before ) THEN
 !         IF ( ln_bt_fw ) THEN
+# if defined key_RK3
+            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2)
+# else
             ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2)
-!         ELSE
-!            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2)
-!         ENDIF
+# endif
       ELSE
          zrhot = Agrif_rhot()
          ! Time indexes bounds for integration
@@ -1473,12 +1473,13 @@ CONTAINS
       REAL(wp) :: zrhoy
       !!----------------------------------------------------------------------  
       IF( before ) THEN
-!         IF ( ln_bt_fw ) THEN
+# if defined key_RK3
+            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2) &
+                                * umask(i1:i2,j1:j2,1)
+# else
             ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2) &
                                 * umask(i1:i2,j1:j2,1)
-!         ELSE
-!            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2)
-!         ENDIF
+# endif
       ELSE
          zrhoy = Agrif_Rhoy()
          !
@@ -1508,12 +1509,21 @@ CONTAINS
          jmin = MAX(j1, 2) ; jmax = MIN(j2, jpj-1)
          DO ji=imin,imax
             DO jj=jmin,jmax
+# if defined key_RK3
+               ptab(ji,jj) = 0.25_wp *(vmask(ji,jj  ,1)                        & 
+                           &       * ( vn_adv(ji+1,jj  )*e1v(ji+1,jj  )        & 
+                           &          -vn_adv(ji-1,jj  )*e1v(ji-1,jj  ) )      &
+                           &          -vmask(ji,jj-1,1)                        & 
+                           &       * ( vn_adv(ji+1,jj-1)*e1v(ji+1,jj-1)        &
+                           &          -vn_adv(ji-1,jj-1)*e1v(ji-1,jj-1) ) )      
+# else
                ptab(ji,jj) = 0.25_wp *(vmask(ji,jj  ,1)                        & 
                            &       * ( vb2_b(ji+1,jj  )*e1v(ji+1,jj  )         & 
                            &          -vb2_b(ji-1,jj  )*e1v(ji-1,jj  ) )       &
                            &          -vmask(ji,jj-1,1)                        & 
                            &       * ( vb2_b(ji+1,jj-1)*e1v(ji+1,jj-1)         &
                            &          -vb2_b(ji-1,jj-1)*e1v(ji-1,jj-1) ) )      
+# endif
             END DO
          END DO 
       ELSE
@@ -1549,11 +1559,11 @@ CONTAINS
       !!----------------------------------------------------------------------  
       !
       IF( before ) THEN
-!         IF ( ln_bt_fw ) THEN
+# if defined key_RK3
+            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2)
+# else
             ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2)
-!         ELSE
-!            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2)
-!         ENDIF
+# endif
       ELSE      
          zrhot = Agrif_rhot()
          ! Time indexes bounds for integration
@@ -1583,12 +1593,13 @@ CONTAINS
       REAL(wp) :: zrhox
       !!----------------------------------------------------------------------  
       IF( before ) THEN
-!         IF ( ln_bt_fw ) THEN
+# if defined key_RK3
+            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2) &
+                                * vmask(i1:i2,j1:j2,1)
+# else
             ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2) &
                                 * vmask(i1:i2,j1:j2,1)
-!         ELSE
-!            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2)
-!         ENDIF
+# endif
       ELSE
          zrhox = Agrif_Rhox()
          !
@@ -1618,12 +1629,21 @@ CONTAINS
          jmin = MAX(j1, 2) ; jmax = MIN(j2, jpj-1)
          DO ji=imin,imax
             DO jj=jmin,jmax
+# if defined key_RK3
+               ptab(ji,jj) = 0.25_wp *(umask(ji  ,jj,1)                      & 
+                           &       * ( un_adv(ji  ,jj+1)*e2u(ji  ,jj+1)      & 
+                           &          -un_adv(ji  ,jj-1)*e2u(ji  ,jj-1) )    &
+                           &          -umask(ji-1,jj,1)                      & 
+                           &       * ( un_adv(ji-1,jj+1)*e2u(ji-1,jj+1)      &
+                           &          -un_adv(ji-1,jj-1)*e2u(ji-1,jj-1) ) )   
+# else
                ptab(ji,jj) = 0.25_wp *(umask(ji  ,jj,1)                      & 
                            &       * ( ub2_b(ji  ,jj+1)*e2u(ji  ,jj+1)       & 
                            &          -ub2_b(ji  ,jj-1)*e2u(ji  ,jj-1) )     &
                            &          -umask(ji-1,jj,1)                      & 
                            &       * ( ub2_b(ji-1,jj+1)*e2u(ji-1,jj+1)       &
                            &          -ub2_b(ji-1,jj-1)*e2u(ji-1,jj-1) ) )   
+# endif
             END DO
          END DO 
       ELSE
diff --git a/src/NST/agrif_oce_update.F90 b/src/NST/agrif_oce_update.F90
index 9a96064d779324aa2f12c2f5591beaf29da063f4..72fb2eca14f143e5fdcbe8b22978ac1ece46c82a 100644
--- a/src/NST/agrif_oce_update.F90
+++ b/src/NST/agrif_oce_update.F90
@@ -96,22 +96,22 @@ CONTAINS
       CALL Agrif_Update_Variable(vnb_update_id,locupdate1=(/1+nn_shift_bar,-2/),locupdate2=(/  nn_shift_bar,-2/),procname = updateV2d)  
 # endif
       ! 
-#if ! defined key_RK3
       IF ( ln_dynspg_ts .AND. ln_bt_fw ) THEN
          ! Update time integrated transports
+#  if ! defined key_RK3
 #  if ! defined DECAL_FEEDBACK_2D
          CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/  nn_shift_bar,-2/),locupdate2=(/  nn_shift_bar,-2/),procname = updateub2b)
          CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/  nn_shift_bar,-2/),locupdate2=(/  nn_shift_bar,-2/),procname = updatevb2b)
 #  else
          CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/  nn_shift_bar,-2/),locupdate2=(/1+nn_shift_bar,-2/),procname = updateub2b)
          CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/1+nn_shift_bar,-2/),locupdate2=(/  nn_shift_bar,-2/),procname = updatevb2b)
+#  endif
 #  endif
          IF (lk_agrif_fstep) THEN
             CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/  nn_shift_bar+nn_dist_par_bc-1,-2/),locupdate2=(/  nn_shift_bar+nn_dist_par_bc  ,-2/),procname = updateumsk)
             CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/  nn_shift_bar+nn_dist_par_bc  ,-2/),locupdate2=(/  nn_shift_bar+nn_dist_par_bc-1,-2/),procname = updatevmsk)
          ENDIF
       END IF
-#endif
 
 # if ! defined DECAL_FEEDBACK
       CALL Agrif_Update_Variable(un_update_id,procname = updateU)
@@ -989,7 +989,7 @@ CONTAINS
       !
    END SUBROUTINE updatevmsk
 
-
+# if ! defined key_RK3
    SUBROUTINE updateub2b( tabres, i1, i2, j1, j2, before )
       !!----------------------------------------------------------------------
       !!                      *** ROUTINE updateub2b ***
@@ -1025,6 +1025,7 @@ CONTAINS
       ENDIF
       !
    END SUBROUTINE updateub2b
+# endif
 
    SUBROUTINE reflux_sshu( tabres, i1, i2, j1, j2, before, nb, ndir )
       !!---------------------------------------------
@@ -1053,7 +1054,11 @@ CONTAINS
          !
          IF (western_side) THEN
             DO jj=j1,j2
+# if defined key_RK3
+               zcor = rn_Dt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (un_adv(i1,jj)-tabres(i1,jj)) 
+# else
                zcor = rn_Dt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 
+# endif
                ssh(i1  ,jj,Kmm_a) = ssh(i1  ,jj,Kmm_a) + zcor
 #if ! defined key_RK3
                IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1  ,jj,Kbb_a) = ssh(i1  ,jj,Kbb_a) + rn_atfp * zcor
@@ -1062,7 +1067,11 @@ CONTAINS
          ENDIF
          IF (eastern_side) THEN
             DO jj=j1,j2
+# if defined key_RK3
+               zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (un_adv(i2,jj)-tabres(i2,jj))
+# else
                zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj))
+# endif
                ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor
 #if ! defined key_RK3
                IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + rn_atfp * zcor
@@ -1074,6 +1083,7 @@ CONTAINS
       !
    END SUBROUTINE reflux_sshu
 
+# if ! defined key_RK3
    SUBROUTINE updatevb2b( tabres, i1, i2, j1, j2, before )
       !!----------------------------------------------------------------------
       !!                      *** ROUTINE updatevb2b ***
@@ -1109,6 +1119,7 @@ CONTAINS
       ENDIF
       !
    END SUBROUTINE updatevb2b
+# endif
 
    SUBROUTINE reflux_sshv( tabres, i1, i2, j1, j2, before, nb, ndir )
       !!---------------------------------------------
@@ -1137,7 +1148,11 @@ CONTAINS
          !
          IF (southern_side) THEN
             DO ji=i1,i2
+# if defined key_RK3
+               zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vn_adv(ji,j1)-tabres(ji,j1))
+# else
                zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1))
+# endif
                ssh(ji,j1  ,Kmm_a) = ssh(ji,j1  ,Kmm_a) + zcor
 #if ! defined key_RK3
                IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1  ,Kbb_a) = ssh(ji,j1,Kbb_a) + rn_atfp * zcor
@@ -1146,7 +1161,11 @@ CONTAINS
          ENDIF
          IF (northern_side) THEN               
             DO ji=i1,i2
+# if defined key_RK3
+               zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vn_adv(ji,j2)-tabres(ji,j2))
+# else
                zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2))
+# endif
                ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor
 #if ! defined key_RK3
                IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + rn_atfp * zcor
diff --git a/src/NST/agrif_user.F90 b/src/NST/agrif_user.F90
index 34be8e3b079e42a68d7456b85847e09547bab293..2bdc85c5dd683eb011b0ce1e7e0cba9272e7a8a1 100644
--- a/src/NST/agrif_user.F90
+++ b/src/NST/agrif_user.F90
@@ -414,29 +414,17 @@
       hbdy(:,:) = 0._wp
       ssh(:,:,Krhs_a) = 0._wp
 
-      IF ( ln_dynspg_ts ) THEN
-         Agrif_UseSpecialValue = ln_spc_dyn
-         use_sign_north = .TRUE.
-         sign_north = -1.
-         CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b)   ! must be called before unb_id to define ubdy
-         CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b)   ! must be called before vnb_id to define vbdy
-         CALL Agrif_Bc_variable( unb_interp_id,calledweight=1.,procname=interpunb )
-         CALL Agrif_Bc_variable( vnb_interp_id,calledweight=1.,procname=interpvnb )
-         use_sign_north = .FALSE.
-         ubdy(:,:) = 0._wp
-         vbdy(:,:) = 0._wp
-      ELSEIF ( ln_dynspg_EXP ) THEN 
-         Agrif_UseSpecialValue = ln_spc_dyn
-         use_sign_north = .TRUE.
-         sign_north = -1.
-         ubdy(:,:) = 0._wp
-         vbdy(:,:) = 0._wp
-         CALL Agrif_Bc_variable( unb_interp_id,calledweight=1.,procname=interpunb )
-         CALL Agrif_Bc_variable( vnb_interp_id,calledweight=1.,procname=interpvnb )
-         use_sign_north = .FALSE.
-         ubdy(:,:) = 0._wp
-         vbdy(:,:) = 0._wp
-      ENDIF
+      Agrif_UseSpecialValue = ln_spc_dyn
+      use_sign_north = .TRUE.
+      sign_north = -1.
+      ubdy(:,:) = 0._wp
+      vbdy(:,:) = 0._wp
+      CALL Agrif_Bc_variable( unb_interp_id,calledweight=1.,procname=interpunb )
+      CALL Agrif_Bc_variable( vnb_interp_id,calledweight=1.,procname=interpvnb )
+      use_sign_north = .FALSE.
+      ubdy(:,:) = 0._wp
+      vbdy(:,:) = 0._wp
+
       Agrif_UseSpecialValue = .FALSE. 
       l_vremap              = .FALSE.
 
diff --git a/src/OCE/DYN/dynspg_ts.F90 b/src/OCE/DYN/dynspg_ts.F90
index 670277d5163a9cc8a37d4ba41e804c5e51dfdd1a..83b2d99cac15b0fec655681371eb81ca929b9064 100644
--- a/src/OCE/DYN/dynspg_ts.F90
+++ b/src/OCE/DYN/dynspg_ts.F90
@@ -69,8 +69,6 @@ MODULE dynspg_ts
    PUBLIC dyn_spg_ts_init   !    -    - dyn_spg_init
    PUBLIC dyn_drg_init      ! called by stp2d
 
-   !! Time filtered arrays at baroclinic time step:
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv   !: Advection vel. at "now" barocl. step
    !
    INTEGER, SAVE :: icycle      ! Number of barotropic sub-steps for each internal step nn_e <= 2.5 nn_e
    REAL(wp),SAVE :: rDt_e       ! Barotropic time step
@@ -103,7 +101,7 @@ CONTAINS
       !!----------------------------------------------------------------------
       !!                  ***  routine dyn_spg_ts_alloc  ***
       !!----------------------------------------------------------------------
-      INTEGER :: ierr(3)
+      INTEGER :: ierr(2)
       !!----------------------------------------------------------------------
       ierr(:) = 0
       !
@@ -111,7 +109,6 @@ CONTAINS
       IF( ln_dynvor_een .OR. ln_dynvor_eeT )   &
          &     ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , ftsw(jpi,jpj) , ftse(jpi,jpj), STAT=ierr(2)   )
          !
-      ALLOCATE( un_adv(jpi,jpj), vn_adv(jpi,jpj)                    , STAT=ierr(3) )
       !
       dyn_spg_ts_alloc = MAXVAL( ierr(:) )
       !
@@ -929,30 +926,29 @@ CONTAINS
 
       !
 #if defined key_agrif
-# if defined key_RK3
-      ! advective transport from N to N+1 (i.e. Kbb to Kaa) 
-      ub2_b(:,:) = un_adv(:,:)      ! Save integrated transport for AGRIF
-      vb2_b(:,:) = vn_adv(:,:)
-# endif
       !
       ! Save time integrated fluxes during child grid integration
       ! (used to update coarse grid transports at next time step)
       !
-      IF( .NOT.Agrif_Root() .AND. ln_bt_fw .AND. ln_agrif_2way ) THEN
+      IF( .NOT.Agrif_Root() .AND. ln_agrif_2way ) THEN
          IF( Agrif_NbStepint() == 0 ) THEN
             ub2_i_b(:,:) = 0._wp
             vb2_i_b(:,:) = 0._wp
          END IF
          !
          za1 = 1._wp / REAL(Agrif_rhot(), wp)
+# if defined key_RK3
+         ub2_i_b(:,:) = ub2_i_b(:,:) + za1 * un_adv(:,:)
+         vb2_i_b(:,:) = vb2_i_b(:,:) + za1 * vn_adv(:,:)
+# else
          ub2_i_b(:,:) = ub2_i_b(:,:) + za1 * ub2_b(:,:)
          vb2_i_b(:,:) = vb2_i_b(:,:) + za1 * vb2_b(:,:)
+
+# endif
       ENDIF
 #endif
-#if ! defined key_RK3
-      !                                   !* MLF: write time-spliting arrays in the restart
-      IF( lrst_oce .AND.ln_bt_fw )   CALL ts_rst_MLF( kt, 'WRITE' )
-#endif
+      !                                   !: write time-spliting arrays in the restart
+      IF( lrst_oce )   CALL ts_rst( kt, 'WRITE' )
       !
       IF( ln_wd_il )   DEALLOCATE( zcpx, zcpy )
       IF( ln_wd_dl )   DEALLOCATE( ztwdmask, zuwdmask, zvwdmask, zuwdav2, zvwdav2 )
@@ -1041,9 +1037,9 @@ CONTAINS
    END SUBROUTINE ts_wgt
 
 
-   SUBROUTINE ts_rst_MLF( kt, cdrw )
+   SUBROUTINE ts_rst( kt, cdrw )
       !!---------------------------------------------------------------------
-      !!                   ***  ROUTINE ts_rst_MLF  ***
+      !!                   ***  ROUTINE ts_rst  ***
       !!
       !! ** Purpose : Read or write time-splitting arrays in restart file
       !!----------------------------------------------------------------------
@@ -1053,11 +1049,15 @@ CONTAINS
       !
       IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise 
          !                                   ! ---------------
-         IF( ln_rstart .AND. ln_bt_fw .AND. .NOT.l_1st_euler ) THEN    !* Read the restart file
-            CALL iom_get( numror, jpdom_auto, 'ub2_b'  , ub2_b  (:,:), cd_type = 'U', psgn = -1._wp )   
-            CALL iom_get( numror, jpdom_auto, 'vb2_b'  , vb2_b  (:,:), cd_type = 'V', psgn = -1._wp ) 
-            CALL iom_get( numror, jpdom_auto, 'un_bf'  , un_bf  (:,:), cd_type = 'U', psgn = -1._wp )   
-            CALL iom_get( numror, jpdom_auto, 'vn_bf'  , vn_bf  (:,:), cd_type = 'V', psgn = -1._wp ) 
+         IF( ln_rstart .AND. .NOT.l_1st_euler ) THEN    !* Read the restart file
+# if ! defined key_RK3
+            IF ( ln_bt_fw ) THEN
+               CALL iom_get( numror, jpdom_auto, 'ub2_b'  , ub2_b  (:,:), cd_type = 'U', psgn = -1._wp )   
+               CALL iom_get( numror, jpdom_auto, 'vb2_b'  , vb2_b  (:,:), cd_type = 'V', psgn = -1._wp ) 
+               CALL iom_get( numror, jpdom_auto, 'un_bf'  , un_bf  (:,:), cd_type = 'U', psgn = -1._wp )   
+               CALL iom_get( numror, jpdom_auto, 'vn_bf'  , vn_bf  (:,:), cd_type = 'V', psgn = -1._wp ) 
+            ENDIF
+# endif
             IF( .NOT.ln_bt_av ) THEN
                CALL iom_get( numror, jpdom_auto, 'sshbb_e'  , sshbb_e(:,:), cd_type = 'T', psgn =  1._wp )   
                CALL iom_get( numror, jpdom_auto, 'ubb_e'    ,   ubb_e(:,:), cd_type = 'U', psgn = -1._wp )   
@@ -1074,15 +1074,21 @@ CONTAINS
             ELSE
                ub2_i_b(:,:) = 0._wp   ;   vb2_i_b(:,:) = 0._wp   ! used in the 1st update of agrif
             ENDIF
+# if defined key_RK3
+            CALL iom_get( numror, jpdom_auto, 'un_adv'      ,  un_adv(:,:), cd_type = 'U', psgn = -1._wp )   
+            CALL iom_get( numror, jpdom_auto, 'vn_adv'      ,  vn_adv(:,:), cd_type = 'V', psgn = -1._wp )
+# endif
 #endif
          ELSE
             !                      !* Start from rest or use RK3 time-step
             IF(lwp) WRITE(numout,*)
             IF(lwp) WRITE(numout,*) '   ==>>>   start from rest: set barotropic values to 0'
+# if ! defined key_RK3
             ub2_b  (:,:) = 0._wp   ;   vb2_b  (:,:) = 0._wp   ! used in the 1st interpol of agrif
-            un_adv (:,:) = 0._wp   ;   vn_adv (:,:) = 0._wp   ! used in the 1st interpol of agrif
             un_bf  (:,:) = 0._wp   ;   vn_bf  (:,:) = 0._wp   ! used in the 1st update   of agrif
-
+#else
+            un_adv (:,:) = 0._wp   ;   vn_adv (:,:) = 0._wp   ! used in the 1st interpol of agrif
+#endif
 #if defined key_agrif
             ub2_i_b(:,:) = 0._wp   ;   vb2_i_b(:,:) = 0._wp   ! used in the 1st update of agrif
 #endif
@@ -1090,11 +1096,15 @@ CONTAINS
          !
       ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file
          !                                   ! -------------------
-         IF(lwp) WRITE(numout,*) '---- ts_rst_MLF ----'
-         CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:) )
-         CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:) )
-         CALL iom_rstput( kt, nitrst, numrow, 'un_bf'   , un_bf  (:,:) )
-         CALL iom_rstput( kt, nitrst, numrow, 'vn_bf'   , vn_bf  (:,:) )
+         IF(lwp) WRITE(numout,*) '---- ts_rst ----'
+# if ! defined key_RK3
+         IF ( ln_bt_fw ) THEN
+            CALL iom_rstput( kt, nitrst, numrow, 'ub2_b'   , ub2_b  (:,:) )
+            CALL iom_rstput( kt, nitrst, numrow, 'vb2_b'   , vb2_b  (:,:) )
+            CALL iom_rstput( kt, nitrst, numrow, 'un_bf'   , un_bf  (:,:) )
+            CALL iom_rstput( kt, nitrst, numrow, 'vn_bf'   , vn_bf  (:,:) )
+         ENDIF
+# endif
          !
          IF (.NOT.ln_bt_av) THEN
             CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e'  , sshbb_e(:,:) ) 
@@ -1110,10 +1120,14 @@ CONTAINS
             CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b'  , ub2_i_b(:,:) )
             CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b'  , vb2_i_b(:,:) )
          ENDIF
+# if defined key_RK3
+         CALL iom_rstput( kt, nitrst, numrow, 'un_adv'      ,  un_adv(:,:) )
+         CALL iom_rstput( kt, nitrst, numrow, 'vn_adv'      ,  vn_adv(:,:) )
+# endif
 #endif
       ENDIF
       !
-   END SUBROUTINE ts_rst_MLF
+   END SUBROUTINE ts_rst
 
 
    SUBROUTINE dyn_spg_ts_init
@@ -1160,11 +1174,16 @@ CONTAINS
          IF(lwp) WRITE(numout,*) '     ln_bt_av =.false. => No time averaging of barotropic variables '
       ENDIF
       !
+# if !  defined key_RK3
       IF(ln_bt_fw) THEN
          IF(lwp) WRITE(numout,*) '     ln_bt_fw=.true.  => Forward integration of barotropic variables '
       ELSE
          IF(lwp) WRITE(numout,*) '     ln_bt_fw =.false.=> Centred integration of barotropic variables '
       ENDIF
+# else
+      ! Enforce ln_bt_fw = T with RK3
+      ln_bt_fw = .true.
+# endif
       !
 #if defined key_agrif
       ! Restrict the use of Agrif to the forward case only
@@ -1199,11 +1218,8 @@ CONTAINS
       !                             ! Allocate time-splitting arrays
       IF( dyn_spg_ts_alloc() /= 0    )   CALL ctl_stop('STOP', 'dyn_spg_init: failed to allocate dynspg_ts  arrays' )
       !
-#if ! defined key_RK3
-      !                      !* MLF: restart/initialise
-      !
-      CALL ts_rst_MLF( nit000, 'READ' )
-#endif
+      !                      !: restart/initialise
+      CALL ts_rst( nit000, 'READ' )
       !
    END SUBROUTINE dyn_spg_ts_init
 
diff --git a/src/OCE/oce.F90 b/src/OCE/oce.F90
index 8f5e2d451341c1dc9d4fe6951453db2dfd782f95..c180833bbab0079b9986360001d11f9ddbbd5e98 100644
--- a/src/OCE/oce.F90
+++ b/src/OCE/oce.F90
@@ -45,10 +45,13 @@ MODULE oce
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hv_e   !: external v-depth
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hur_e  !: inverse of u-depth
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hvr_e  !: inverse of v-depth
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv, vn_adv                    !: Advective barotropic fluxes 
+#if ! defined key_RK3
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_b  , vb2_b           !: Half step fluxes (ln_bt_fw=T)
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_bf  , vn_bf           !: Asselin filtered half step fluxes (ln_bt_fw=T)
+#endif
 #if defined key_agrif
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: Half step time integrated fluxes 
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: agrif time integrated fluxes 
 #endif
 
    !! interpolated gradient (only used in zps case)
@@ -115,23 +118,18 @@ CONTAINS
       ALLOCATE( ssha_e(jpi,jpj),  sshn_e(jpi,jpj), sshb_e(jpi,jpj), sshbb_e(jpi,jpj), &
          &        ua_e(jpi,jpj),    un_e(jpi,jpj),   ub_e(jpi,jpj),   ubb_e(jpi,jpj), &
          &        va_e(jpi,jpj),    vn_e(jpi,jpj),   vb_e(jpi,jpj),   vbb_e(jpi,jpj), &
-         &        hu_e(jpi,jpj),   hur_e(jpi,jpj),   hv_e(jpi,jpj),   hvr_e(jpi,jpj), STAT=ierr(ii) )
+         &        hu_e(jpi,jpj),   hur_e(jpi,jpj),   hv_e(jpi,jpj),   hvr_e(jpi,jpj), & 
+         &      un_adv(jpi,jpj),  vn_adv(jpi,jpj)                                   , STAT=ierr(ii) )
          !
-#if defined key_RK3
-# if defined key_agrif
-      ii = ii+1                             ! RK3+AGRIF: ???
-      ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj)                                      , STAT=ierr(ii) )
-# endif
-#else
+#if ! defined key_RK3
       ii = ii+1                             ! MLF: arrays related to Asselin filter + ???
       ALLOCATE( un_bf(jpi,jpj), vn_bf(jpi,jpj), ub2_b(jpi,jpj), vb2_b(jpi,jpj)      , STAT=ierr(ii) )
 #endif
-
 #if defined key_agrif
       ii = ii+1                             ! AGRIF: ???
       ALLOCATE( ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj)                                  , STAT=ierr(ii) )
 #endif
-         !
+      !
       oce_alloc = MAXVAL( ierr )
       IF( oce_alloc /= 0 )   CALL ctl_stop( 'STOP', 'oce_alloc: failed to allocate arrays' )
       !
diff --git a/src/OCE/stpmlf.F90 b/src/OCE/stpmlf.F90
index 9c59c9e7e098199ba9c01a99e3653d2faf53b1aa..407e38686c29bdcd88ea282ef622f2945d8bb03e 100644
--- a/src/OCE/stpmlf.F90
+++ b/src/OCE/stpmlf.F90
@@ -479,7 +479,6 @@ CONTAINS
       !! ** Action :   puu(Kmm),pvv(Kmm)   updated now horizontal velocity (ln_bt_fw=F)
       !!               puu(Kaa),pvv(Kaa)   after horizontal velocity
       !!----------------------------------------------------------------------
-      USE dynspg_ts, ONLY : un_adv, vn_adv   ! updated Kmm barotropic transport 
       !!
       INTEGER                             , INTENT(in   ) ::   Kmm, Kaa   ! before and after time level indices
       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::   puu, pvv   ! velocities
diff --git a/src/OCE/stprk3.F90 b/src/OCE/stprk3.F90
index 087b8e55d9b26d33654545e77187c9bef0894fa2..5b1ca4f34801596683cde6fd69891b7276d0d332 100644
--- a/src/OCE/stprk3.F90
+++ b/src/OCE/stprk3.F90
@@ -21,7 +21,6 @@ MODULE stprk3
    USE domqco         ! quasi-eulerian coordinate      (dom_qco_r3c routine)
    USE stprk3_stg     ! RK3 stages
    USE stp2d          ! external mode solver
-   USE dynspg_ts, ONLY: un_adv, vn_adv   ! updated Kmm barotropic transport
    USE trd_oce        ! trends: ocean variables
    USE diaptr
    USE ldftra
@@ -311,7 +310,6 @@ CONTAINS
       !! ** Action :   puu(Kmm),pvv(Kmm)   updated now horizontal velocity (ln_bt_fw=F)
       !!               puu(Kaa),pvv(Kaa)   after horizontal velocity
       !!----------------------------------------------------------------------
-      USE dynspg_ts, ONLY : un_adv, vn_adv   ! updated Kmm barotropic transport 
       !!
       INTEGER                             , INTENT(in   ) ::   Kmm, Kaa   ! before and after time level indices
       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::   puu, pvv   ! velocities
diff --git a/src/OCE/stprk3_stg.F90 b/src/OCE/stprk3_stg.F90
index 38e90efd0f779c10d716a730531a7cb88b14963f..b12a1bebbe70608bb1f3c9157138aabd0a364f47 100644
--- a/src/OCE/stprk3_stg.F90
+++ b/src/OCE/stprk3_stg.F90
@@ -19,7 +19,6 @@ MODULE stprk3_stg
    !!----------------------------------------------------------------------
    USE step_oce       ! time stepping used modules
    USE domqco         ! quasi-eulerian coordinate      (dom_qco_r3c routine)
-   USE dynspg_ts, ONLY:   un_adv , vn_adv   ! advective transport from N to N+1
    USE bdydyn         ! ocean open boundary conditions (define bdy_dyn)
    USE lbclnk         ! ocean lateral boundary conditions (or mpp link)
 # if defined key_top