Index: /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90
===================================================================
--- /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90	(revision 8804)
+++ /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90	(revision 8805)
@@ -500,4 +500,7 @@
          DO jj=j1,j2
             DO ji=i1,i2
+               ! Update corrective fluxes:
+               un_bf(ji,jj)  = un_bf(ji,jj) & 
+                &           + tabres(ji,jj) / e2u(ji,jj)  - ub2_b(ji,jj)
                ub2_b(ji,jj) = tabres(ji,jj) / e2u(ji,jj)
             END DO
@@ -531,4 +534,7 @@
          DO jj=j1,j2
             DO ji=i1,i2
+               ! Update corrective fluxes:
+               vn_bf(ji,jj)  = vn_bf(ji,jj) & 
+                &           + tabres(ji,jj) / e1v(ji,jj)  - vb2_b(ji,jj)
                vb2_b(ji,jj) = tabres(ji,jj) / e1v(ji,jj)
             END DO
Index: /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
===================================================================
--- /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90	(revision 8804)
+++ /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90	(revision 8805)
@@ -209,27 +209,23 @@
             ! (used as a now filtered scale factor until the swap)
             ! ----------------------------------------------------
-            IF( ln_dynspg_ts .AND. ln_bt_fw ) THEN    ! No asselin filtering on thicknesses if forward time splitting
-               e3t_b(:,:,1:jpkm1) = e3t_n(:,:,1:jpkm1)
-            ELSE
-               DO jk = 1, jpkm1
-                  e3t_b(:,:,jk) = e3t_n(:,:,jk) + atfp * ( e3t_b(:,:,jk) - 2._wp * e3t_n(:,:,jk) + e3t_a(:,:,jk) )
+            DO jk = 1, jpkm1
+               e3t_b(:,:,jk) = e3t_n(:,:,jk) + atfp * ( e3t_b(:,:,jk) - 2._wp * e3t_n(:,:,jk) + e3t_a(:,:,jk) )
+            END DO
+            ! Add volume filter correction: compatibility with tracer advection scheme
+            ! => time filter + conservation correction (only at the first level)
+            zcoef = atfp * rdt * r1_rau0
+            IF ( .NOT. ln_isf ) THEN   ! if no ice shelf melting
+               e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) &
+                              &                      - rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1)
+            ELSE                     ! if ice shelf melting
+               DO jj = 1, jpj
+                  DO ji = 1, jpi
+                     ikt = mikt(ji,jj)
+                     e3t_b(ji,jj,ikt) = e3t_b(ji,jj,ikt) - zcoef * (  emp_b   (ji,jj) - emp   (ji,jj)  &
+                        &                                           - rnf_b   (ji,jj) + rnf   (ji,jj)  &
+                        &                                           + fwfisf_b(ji,jj) - fwfisf(ji,jj)  ) * tmask(ji,jj,ikt)
+                  END DO
                END DO
-               ! Add volume filter correction: compatibility with tracer advection scheme
-               ! => time filter + conservation correction (only at the first level)
-               zcoef = atfp * rdt * r1_rau0
-               IF ( .NOT. ln_isf ) THEN   ! if no ice shelf melting
-                  e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) &
-                                 &                      - rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1)
-               ELSE                     ! if ice shelf melting
-                  DO jj = 1, jpj
-                     DO ji = 1, jpi
-                        ikt = mikt(ji,jj)
-                        e3t_b(ji,jj,ikt) = e3t_b(ji,jj,ikt) - zcoef * (  emp_b   (ji,jj) - emp   (ji,jj)  &
-                           &                                           - rnf_b   (ji,jj) + rnf   (ji,jj)  &
-                           &                                           + fwfisf_b(ji,jj) - fwfisf(ji,jj)  ) * tmask(ji,jj,ikt)
-                     END DO
-                  END DO
-               END IF
-            ENDIF
+            END IF
             !
             IF( ln_dynadv_vec ) THEN      ! Asselin filter applied on velocity
Index: /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
===================================================================
--- /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90	(revision 8804)
+++ /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90	(revision 8805)
@@ -1024,7 +1024,13 @@
          un_adv(:,:) = zwx(:,:) * r1_hu_n(:,:)
          vn_adv(:,:) = zwy(:,:) * r1_hv_n(:,:)
+         !
+         un_bf(:,:) = 0._wp
+         vn_bf(:,:) = 0._wp 
       ELSE
-         un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) ) * r1_hu_n(:,:)
-         vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) ) * r1_hv_n(:,:)
+         un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) * r1_hu_n(:,:)
+         vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) * r1_hv_n(:,:)
+         ! Update corrective fluxes for next time step:
+         un_bf(:,:)  = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:))
+         vn_bf(:,:)  = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:))
       END IF
 
@@ -1200,4 +1206,6 @@
          CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:) )   
          CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:) ) 
+         CALL iom_get( numror, jpdom_autoglo, 'un_bf'  , un_bf  (:,:) )   
+         CALL iom_get( numror, jpdom_autoglo, 'vn_bf'  , vn_bf  (:,:) ) 
          IF( .NOT.ln_bt_av ) THEN
             CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:) )   
@@ -1219,4 +1227,6 @@
          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 (.NOT.ln_bt_av) THEN
Index: /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
===================================================================
--- /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 8804)
+++ /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 8805)
@@ -252,6 +252,5 @@
       ENDIF
       !              !==  Euler time-stepping: no filter, just swap  ==!
-      IF(  ( neuler == 0 .AND. kt == nit000 ) .OR.    &
-         & ( ln_bt_fw    .AND. ln_dynspg_ts )      ) THEN 
+      IF( neuler == 0 .AND. kt == nit000 ) THEN
          sshb(:,:) = sshn(:,:)                              ! before <-- now
          sshn(:,:) = ssha(:,:)                              ! now    <-- after  (before already = now)
Index: /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/oce.F90
===================================================================
--- /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/oce.F90	(revision 8804)
+++ /branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/oce.F90	(revision 8805)
@@ -45,4 +45,5 @@
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hvr_e  !: inverse of v-depth
    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 filter corrective fluxes (ln_bt_fw=T)
 #if defined key_agrif
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: Half step time integrated fluxes 
@@ -119,5 +120,5 @@
          &        hu_e(jpi,jpj),   hur_e(jpi,jpj),   hv_e(jpi,jpj),   hvr_e(jpi,jpj), STAT=ierr(5) )
          !
-      ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj)                                      , STAT=ierr(6) )
+      ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), un_bf(jpi,jpj), vn_bf(jpi,jpj)      , STAT=ierr(6) )
 #if defined key_agrif
       ALLOCATE( ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj)                                  , STAT=ierr(7) )
