diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index b30e6d7152495833d006232aed90701c02c7c3df..a6882d355b897b1f72c57794df96abed1b43aacd 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -85,87 +85,78 @@
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_VAR_ll
-!
-USE MODD_DYN
+USE MODD_ADV_n
+USE MODD_AIRCRAFT_BALLOON
+USE MODD_BUDGET
 USE MODD_CONF
-USE MODD_GRID, ONLY: XLONORI,XLATORI
-USE MODD_LUNIT
-USE MODD_PARAMETERS
-!
-USE MODD_DIAG_FLAG
-USE MODD_STO_FILE
-!
 USE MODD_CONF_n
+USE MODD_DEEP_CONVECTION_n
+USE MODD_DIAG_FLAG
 USE MODD_DIM_n
+USE MODD_DYN
 USE MODD_DYN_n
-USE MODD_ADV_n
-USE MODD_DEEP_CONVECTION_n
 USE MODD_FIELD_n
+USE MODD_GR_FIELD_n
+USE MODD_GRID,             ONLY: XLONORI,XLATORI
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG
+USE MODD_IO_ll,            ONLY: LIOCDF4,LLFIOUT,NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_SURFEX
 USE MODD_LBC_n
-USE MODD_PARAM_n
+USE MODD_LES
+USE MODD_LES_BUDGET
+USE MODD_LUNIT,            ONLY: TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT_n
+USE MODD_MNH_SURFEX_n
+USE MODD_NESTING,          ONLY: CDAD_NAME
+USE MODD_NSV
+USE MODD_OUT_n
+USE MODD_PARAMETERS
 USE MODD_PARAM_KAFR_n
+USE MODD_PARAM_LIMA,       ONLY: LLIMA_DIAG
+USE MODD_PARAM_MFSHALL_n
+USE MODD_PARAM_n
 USE MODD_PARAM_RAD_n
+USE MODD_PROFILER_n
+USE MODD_RADAR
 USE MODD_RADIATIONS_n
-USE MODD_TURB_n
-USE MODD_PARAM_MFSHALL_n
 USE MODD_REF_n
-USE MODD_LUNIT_n
-USE MODD_OUT_n
-USE MODD_TIME_n
-USE MODD_NESTING, ONLY: CDAD_NAME
-USE MODD_NSV
-USE MODD_AIRCRAFT_BALLOON
+USE MODD_STATION_n
+USE MODD_STO_FILE
 USE MODD_TIME
-USE MODD_GR_FIELD_n
-USE MODD_LES
-USE MODD_LES_BUDGET
-USE MODD_BUDGET
-USE MODD_RADAR
-USE MODD_PARAM_LIMA, ONLY : LLIMA_DIAG
-USE MODD_IO_ll, ONLY: LIOCDF4,LLFIOUT,TFILEDATA,TFILE_SURFEX
-!
-USE MODN_DIAG_BLANK
-!
-USE MODI_PHYS_PARAM_n
-USE MODI_WRITE_LFIFM1_FOR_DIAG
-USE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
-USE MODI_COMPUTE_R00
-USE MODI_WRITE_LFIFMN_FORDIACHRO_n
-USE MODI_AIRCRAFT_BALLOON
-USE MODI_WRITE_AIRCRAFT_BALLOON
+USE MODD_TIME_n
+USE MODD_TURB_n
+USE MODD_VAR_ll
 !
-USE MODE_POS
-USE MODE_TIME
 USE MODE_FM
-USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER
+USE MODE_FMREAD
+USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
 USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
 USE MODE_ll
+USE MODE_MNH_TIMING
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
+USE MODE_POS
+USE MODE_TIME
 !
-USE MODD_AIRCRAFT_BALLOON
-USE MODD_PROFILER_n
-USE MODD_STATION_n
-USE MODE_MNH_TIMING
-USE MODE_FMREAD
-USE MODN_CONFZ
-!
-USE MODI_MNHGET_SURF_PARAM_n
-!
-USE MODI_VERSION
+USE MODI_AIRCRAFT_BALLOON
+USE MODI_COMPUTE_R00
+USE MODI_DIAG_SURF_ATM_N
 USE MODI_INIT_MNH
 USE MODI_MENU_DIACHRO
-USE MODI_WRITE_SURF_ATM_N
-USE MODI_DIAG_SURF_ATM_N
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_PHYS_PARAM_n
+USE MODI_VERSION
+USE MODI_WRITE_AIRCRAFT_BALLOON
 USE MODI_WRITE_DIAG_SURF_ATM_N  
-USE MODD_MNH_SURFEX_n
-!  
-USE MODN_CONF, ONLY : JPHEXT , NHALO
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODI_WRITE_LFIFM1_FOR_DIAG
+USE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
+USE MODI_WRITE_LFIFMN_FORDIACHRO_n
+USE MODI_WRITE_SURF_ATM_N
+!
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
+USE MODN_CONF,             ONLY: JPHEXT,NHALO
+USE MODN_CONFZ
+USE MODN_DIAG_BLANK
 !
 IMPLICIT NONE
 !
@@ -203,7 +194,6 @@ REAL, DIMENSION(:,:,:,:),ALLOCATABLE          :: ZWETDEPAER
 !
 TYPE(TFILEDATA),POINTER :: TZDIACFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL() !Namelist file
-TYPE(TFILEDATA),POINTER :: TZOUTFILE  => NULL()
 !
 NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS,   &
                    NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND,  &
@@ -441,11 +431,10 @@ IF ( LEN_TRIM(CINIFILE)==0 ) THEN
 ENDIF
 !
 INPRAR = 24 +2*(4+NRR+NSV)
-COUTFMFILE=TRIM(CINIFILE)//YSUFFIX
 !
-CALL IO_FILE_ADD2LIST(TZOUTFILE,TRIM(CINIFILE)//YSUFFIX,'DIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_FILE_ADD2LIST(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'DIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
-CALL IO_FILE_OPEN_ll(TZOUTFILE)
+CALL IO_FILE_OPEN_ll(TOUTDATAFILE)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZSTART=ZTIME2-ZTIME1
@@ -491,7 +480,7 @@ ENDIF
 !
 !*       4.0    Stores the fields in MESONH files if necessary
 !
-CALL WRITE_LFIFM1_FOR_DIAG(TZOUTFILE,CDAD_NAME(1))
+CALL WRITE_LFIFM1_FOR_DIAG(TOUTDATAFILE,CDAD_NAME(1))
 !
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) 'DIAG AFTER WRITE_LFIFM1_FOR_DIAG'
@@ -675,7 +664,7 @@ ZCHEM=0.
 XTIME_LES=0.
 XTIME_LES_BU_PROCESS=0.
 XTIME_BU_PROCESS=0.
-CALL PHYS_PARAM_n(1,TZOUTFILE,GCLOSE_OUT,                      &
+CALL PHYS_PARAM_n(1,TOUTDATAFILE,GCLOSE_OUT,                      &
                   ZRAD,ZSHADOWS,ZDCONV,ZGROUND,ZMAFL,ZDRAG, &
                   ZTURB,ZTRACER, ZTIME_BU,ZWETDEPAER,GMASKkids,GCLOUD_ONLY)
 WRITE(ILUOUT0,*) 'DIAG AFTER PHYS_PARAM1'
@@ -699,7 +688,7 @@ ZTIME1=ZTIME2
 !
 IF (CSURF=='EXTE') THEN
   CALL GOTO_SURFEX(1)
-  TFILE_SURFEX => TZOUTFILE
+  TFILE_SURFEX => TOUTDATAFILE
   CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
   CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
                              YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
@@ -718,7 +707,7 @@ ZTIME1=ZTIME2
 !
 !*       7.0    Stores other fields in MESONH files if necessary
 !
-CALL WRITE_LFIFM1_FOR_DIAG_SUPP(TZOUTFILE)
+CALL WRITE_LFIFM1_FOR_DIAG_SUPP(TOUTDATAFILE)
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) 'DIAG AFTER WRITE_LFIFM1_FOR_DIAG_SUPP'
 !
@@ -729,7 +718,7 @@ ZTIME1=ZTIME2
 !
 !*       8.0    Initial positions computation (back into simulation segments)
 !
-IF (LTRAJ .AND. JF/=1) CALL COMPUTE_R00(TZOUTFILE)
+IF (LTRAJ .AND. JF/=1) CALL COMPUTE_R00(TOUTDATAFILE)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZTRAJ =ZTIME2-ZTIME1
@@ -742,7 +731,7 @@ DEALLOCATE(GMASKkids)
 DEALLOCATE(ZWETDEPAER)
 IF (GCLOSE_OUT) THEN
   GCLOSE_OUT=.FALSE.
-  CALL IO_FILE_CLOSE_ll(TZOUTFILE)
+  CALL IO_FILE_CLOSE_ll(TOUTDATAFILE)
 END IF
 !
 CALL IO_FILE_CLOSE_ll(TLUOUT)
diff --git a/src/MNH/mnhget_desfmn.f90 b/src/MNH/mnhget_desfmn.f90
index 68e10f405c5f002da98164a9b56bdd9ab199f21b..189bbb76259fe05ebcfc8987ca415da48ab083a5 100644
--- a/src/MNH/mnhget_desfmn.f90
+++ b/src/MNH/mnhget_desfmn.f90
@@ -60,7 +60,7 @@ END MODULE MODI_MNHGET_DESFM_n
 !
 USE MODD_CONF,           ONLY : CPROGRAM
 USE MODD_LUNIT_n,        ONLY : CINIFILE
-USE MODD_LUNIT,          ONLY : CLUOUT0, COUTFMFILE, CPGDFILE
+USE MODD_LUNIT,          ONLY : CLUOUT0, CPGDFILE, TOUTDATAFILE
 !
 USE MODE_FM
 USE MODE_ll
@@ -120,8 +120,7 @@ ELSE IF (HACTION=='WRITE') THEN
       CPROGRAM == 'ZOOMPG' .OR. CPROGRAM =='DIAG  '      ) THEN
     KLUDES = 0
   ELSE
-    YDESFM=ADJUSTL(ADJUSTR(COUTFMFILE)//'.des')
-    CALL FMLOOK_ll(YDESFM,YLUOUT,KLUDES,IRESP)
+    KLUDES = TOUTDATAFILE%TDESFILE%NLU
   END IF
 END IF
 !
diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90
index 8a05a19942e5709a1f24a44f78ead33bddbf7969..7b8bd695424a434fac01deafebc105def5790882 100644
--- a/src/MNH/mnhinit_io_surfn.f90
+++ b/src/MNH/mnhinit_io_surfn.f90
@@ -59,28 +59,25 @@ END MODULE MODI_MNHINIT_IO_SURF_n
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_DIM_n,            ONLY: NIMAX, NJMAX, NIMAX_ll, NJMAX_ll
+USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE,                             &
+                                 NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION,  &
+                                 NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,        &
+                                 NIE_ALL, NJE_ALL, NHALO
+USE MODD_LUNIT,            ONLY: CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT_n,          ONLY: CINIFILE,CINIFILEPGD,CMASK_SURFEX, TLUOUT
+USE MODD_MNH_SURFEX_n
+USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, COUTFILE, &
-         NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION,  &
-         NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,        &
-         NIE_ALL, NJE_ALL, NHALO
-!
-USE MODD_CONF,           ONLY : CPROGRAM
-USE MODD_LUNIT_n,        ONLY : CINIFILE,CINIFILEPGD,CMASK_SURFEX, TLUOUT
-USE MODD_LUNIT,          ONLY : CLUOUT0, COUTFMFILE, CPGDFILE, TLUOUT0
-!
-USE MODD_DIM_n,          ONLY : NIMAX, NJMAX, NIMAX_ll, NJMAX_ll
-USE MODD_PARAMETERS,     ONLY : JPHEXT
-!
-USE MODE_ll
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
 USE MODI_GET_1D_MASK
-USE MODI_GET_TYPE_DIM_N
 USE MODI_GET_SURF_MASK_N
-USE MODD_MNH_SURFEX_n
+USE MODI_GET_TYPE_DIM_N
 !
 IMPLICIT NONE
 !
@@ -133,7 +130,11 @@ IF (HACTION=='READ ') THEN
       CALL IO_FILE_FIND_BYNAME(TRIM(CPGDFILE),TPINFILE,IRESP)
   END SELECT
 ELSE IF (HACTION=='WRITE') THEN
-  COUTFILE=COUTFMFILE
+  IF (ASSOCIATED(TOUTDATAFILE)) THEN
+    COUTFILE = TOUTDATAFILE%CNAME
+  ELSE
+    COUTFILE = ''
+  END IF
 END IF
 !
 !*       3.    initialisation of 2D arrays
diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90
index 778187f8f59dbfb289ebccbcf73352ab980402c4..bfb22b75ff7280bed8c92799eb58554628597f7e 100644
--- a/src/MNH/mnhopen_aux_io_surf.f90
+++ b/src/MNH/mnhopen_aux_io_surf.f90
@@ -57,16 +57,15 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF
 !              ------------
 !
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, COUTFILE, &
-         NMASK_ALL, CMASK, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, CACTION, &
-         NMASK, NIU, NJU, NIB, NJB, NIE, NJE
-!
-USE MODD_CONF,           ONLY : CPROGRAM
-USE MODD_PARAMETERS,     ONLY : JPHEXT
-USE MODD_LUNIT,          ONLY : CLUOUT0, COUTFMFILE, CPGDFILE, TLUOUT0
-USE MODD_LUNIT_n,        ONLY : TLUOUT
-!
-USE MODE_FM,     ONLY: IO_FILE_OPEN_ll
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE, NMASK_ALL, CMASK, NIU_ALL,  &
+                                 NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, CACTION, &
+                                 NMASK, NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_LUNIT,            ONLY: CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT_n,          ONLY: TLUOUT
+USE MODD_PARAMETERS,       ONLY: JPHEXT
+!
+USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
 USE MODE_FMREAD
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
@@ -93,6 +92,7 @@ INTEGER           :: IIMAX          ! number of points in X direction
 INTEGER           :: IJMAX          ! number of points in Y direction
 !
 !
+CHARACTER(LEN=28) :: YFILE          ! file name
 INTEGER           :: ILU            ! 1D physical dimension of XCOVER
 INTEGER           :: ILUOUT
 REAL, DIMENSION(:),   ALLOCATABLE :: ZFULL  ! total cover
@@ -123,7 +123,13 @@ IF (LEN_TRIM(CACTION)>0) THEN
   WRITE(ILUOUT,*) 'file ',HFILE,' cannot be opened because another MESONH file is in use'
 END IF
 !
-IF (HFILE/=COUTFMFILE .AND. HFILE/=CPGDFILE) THEN
+IF (.NOT.ASSOCIATED(TOUTDATAFILE)) THEN
+  YFILE = ''
+ELSE
+  YFILE = TOUTDATAFILE%CNAME
+END IF
+!
+IF (HFILE/=YFILE .AND. HFILE/=CPGDFILE) THEN
   CALL IO_FILE_ADD2LIST(TPINFILE,TRIM(HFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
   CALL IO_FILE_OPEN_ll(TPINFILE,KRESP=IRESP,OPARALLELIO=.FALSE.)
   !
diff --git a/src/MNH/modd_lunit.f90 b/src/MNH/modd_lunit.f90
index 17ab524cccee1b52de4fd69adc6973dfabfe90e5..fee3c3d189fbeb3922aecd1f2e2fdaacfcdbd870 100644
--- a/src/MNH/modd_lunit.f90
+++ b/src/MNH/modd_lunit.f90
@@ -47,7 +47,7 @@ IMPLICIT NONE
 !
 CHARACTER(LEN=16),SAVE :: CLUOUT0    ! Name of output_listing file
 TYPE(TFILEDATA),POINTER :: TLUOUT0 => NULL() ! output_listing file
-CHARACTER(LEN=28),SAVE :: COUTFMFILE ! name of the output FM-file being written
+TYPE(TFILEDATA),POINTER :: TOUTDATAFILE => NULL() ! output data file being written
 CHARACTER(LEN=28),SAVE :: CPGDFILE   ! name of the PGD file for PREP_REAL_CASE
 !
 END MODULE MODD_LUNIT
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index c6633090e17720f4ad31e3403d1e04a0b05b258d..2843213387c056395631b672848ff6d654dc7f6b 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -291,7 +291,7 @@ USE MODD_LES
 USE MODD_LES_BUDGET
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,          ONLY: COUTFMFILE,TLUOUT0
+USE MODD_LUNIT,          ONLY: TLUOUT0,TOUTDATAFILE
 USE MODD_LUNIT_n,        ONLY: TDIAFILE,TINIFILE,TINIFILEPGD,TLUOUT
 USE MODD_MEAN_FIELD
 USE MODD_MEAN_FIELD_n
@@ -925,7 +925,7 @@ IF (IBAK < NBAK_NUMB ) THEN
     CALL WRITE_DESFM_n(IMI,TZBAKFILE)
     CALL IO_WRITE_HEADER(TBACKUPN(IBAK)%TFILE)
     CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,TBACKUPN(IBAK)%TFILE%TDADFILE%CNAME)
-    COUTFMFILE = TZBAKFILE%CNAME
+    TOUTDATAFILE => TZBAKFILE
     CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE)
     IF (CSURF=='EXTE') THEN
       TFILE_SURFEX => TZBAKFILE
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index a49e987af733d39587960424fda6c20150fecb6f..ecdab0b266dc4142be3b0095df2bc0073b82674a 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -345,7 +345,7 @@ USE MODD_CH_AEROSOL,ONLY:  LORILAM, CORGANIC, LVARSIGI, LVARSIGJ, LINITPM, XINIR
 USE MODD_DUST,      ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN 
 USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT
 USE MODD_VAR_ll,    ONLY:  NPROC
-USE MODD_LUNIT,     ONLY:  TLUOUT0
+USE MODD_LUNIT,     ONLY:  TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n
 USE MODD_IO_ll,     ONLY: NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING
 USE MODD_CONF_n
@@ -1796,7 +1796,6 @@ IF (CSURF =='EXTE') THEN
   IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN
     !* writing of physiographic fields in the file
     CSTORAGE_TYPE='PG'
-    COUTFMFILE = CINIFILEPGD
     !
     CALL IO_FILE_ADD2LIST(TZINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
     !
@@ -1808,6 +1807,9 @@ IF (CSURF =='EXTE') THEN
     CALL IO_WRITE_FIELD(TZINIFILEPGD,'L2D', L2D)
     CALL IO_WRITE_FIELD(TZINIFILEPGD,'PACK',LPACK)
     CALL WRITE_HGRID(1,TZINIFILEPGD)
+    !
+    TOUTDATAFILE => TZINIFILEPGD
+    !
     TFILE_SURFEX => TZINIFILEPGD
     CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
     NULLIFY(TFILE_SURFEX)
@@ -1817,7 +1819,7 @@ IF (CSURF =='EXTE') THEN
   !
   !* rereading of physiographic fields and definition of prognostic fields
   !* writing of all surface fields
-  COUTFMFILE = TINIFILE%CNAME
+  TOUTDATAFILE => TINIFILE
   TFILE_SURFEX => TINIFILE
   CALL PREP_SURF_MNH('                            ','      ')
   NULLIFY(TFILE_SURFEX)
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 6fe5743a6bf16fd6167212db4866426bd69e97f2..5429524f0835a26edd11c0548b0e92a7b9687c5a 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -99,46 +99,42 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS
 USE MODD_CONF
+USE MODD_CONF_n
 USE MODD_CST
-USE MODD_GRID_n, ONLY : XZSMT
-USE MODD_LUNIT
+USE MODD_DIM_n
+USE MODD_IO_ll,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
+USE MODD_GRID_n,           ONLY: XZSMT
+USE MODD_LUNIT,            ONLY: CPGDFILE,TLUOUT0,TOUTDATAFILE
+USE MODD_MNH_SURFEX_n
 USE MODD_NESTING
-USE MODD_CONF_n
-USE MODD_IO_ll, ONLY : NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
-!
-USE MODI_OPEN_NESTPGD_FILES
-USE MODI_RETRIEVE1_NEST_INFO_n
-USE MODI_DEFINE_MASK_n
-USE MODI_NEST_FIELD_n
-USE MODI_NEST_ZSMT_n
-USE MODI_READ_HGRID
+USE MODD_PARAMETERS
+USE MODD_VAR_ll,           ONLY: NPROC, IP, NMNH_COMM_WORLD
 !
-USE MODE_FIELD, ONLY : INI_FIELD_LIST
+USE MODE_FIELD,            ONLY: INI_FIELD_LIST
 USE MODE_FM
 USE MODE_FMREAD
 USE MODE_FMWRIT
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_PRINT_LIST
 USE MODE_ll
-!
+USE MODE_MNH_WORLD,        ONLY: INIT_NMNH_COMM_WORLD
 USE MODE_MODELN_HANDLER
+USE MODE_MPPDB
+USE MODE_SPLITTINGZ_ll,    ONLY: INI_PARAZ_ll
 !
-USE MODI_VERSION
-USE MODI_READ_ALL_NAMELISTS
+USE MODI_DEFINE_MASK_n
 USE MODI_INIT_HORGRID_ll_n
 USE MODI_INIT_PGD_SURF_ATM
+USE MODI_NEST_FIELD_n
+USE MODI_NEST_ZSMT_n
+USE MODI_OPEN_NESTPGD_FILES
+USE MODI_READ_ALL_NAMELISTS
+USE MODI_READ_HGRID
+USE MODI_RETRIEVE1_NEST_INFO_n
+USE MODI_VERSION
 USE MODI_WRITE_PGD_SURF_ATM_N
-USE MODD_MNH_SURFEX_n
 !
-USE MODE_SPLITTINGZ_ll, ONLY : INI_PARAZ_ll
-USE MODD_VAR_ll, ONLY : NPROC, IP, NMNH_COMM_WORLD
-USE MODE_MNH_WORLD, ONLY : INIT_NMNH_COMM_WORLD
-USE MODE_MPPDB
-!
-USE MODD_DIM_n
-
 IMPLICIT NONE
 !
 !*       0.1   Declaration of local variables
@@ -338,7 +334,7 @@ END DO
 DO JPGD=1,NMODEL
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
   CPGDFILE   = TZFILEPGD(JPGD)%TZFILE%CNAME
-  COUTFMFILE = TZFILENESTPGD(JPGD)%TZFILE%CNAME
+  TOUTDATAFILE => TZFILENESTPGD(JPGD)%TZFILE
   CALL GOTO_MODEL(JPGD)
   CALL GOTO_SURFEX(JPGD)
   TFILE_SURFEX => TZFILENESTPGD(JPGD)%TZFILE
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index a3fe2ae9c44cfcfac1d4dd4687c04a4f73de4715..792b9404bc9cbbc85ef064f93a8fe11156482238 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -388,88 +388,84 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_GRIDPROJ        ! executive modules
-USE MODE_GRIDCART
-USE MODE_POS
+USE MODD_CH_AEROSOL,       ONLY: LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, &
+                                 XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT
+USE MODD_CH_MNHC_n,        ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM
+USE MODD_CONF
+USE MODD_CONF_n
+USE MODD_CST
+USE MODD_DIM_n
+USE MODD_DUST,             ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN
+USE MODD_DYN_n,            CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR
+USE MODD_FIELD_n
+USE MODD_GR_FIELD_n
+USE MODD_GRID
+USE MODD_GRID_n
+USE MODD_HURR_CONF
+USE MODD_IO_ll,            ONLY: GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
+USE MODD_LBC_n
+USE MODD_LSFIELD_n
+USE MODD_LUNIT,            ONLY: CLUOUT0,CPGDFILE,TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT_n,          ONLY: CINIFILE,TINIFILE,TLUOUT
+USE MODD_METRICS_n
+USE MODD_MNH_SURFEX_n
+USE MODD_NESTING
+USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_PARAM_n
+USE MODD_PREP_REAL
+USE MODD_REF_n
+USE MODD_SALT,             ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT
+USE MODD_TURB_n
+!
+USE MODE_EXTRAPOL
+USE MODE_FIELD
 USE MODE_FM
-USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER
+USE MODE_FMREAD
+USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
+USE MODE_GRIDCART
+USE MODE_GRIDPROJ
 USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
 USE MODE_ll
-USE MODE_MSG
 USE MODE_MODELN_HANDLER
-USE MODE_FMREAD
-USE MODE_FIELD
-USE MODN_CONFZ
+USE MODE_MPPDB
+USE MODE_MSG
+USE MODE_POS
+USE MODE_SPLITTINGZ_ll
 !
-USE MODI_DEFAULT_DESFM_n   ! interface modules
-USE MODI_OPEN_PRC_FILES
-USE MODI_READ_ALL_DATA_MESONH_CASE
-USE MODI_READ_ALL_DATA_GRIB_CASE
-USE MODI_METRICS
-USE MODI_UPDATE_METRICS
-USE MODI_SET_REF
-USE MODI_VER_PREP_GRIBEX_CASE
-USE MODI_VER_PREP_MESONH_CASE
-USE MODI_VER_THERMO
-USE MODI_VER_DYN
-USE MODI_INI_PROG_VAR
-USE MODI_ERROR_ON_TEMPERATURE
-USE MODI_WRITE_DESFM_n
-USE MODI_WRITE_LFIFM_n
-USE MODI_PRESSURE_IN_PREP
 USE MODI_BOUNDARIES
+USE MODI_COMPARE_DAD
 USE MODI_DEALLOCATE_MODEL1
+USE MODI_DEALLOC_PARA_LL
+USE MODI_DEFAULT_DESFM_n
+USE MODI_ERROR_ON_TEMPERATURE
+USE MODI_INI_PROG_VAR
+USE MODI_METRICS
 USE MODI_MNHREAD_ZS_DUMMY_n
 USE MODI_MNHWRITE_ZS_DUMMY_n
-USE MODI_COMPARE_DAD 
+USE MODI_OPEN_PRC_FILES
 USE MODI_PREP_SURF_MNH
+USE MODI_PRESSURE_IN_PREP
+USE MODI_READ_ALL_DATA_GRIB_CASE
+USE MODI_READ_ALL_DATA_MESONH_CASE
+USE MODI_READ_ALL_NAMELISTS
 USE MODI_READ_CHEM_DATA_NETCDF_CASE
-USE MODI_VER_PREP_NETCDF_CASE
-!
-USE MODD_CONF            ! declaration modules
-USE MODD_CONF_n
-USE MODD_LUNIT
-USE MODD_LUNIT_n
-USE MODD_DIM_n
-USE MODD_GRID_n
-USE MODD_GRID
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG
-USE MODD_METRICS_n
-USE MODD_LBC_n
-USE MODD_PARAM_n
-USE MODD_CST
-USE MODD_PARAMETERS
-USE MODD_FIELD_n
-USE MODD_LSFIELD_n
-USE MODD_GR_FIELD_n
-USE MODD_NESTING
-USE MODD_TURB_n
-USE MODD_DYN_n, CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR
-USE MODD_REF_n 
-USE MODD_HURR_CONF
-USE MODD_NSV
-USE MODD_CH_AEROSOL, ONLY: LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ,&
-                           XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT
-USE MODD_DUST,      ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN 
-USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT
-USE MODD_IO_ll,   ONLY : GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT,TFILE_SURFEX
-USE MODD_PREP_REAL
-USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM
 USE MODI_READ_VER_GRID
-USE MODE_MPPDB
-USE MODE_SPLITTINGZ_ll
-USE MODE_EXTRAPOL
-!
 USE MODI_SECOND_MNH
+USE MODI_SET_REF
+USE MODI_UPDATE_METRICS
+USE MODI_VER_DYN
+USE MODI_VER_PREP_GRIBEX_CASE
+USE MODI_VER_PREP_MESONH_CASE
+USE MODI_VER_PREP_NETCDF_CASE
 USE MODI_VERSION
-USE MODI_DEALLOC_PARA_LL
-USE MODI_READ_ALL_NAMELISTS
-USE MODD_MNH_SURFEX_n
-!
-USE MODE_MPPDB
+USE MODI_VER_THERMO
+USE MODI_WRITE_DESFM_n
+USE MODI_WRITE_LFIFM_n
 !
-USE MODN_CONF, ONLY : JPHEXT , NHALO
+USE MODN_CONF,             ONLY: JPHEXT , NHALO
+USE MODN_CONFZ
 !
 IMPLICIT NONE
 !
@@ -1078,7 +1074,7 @@ CALL MNHREAD_ZS_DUMMY_n(TZPGDFILE)
 !
 !* writing in the output file
 !
-COUTFMFILE=TINIFILE%CNAME
+TOUTDATAFILE => TINIFILE
 CALL MNHWRITE_ZS_DUMMY_n(TINIFILE)
 !
 CALL DEALLOCATE_MODEL1(3)
diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90
index 13521b5107363c2f6c82f4b482bf4df469336d00..a67b41f79e2488a9e087d96fbd215985da9007f6 100644
--- a/src/MNH/prep_surf_mnh.f90
+++ b/src/MNH/prep_surf_mnh.f90
@@ -50,8 +50,8 @@ END MODULE MODI_PREP_SURF_MNH
 !------------------------------------------------------------------
 !
 USE MODD_IO_SURF_MNH, ONLY : COUTFILE
-USE MODD_LUNIT,       ONLY : COUTFMFILE, TLUOUT0
-USE MODD_LUNIT_n,     ONLY : CINIFILE
+USE MODD_LUNIT,       ONLY : TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
@@ -84,7 +84,7 @@ WRITE(ILUOUT0,*) '***************************************************'
 !
 !
 COUTFILE   = CINIFILE
-COUTFMFILE = CINIFILE
+TOUTDATAFILE => TINIFILE
 !
 YATMFILETYPE = HATMFILETYPE
 IF(YATMFILETYPE=='GRIBEX') YATMFILETYPE='GRIB  '
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 11feb97529863f153478e63d2e45a29f3dfa3646..8fb535c4690f6e998af09c40b8c4d8a604e5bf1f 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -39,7 +39,7 @@ USE MODD_CONF,        ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
 USE MODD_IO_ll,       ONLY : TFILEDATA, LIOCDF4, LLFIOUT, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
-USE MODD_LUNIT,       ONLY : CLUOUT0, CPGDFILE,COUTFMFILE, TLUOUT0
+USE MODD_LUNIT,       ONLY : CLUOUT0, CPGDFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 4eca7fe7c04ebb38fdcbec80f8eed0b82f071f65..c598b4fd25b9b159ede18e277723afa97c6fb250 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -1477,7 +1477,7 @@ ZWRITE = ZTIME2 - ZTIME1
 ZTIME1 = ZTIME2
 !
 TFILE_SURFEX => TZFILE
-CALL SPAWN_SURF(HINIFILE,HINIFILEPGD,OSPAWN_SURF)
+CALL SPAWN_SURF(HINIFILE,HINIFILEPGD,TZFILE,OSPAWN_SURF)
 NULLIFY(TFILE_SURFEX)
 !
 CALL SECOND_MNH(ZTIME2)
diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90
index f80801dd3c492bb1bbe609bb82f73b6e99ba7981..d549fcf15fb5a5b99dc0f425e1a3e5b605cc1864 100644
--- a/src/MNH/spawn_surf.f90
+++ b/src/MNH/spawn_surf.f90
@@ -14,11 +14,15 @@ MODULE MODI_SPAWN_SURF
 !
 INTERFACE
 !
-      SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, OSPAWN_SURF)
+      SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, TPOUTDATAFILE, OSPAWN_SURF)
 !
-CHARACTER (LEN=*),     INTENT(IN) :: HINIFILE     ! Input file
-CHARACTER (LEN=*),     INTENT(IN) :: HINIFILEPGD
-LOGICAL,               INTENT(IN) :: OSPAWN_SURF  ! flag to spawn surface fields
+USE MODD_IO_ll, ONLY: TFILEDATA
+
+!
+CHARACTER (LEN=*),      INTENT(IN) :: HINIFILE     ! Input file
+CHARACTER (LEN=*),      INTENT(IN) :: HINIFILEPGD
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPOUTDATAFILE
+LOGICAL,                INTENT(IN) :: OSPAWN_SURF  ! flag to spawn surface fields
 !
 END SUBROUTINE SPAWN_SURF
 !
@@ -27,9 +31,9 @@ END INTERFACE
 END MODULE MODI_SPAWN_SURF
 !
 !
-!     #######################################################################
-      SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, OSPAWN_SURF)
-!     #######################################################################
+!     #########################################################################
+      SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, TPOUTDATAFILE, OSPAWN_SURF)
+!     #########################################################################
 !
 !!****  *SPAWN_SURF * - subroutine to  call spawning of surface fields
 !!
@@ -72,31 +76,29 @@ END MODULE MODI_SPAWN_SURF
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_LUNIT,        ONLY : CPGDFILE, COUTFMFILE
-USE MODD_PARAM_n,      ONLY : CSURF
-USE MODD_NESTING,      ONLY : CMY_NAME, CDAD_NAME
 USE MODD_CONF,         ONLY : NVERB
 USE MODD_GRID_n,       ONLY : XZS
-USE MODD_TIME_n,       ONLY : TDTCUR
+USE MODD_IO_ll,        ONLY : TFILEDATA
 USE MODD_IO_SURF_MNH,  ONLY : COUTFILE
-!
-USE MODI_WRITE_HGRIDn
-USE MODI_MNHPUT_ZS_n
+USE MODD_LUNIT,        ONLY : CPGDFILE, TOUTDATAFILE
+USE MODD_MNH_SURFEX_n
+USE MODD_NESTING,      ONLY : CMY_NAME, CDAD_NAME
+USE MODD_PARAM_n,      ONLY : CSURF
+USE MODD_TIME_n,       ONLY : TDTCUR
 !
 USE MODE_ll
 USE MODE_FMWRIT
 USE MODE_IO_ll
- !JUAN REALZ
 USE MODE_MODELN_HANDLER
- !JUAN REALZ
-USE MODI_ZOOM_PGD_SURF_ATM
-USE MODI_WRITE_PGD_SURF_ATM_N
-USE MODI_WRITE_SURF_ATM_N
+!
 USE MODI_INIT_PGD_SURF_ATM
+USE MODI_MNHPUT_ZS_n
 USE MODI_PREP_SURF_ATM
 USE MODI_WRITE_DIAG_SURF_ATM_N
-USE MODD_MNH_SURFEX_n
-!
+USE MODI_WRITE_HGRIDn
+USE MODI_WRITE_PGD_SURF_ATM_N
+USE MODI_WRITE_SURF_ATM_N
+USE MODI_ZOOM_PGD_SURF_ATM
 !
 IMPLICIT NONE
 !
@@ -104,9 +106,10 @@ IMPLICIT NONE
 !
 !*       0.1.2  Declarations of dummy arguments :
 !
-CHARACTER (LEN=*),     INTENT(IN) :: HINIFILE     ! Input file
-CHARACTER (LEN=*),     INTENT(IN) :: HINIFILEPGD
-LOGICAL,               INTENT(IN) :: OSPAWN_SURF  ! flag to spawn surface fields
+CHARACTER (LEN=*),      INTENT(IN) :: HINIFILE     ! Input file
+CHARACTER (LEN=*),      INTENT(IN) :: HINIFILEPGD
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPOUTDATAFILE
+LOGICAL,                INTENT(IN) :: OSPAWN_SURF  ! flag to spawn surface fields
 !
 !*       0.1.3  Declarations of local variables :
 !
@@ -119,7 +122,7 @@ INTEGER :: IINFO_ll
 IF (CSURF=='EXTE') THEN
   IF (OSPAWN_SURF) THEN
     CPGDFILE   = CMY_NAME(2)
-    COUTFMFILE = CMY_NAME(2)
+    TOUTDATAFILE => TPOUTDATAFILE !Corresponding to file with CNAME = CMY_NAME(2)
     COUTFILE   = CMY_NAME(2)
     !* spawn PGD fields
     CALL GOTO_SURFEX(1)
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 1252f83bd57d238f7877056ed1c75e6f3d128cc0..01bfaf3c7f2adca5428d0fba3b6824fbe405b9a9 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -53,7 +53,7 @@
 USE MODD_CONF,   ONLY : CPROGRAM, NMASDEV, NBUGFIX, CBIBUSER, &
                         L1D, L2D, LPACK
 USE MODD_IO_ll,  ONLY:  LIOCDF4,LLFIOUT,NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
-USE MODD_LUNIT,  ONLY : CLUOUT0, COUTFMFILE, CPGDFILE, TLUOUT0
+USE MODD_LUNIT,  ONLY : CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX
 USE MODD_PARAM_n,     ONLY : CSURF
 USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
@@ -216,7 +216,7 @@ IF (CSURF=='EXTE') THEN
   CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)      
   YPGDFILE   = CPGDFILE
   CPGDFILE   = YZOOMFILE
-  COUTFMFILE = YZOOMFILE
+  TOUTDATAFILE => TZZOOMFILE
   CALL GOTO_SURFEX(1)
   CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',YPGDFILE,'MESONH',YZOOMFILE,'MESONH')
 !