diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index b8da82a4da9a0579696d845aa61984fdf03bfb6e..72180c0122ba2e7c6f55df8655f5cf331c552f27 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -22,6 +22,7 @@
 !     P. Wautelet 04/02/2016: bug with DELIM='NONE' and GCC 5.2/5.3
 !     D.Gazen   : avril 2016 change error message 
 !     P. Wautelet : may 2016: use NetCDF Fortran module
+!     P. Wautelet : July 2016: added type OUTBAK
 !
 MODULE MODE_IO_ll
 
@@ -59,6 +60,13 @@ MODULE MODE_IO_ll
   PUBLIC  io_file,io_rank
   !JUANZ
 
+  !Structure describing the characteristics of an output or a backup
+  TYPE TOUTBAK
+    INTEGER :: NSTEP      !Timestep number
+    REAL    :: XTIME      !Time from start of the segment (in seconds and rounded to a timestep)
+  END TYPE TOUTBAK
+  PUBLIC TOUTBAK
+
 CONTAINS 
 
   FUNCTION IONEWFLU()
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 2bdc04b316d42806098e466c0a8c08bdff41f60f..0127a33f967056f3c327cd3fe738ac612ccb1c71 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -492,7 +492,8 @@ XTNUDGING = 21600.
 !*      9.    SET DEFAULT VALUES FOR MODD_FMOUT and MODD_OUT_n :
 !             ------------------------------------------------
 !
-IF (KMI == 1) XBAK_TIME (:,:) = XNEGUNDEF
+!XBAK_TIME is not yet allocated
+!IF (KMI == 1) XBAK_TIME (:,:) = XNEGUNDEF
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 5f3deb5f66bdf70626546ec4c466f29ef649dcbd..141b5449a4c321dc6f1652509af1a5b3f76a5ee8 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -1531,7 +1531,7 @@ CALL SET_GRID(KMI,HINIFILE,HLUOUT,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll,         &
               XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP,                           &
               XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT,                    &
               ZJ,                                                        &
-              TDTMOD,TDTCUR,NSTOP,NOUT_TIMES,NOUT_NUMB)
+              TDTMOD,TDTCUR,NSTOP,NOUT_NUMB,TOUTBAKN)
 !
 CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
 !
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index 15bc6f897429e13f083d68ae310371ab83d10562..9777966f990819a7fc81675221e606dc300fd6ae 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -740,7 +740,7 @@ CALL SET_GRID(KMI,HINIFILE,HLUOUT,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll,         &
               XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP,                           &
               XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT,                    &
               ZJ,                                                        &
-              TDTMOD,TDTCUR,NSTOP,NOUT_TIMES,NOUT_NUMB)
+              TDTMOD,TDTCUR,NSTOP,NOUT_NUMB,TOUTBAKN)
 !
 CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
 !
diff --git a/src/MNH/modd_fmout.f90 b/src/MNH/modd_fmout.f90
index 03d0a6f3251b0e20ec897244e409dac07516a8d2..ee2782a1b44c1f3990dac4890c88a8a38b020b48 100644
--- a/src/MNH/modd_fmout.f90
+++ b/src/MNH/modd_fmout.f90
@@ -47,7 +47,7 @@ USE MODD_PARAMETERS
 !
 IMPLICIT NONE
 !
-REAL,SAVE, DIMENSION(JPMODELMAX,JPOUTMAX)  ::   XBAK_TIME = XNEGUNDEF 
+REAL,SAVE,ALLOCATABLE,DIMENSION(:,:)  ::   XBAK_TIME 
 ! XBAK_TIME(m,i) array of 
 ! the increments in seconds from the beginning of the segment to the
 ! instant where the i-th fields output on FM-files is realized by model "m"
diff --git a/src/MNH/modd_outn.f90 b/src/MNH/modd_outn.f90
index e24a9848001f29287245e7d0e33950af727b2156..30e11345de2943e8fe0cee9e477df4d4ad1f60b7 100644
--- a/src/MNH/modd_outn.f90
+++ b/src/MNH/modd_outn.f90
@@ -43,43 +43,30 @@
 !
 !
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPOUTMAX
+USE MODE_IO_ll, ONLY:TOUTBAK
 IMPLICIT NONE
 
 TYPE OUT_t
 !
-!JUAN
-  INTEGER, DIMENSION(:), POINTER   :: NOUT_TIMES => NULL() ! list of the values of the temporal
-!JUAN
-               !  index in the temporal model loop where fields outputs on 
-               !  FM-files are realized by model n
   INTEGER             :: NOUT_NUMB ! number of outputs perform by model n
+  TYPE(TOUTBAK),DIMENSION(:),POINTER :: TOUTBAKN=>NULL() ! List of the outputs and backups
 !
 !
 END TYPE OUT_t
 
 TYPE(OUT_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: OUT_MODEL
-LOGICAL    , DIMENSION(JPMODELMAX),         SAVE :: OUT_FIRST_CALL = .TRUE.
 
-INTEGER, DIMENSION(:), POINTER :: NOUT_TIMES=>NULL()
 INTEGER, POINTER :: NOUT_NUMB=>NULL()
+TYPE(TOUTBAK),DIMENSION(:),POINTER :: TOUTBAKN=>NULL()
 
 CONTAINS
 
 SUBROUTINE OUT_GOTO_MODEL(KFROM, KTO)
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
-!JUAN
-IF (OUT_FIRST_CALL(KTO)) THEN
-ALLOCATE (OUT_MODEL(KTO)%NOUT_TIMES(JPOUTMAX))
-OUT_FIRST_CALL(KTO) = .FALSE.
-ENDIF
-!JUAN
-
-! Save current state for allocated arrays
-!
 ! Current model is set to model KTO
-NOUT_TIMES=>OUT_MODEL(KTO)%NOUT_TIMES
 NOUT_NUMB=>OUT_MODEL(KTO)%NOUT_NUMB
+TOUTBAKN=>OUT_MODEL(KTO)%TOUTBAKN
 
 END SUBROUTINE OUT_GOTO_MODEL
 
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 73b44d1748d3a741f34d50f3976ae8d557a433d8..321857cafb13c77b9c3f74ba7fea573c7f635774 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -430,7 +430,6 @@ INTEGER :: INPRAR               ! number of articles predicted  in
 INTEGER :: ININAR               ! number of articles  present in
                                 !  the LFIFM file
 INTEGER :: ITYPE                ! type of file (cpio or not)
-INTEGER :: JOUT                 ! loop index on the output instant list
 INTEGER :: IOUTDAD              ! numero of the OUTPUT FM-file of DAD model
 INTEGER :: JOUTDAD              ! loop index on the output instant list for DAD model
 LOGICAL :: GSTEADY_DMASS        ! conditional call to mass computation
@@ -907,8 +906,7 @@ IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI)
 ZTIME1 = ZTIME2
 !
 YFMFILE='                            '
-DO JOUT = 1,NOUT_NUMB
-  IF (KTCOUNT == NOUT_TIMES(JOUT)) THEN
+IF (KTCOUNT == TOUTBAKN(IOUT+1)%NSTEP) THEN
     IOUT=IOUT+1
     GCLOSE_OUT=.TRUE.
     INPRAR = 22 +2*(4+NRR+NSV)
@@ -924,7 +922,7 @@ DO JOUT = 1,NOUT_NUMB
 !PW: TODO/TOCHECK: est-ce que cela fait la meme chose qu'avant?
       DO JOUTDAD =1,JPOUTMAX
         IF ( XBAK_TIME(NDAD(IMI),JOUTDAD) >=0. .AND.                 &
-             XBAK_TIME(NDAD(IMI),JOUTDAD) <= (XBAK_TIME(IMI,JOUT)+1.E-10) )   &
+             XBAK_TIME(NDAD(IMI),JOUTDAD) <= (TOUTBAKN(IOUT)%XTIME+1.E-10) )   &
                      IOUTDAD=IOUTDAD+1
       END DO
       IF(IOUTDAD>0) THEN
@@ -963,8 +961,6 @@ DO JOUT = 1,NOUT_NUMB
 !
   END IF
 !
-END DO
-!
 CALL SECOND_MNH2(ZTIME2)
 !
 XT_STORE = XT_STORE + ZTIME2 - ZTIME1
@@ -1313,8 +1309,8 @@ IF (CDCONV/='NONE') THEN
   END IF
 END IF
 !
-DO JOUT = 1,NOUT_NUMB
-  IF (KTCOUNT == NOUT_TIMES(JOUT)) THEN
+IF (IOUT>0) THEN
+  IF (KTCOUNT == TOUTBAKN(IOUT)%NSTEP) THEN
     IF (CSURF=='EXTE') THEN
       CALL GOTO_SURFEX(IMI)
       CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
@@ -1323,7 +1319,7 @@ DO JOUT = 1,NOUT_NUMB
       CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
     END IF
   END IF
-END DO
+END IF
 !
 CALL SECOND_MNH2(ZTIME2)
 !
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 11ec3ca57c4db4dc98409bf35d7892550313d2dd..365f91c3d213b4c580557150a6441acb90ae37ac 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -423,10 +423,11 @@ IF (KMI == 1) THEN
   CALL POSNAM(ILUDES,'NAM_NESTING',GFOUND)
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_NESTING)
   CALL POSNAM(ILUDES,'NAM_FMOUT',GFOUND)
-  IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FMOUT)
-!
-  XBAK_TIME(:,:) = XNEGUNDEF
-!
+  IF (GFOUND) THEN
+    IF (.NOT.ALLOCATED(XBAK_TIME)) ALLOCATE(XBAK_TIME(JPMODELMAX,JPOUTMAX))
+    READ(UNIT=ILUDES,NML=NAM_FMOUT)
+    XBAK_TIME(:,:) = XNEGUNDEF
+  END IF
   CALL POSNAM(ILUDES,'NAM_BUDGET',GFOUND)
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BUDGET)
   CALL POSNAM(ILUDES,'NAM_BU_RU',GFOUND)
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 105e3fc1dcabff3d55f7405849e0b7be8d6e1f59..85e131813fa2c7f770a798cb1208f7a459c196b1 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -494,7 +494,12 @@ IF (KMI == 1) THEN
   CALL POSNAM(ILUSEG,'NAM_NESTING',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NESTING)
   CALL POSNAM(ILUSEG,'NAM_FMOUT',GFOUND,ILUOUT)
-  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FMOUT)
+  IF (GFOUND) THEN
+    !Should have been allocated before in READ_DESFM_n 
+    IF (.NOT.ALLOCATED(XBAK_TIME)) ALLOCATE(XBAK_TIME(JPMODELMAX,JPOUTMAX))
+    XBAK_TIME(:,:) = XNEGUNDEF
+    READ(UNIT=ILUSEG,NML=NAM_FMOUT)
+  END IF
   CALL POSNAM(ILUSEG,'NAM_BUDGET',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BUDGET)
   CALL POSNAM(ILUSEG,'NAM_BU_RU',GFOUND,ILUOUT)
diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90
index 95aeaf726f534dfc5ac9dc09592d89b0627bd6fa..4fdf711d02b26f4dc0ef424b3885cc9b71842a64 100644
--- a/src/MNH/set_grid.f90
+++ b/src/MNH/set_grid.f90
@@ -25,9 +25,10 @@ INTERFACE
                           PXHAT,PYHAT,PDXHAT,PDYHAT, PMAP,                    &
                           PZS,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,PZSMT,             &
                           PJ,                                                 &
-                          TPDTMOD,TPDTCUR,KSTOP,KOUT_TIMES,KOUT_NUMB          )
+                          TPDTMOD,TPDTCUR,KSTOP,KOUT_NUMB,TPOUTBAKN           )
 !
 USE MODD_TYPE_DATE
+USE MODE_IO_ll, ONLY:TOUTBAK
 !
 INTEGER,                INTENT(IN)  :: KMI       ! Model index
 CHARACTER (LEN=*),      INTENT(IN)  :: HINIFILE  ! Name of the initial file
@@ -85,12 +86,10 @@ TYPE (DATE_TIME),       INTENT(OUT) :: TPDTMOD   ! date and time of the model
 TYPE (DATE_TIME),       INTENT(OUT) :: TPDTCUR   ! Current date and time
 INTEGER,                INTENT(OUT) :: KSTOP     ! number of time steps for
                                                  ! current segment
-INTEGER, DIMENSION(:), INTENT(OUT)  :: KOUT_TIMES ! list of the values
-               ! of the temporal index in the temporal model loop where fields
-               !  outputs on FM-files are realized
 INTEGER,                INTENT(OUT) :: KOUT_NUMB ! number of outputs
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PJ        ! Jacobian
+TYPE(TOUTBAK),DIMENSION(:),POINTER,INTENT(OUT) :: TPOUTBAKN ! List of outputs and backups
 !
 END SUBROUTINE SET_GRID
 !
@@ -114,7 +113,7 @@ END MODULE MODI_SET_GRID
                           PXHAT,PYHAT,PDXHAT,PDYHAT, PMAP,                    &
                           PZS,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,PZSMT,             &
                           PJ,                                                 &
-                          TPDTMOD,TPDTCUR,KSTOP,KOUT_TIMES,KOUT_NUMB          )
+                          TPDTMOD,TPDTCUR,KSTOP,KOUT_NUMB,TPOUTBAKN           )
 !     #########################################################################
 !
 !!****  *SET_GRID* - routine to set grid variables
@@ -252,7 +251,7 @@ USE MODE_ll
 USE MODI_GATHER_ll  !!!! a mettre dans mode_ll
 !
 USE MODE_FMREAD
-USE MODD_VAR_ll, ONLY : NPROC
+USE MODD_VAR_ll, ONLY : IP,NPROC
 !
 IMPLICIT NONE
 !
@@ -314,12 +313,10 @@ TYPE (DATE_TIME),       INTENT(OUT) :: TPDTMOD   ! date and time of the model
 TYPE (DATE_TIME),       INTENT(OUT) :: TPDTCUR   ! Current date and time
 INTEGER,                INTENT(OUT) :: KSTOP     ! number of time steps for
                                                  ! current segment
-INTEGER, DIMENSION(:), INTENT(OUT)  :: KOUT_TIMES ! list of the values
-               ! of the temporal index in the temporal model loop where fields
-               !  outputs on FM-files are realized
 INTEGER,                INTENT(OUT) :: KOUT_NUMB ! number of outputs
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PJ        ! Jacobian
+TYPE(TOUTBAK),DIMENSION(:),POINTER,INTENT(OUT) :: TPOUTBAKN ! List of outputs and backups
 !
 !*       0.2   declarations of local variables
 !
@@ -507,8 +504,6 @@ IF (CPROGRAM /= 'DIAG  ') TDTSEG = TPDTCUR
 ISUP = 1     ! 1 corresponds to a last timestep
    ! to obtain the prognostic and diagnostic fields all along this timestep
 !
-KOUT_TIMES(:) = NUNDEF
-!
 IF ( KMI == 1) PSEGLEN = PSEGLEN + PTSTEP*ISUP ! needed for the gridnesting case to get
                                                ! the same PSEGLEN for all nested models
 KSTOP = NINT(PSEGLEN/PTSTEP)
@@ -575,19 +570,28 @@ KOUT_NUMB = 0
 DO JOUT = 1,JPOUTMAX
   IF (XBAK_TIME(KMI,JOUT) >= 0.) THEN
       KOUT_NUMB = KOUT_NUMB + 1
-      KOUT_TIMES(KOUT_NUMB) = NINT(XBAK_TIME(KMI,JOUT)/PTSTEP) + 1
+  END IF
+END DO
+ALLOCATE(TPOUTBAKN(KOUT_NUMB))
+IPOS = 0
+DO JOUT = 1,JPOUTMAX
+  IF (XBAK_TIME(KMI,JOUT) >= 0.) THEN
+      IPOS = IPOS + 1
+      TPOUTBAKN(IPOS)%NSTEP = NINT(XBAK_TIME(KMI,JOUT)/PTSTEP) + 1
+      TPOUTBAKN(IPOS)%XTIME = XBAK_TIME(KMI,JOUT)
   END IF
 END DO
 !
+IF (IP==1) THEN
 PRINT *,'-------------------------'
 PRINT *,'Model number:      ',KMI
 PRINT *,'Number of backups: ',KOUT_NUMB
 PRINT *,'Timestep     Time'
 DO JOUT = 1,KOUT_NUMB
-  WRITE(*,'( I9 F12.3 )'  ) KOUT_TIMES(JOUT),XBAK_TIME(KMI,JOUT)
+  WRITE(*,'( I9 F12.3 )'  ) TPOUTBAKN(JOUT)%NSTEP,TPOUTBAKN(JOUT)%XTIME
 END DO
 PRINT *,'-------------------------'
-
+END IF
 !
 !-------------------------------------------------------------------------------
 !