diff --git a/src/TOP/AGE/trcsms_age.F90 b/src/TOP/AGE/trcsms_age.F90
index dec67f35f3115a076f51163c2fe77e798ea4e14c..583e551aef929e2920cfee1e0d86078c9dbe3e00 100644
--- a/src/TOP/AGE/trcsms_age.F90
+++ b/src/TOP/AGE/trcsms_age.F90
@@ -54,12 +54,7 @@ CONTAINS
       IF(lwp) WRITE(numout,*)
       IF(lwp) WRITE(numout,*) ' trc_sms_age:  AGE model'
       IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
-
-      IF( l_1st_euler .OR. ln_top_euler ) THEN
-         tr(:,:,:,jp_age,Kbb) = tr(:,:,:,jp_age,Kmm)
-      ENDIF
-
-
+      !
       DO jk = 1, nla_age
          tr(:,:,jk,jp_age,Krhs) = rn_age_kill_rate * tr(:,:,jk,jp_age,Kbb)
       END DO
diff --git a/src/TOP/PISCES/P4Z/p4zsms.F90 b/src/TOP/PISCES/P4Z/p4zsms.F90
index 664d1206425e423a46c6d4909bea415b14e8ffdd..32a3c6fbac65ca672e5782a096564e4f45633bd3 100644
--- a/src/TOP/PISCES/P4Z/p4zsms.F90
+++ b/src/TOP/PISCES/P4Z/p4zsms.F90
@@ -104,13 +104,7 @@ CONTAINS
          IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2
          IF(lwp) WRITE(numout,*)
       ENDIF
-
-      IF( l_1st_euler .OR. ln_top_euler ) THEN
-         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter
-            tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm)
-         END DO
-      ENDIF
-
+      !
       DO jn = jp_pcs0, jp_pcs1              !   Store the tracer concentrations before entering PISCES
          ztrbbio(:,:,:,jn) = tr(:,:,:,jn,Kbb)
       END DO
diff --git a/src/TOP/trcrst.F90 b/src/TOP/trcrst.F90
index 40a0d964d15828a5dea7a47807f60b86dd57e348..a62402184840376dfb0cebe757bb1c85c3de2ceb 100644
--- a/src/TOP/trcrst.F90
+++ b/src/TOP/trcrst.F90
@@ -133,9 +133,14 @@ CONTAINS
          CALL iom_get( numrtr, jpdom_auto, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) )
       END DO
 
-      DO jn = 1, jptra
-         CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) )
-      END DO
+      IF( l_1st_euler .OR. ln_top_euler ) THEN
+         IF(lwp) WRITE(numout,*) '               + adjustment for forward Euler time stepping'
+         tr(:,:,:,1:jptra,Kbb) = tr(:,:,:,1:jptra,Kmm)
+      ELSE
+         DO jn = 1, jptra
+            CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) )
+         END DO
+      END IF
       !
       IF(.NOT.lrxios) CALL iom_delay_rst( 'READ', 'TOP', numrtr )   ! read only TOP delayed global communication variables
    END SUBROUTINE trc_rst_read
diff --git a/src/TOP/trcstp.F90 b/src/TOP/trcstp.F90
index 124269c63a1107824dc2ff42089ed503bd7bdb4c..5d448290a0d187c226a88d3556c96cc77e9e68b4 100644
--- a/src/TOP/trcstp.F90
+++ b/src/TOP/trcstp.F90
@@ -115,7 +115,6 @@ CONTAINS
          IF(lrxios) CALL iom_context_finalize(      cr_toprst_cxt          )
          IF(lwm) CALL FLUSH( numont )                     ! flush namelist output
       ENDIF
-      IF( lrst_trc )            CALL trc_rst_wri  ( kt, Kmm, Kaa, Kbb  )       ! write tracer restart file
       IF( lk_trdmxl_trc  )      CALL trd_mxl_trc  ( kt,      Kaa       )       ! trends: Mixed-layer
       !
       IF( ln_top_euler ) THEN 
@@ -125,6 +124,8 @@ CONTAINS
          tr(:,:,:,:,Kmm) = tr(:,:,:,:,Kaa)
       ENDIF
       !
+      IF( lrst_trc ) CALL trc_rst_wri( kt, Kmm, Kaa, Kbb )   ! write tracer restart file
+      !
       IF (ll_trcstat) THEN
          ztrai = 0._wp                                                   !  content of all tracers
          DO jn = 1, jptra