diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90
index c94e8e1cdf789b29d6600b81636203402c87adfd..95d974d336a34aec1d2e8f9b00279e7cdccb2d4d 100644
--- a/src/LIB/SURCOUCHE/src/fmread_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90
@@ -26,7 +26,10 @@ MODULE MODE_FMREAD
 !  J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll
 !  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !
+USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
 USE MODD_MPIF
+!
+USE MODE_FIELD
 #if defined(MNH_IOCDF4)
 USE MODE_NETCDF
 #endif
@@ -36,6 +39,29 @@ IMPLICIT NONE
 
 PRIVATE
 
+INTERFACE IO_READ_FIELD
+   MODULE PROCEDURE IO_READ_FIELD_BYNAME_N0, &
+                    IO_READ_FIELD_BYFIELD_N0
+!                       IO_READ_FIELD_BYNAME_X0, IO_READ_FIELD_BYNAME_X1,  &
+!                       IO_READ_FIELD_BYNAME_X2, IO_READ_FIELD_BYNAME_X3,  &
+!                       IO_READ_FIELD_BYNAME_X4, IO_READ_FIELD_BYNAME_X5,  &
+!                       IO_READ_FIELD_BYNAME_X6,                            &
+!                       IO_READ_FIELD_BYNAME_N1,  &
+!                       IO_READ_FIELD_BYNAME_N2, IO_READ_FIELD_BYNAME_N3,  &
+!                       IO_READ_FIELD_BYNAME_L0, IO_READ_FIELD_BYNAME_L1,  &
+!                       IO_READ_FIELD_BYNAME_C0, IO_READ_FIELD_BYNAME_C1,  &
+!                       IO_READ_FIELD_BYNAME_T0,                            &
+!                       IO_READ_FIELD_BYFIELD_X0,IO_READ_FIELD_BYFIELD_X1, &
+!                       IO_READ_FIELD_BYFIELD_X2,IO_READ_FIELD_BYFIELD_X3, &
+!                       IO_READ_FIELD_BYFIELD_X4,IO_READ_FIELD_BYFIELD_X5, &
+!                       IO_READ_FIELD_BYFIELD_X6,                           &
+!                       IO_READ_FIELD_BYFIELD_N1, &
+!                       IO_READ_FIELD_BYFIELD_N2,IO_READ_FIELD_BYFIELD_N3, &
+!                       IO_READ_FIELD_BYFIELD_L0,IO_READ_FIELD_BYFIELD_L1, &
+!                       IO_READ_FIELD_BYFIELD_C0,IO_READ_FIELD_BYFIELD_C1, &
+!                       IO_READ_FIELD_BYFIELD_T0
+END INTERFACE
+
 INTERFACE FMREAD
   MODULE PROCEDURE FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
        & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
@@ -48,8 +74,7 @@ PUBLIC FMREAD_LB,FMREAD,FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
        & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
        & FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,&
        & FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll
-
-!INCLUDE 'mpif.h'
+PUBLIC IO_READ_FIELD
 
 CONTAINS 
 SUBROUTINE FM_READ_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KRESP)
@@ -1249,6 +1274,90 @@ RETURN
 
 END SUBROUTINE FMREADN0_ll
 
+SUBROUTINE IO_READ_FIELD_BYNAME_N0(TPFILE,HNAME,HFIPRI,KFIELD,KRESP)
+!
+TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
+CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
+CHARACTER(LEN=*), INTENT(IN)    :: HFIPRI   ! output file for error messages
+INTEGER,          INTENT(INOUT) :: KFIELD   ! array containing the data field
+INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
+!
+INTEGER :: ID ! Index of the field
+INTEGER :: IRESP ! return_code
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
+!
+IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KFIELD,IRESP)
+!
+IF (PRESENT(KRESP)) KRESP = IRESP
+!
+END SUBROUTINE IO_READ_FIELD_BYNAME_N0
+
+SUBROUTINE IO_READ_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+!
+USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_FM
+USE MODE_FD_ll, ONLY : GETFD,FD_LL
+!
+TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
+TYPE(TFIELDDATA), INTENT(IN)    :: TPFIELD
+INTEGER,          INTENT(INOUT) :: KFIELD   ! array containing the data field
+INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
+!
+INTEGER                      :: IERR
+TYPE(FD_ll), POINTER         :: TZFD
+INTEGER                      :: IRESP
+TYPE(FMHEADER)               :: TZFMH
+CHARACTER(LEN=:),ALLOCATABLE :: YMSG
+CHARACTER(LEN=6)             :: YRESP
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+!
+IRESP = 0
+!
+TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
+IF (ASSOCIATED(TZFD)) THEN
+  IF (GSMONOPROC) THEN ! sequential execution
+      IF (ASSOCIATED(TZFD%CDF)) THEN
+         CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP)
+      ELSE
+         CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP)
+      END IF
+  ELSE
+    IF (ISP == TZFD%OWNER)  THEN
+      IF (ASSOCIATED(TZFD%CDF)) THEN
+         CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP)
+      ELSE
+         CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP)
+      END IF
+    END IF
+    !
+    CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
+    !
+    CALL BCAST_HEADER(TZFD,TZFMH)
+    !
+    CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
+  END IF
+!  KGRID  = TZFMH%GRID
+!  HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN)
+ELSE
+  IRESP = -61
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N0','file '//TRIM(TPFILE%CNAME)//' not found')
+END IF
+!
+IF (IRESP.NE.0) THEN
+  WRITE(YRESP, '( I6 )') IRESP
+  YMSG = 'RESP='//YRESP//' when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N0',YMSG)
+ENDIF
+!
+IF (PRESENT(KRESP)) KRESP = IRESP
+!
+END SUBROUTINE IO_READ_FIELD_BYFIELD_N0
+
+
 SUBROUTINE FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,&
      KLENCH,HCOMMENT,KRESP)
 USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index d6f594f44b3457dcfbf52a02986f52ffeec2f564..36ea691c59958820dfd0e2adbb0f93a43c8326e6 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -169,21 +169,22 @@ END MODULE MODI_INI_SEG_n
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_LUNIT
 USE MODD_CONF
-USE MODN_CONFZ
 USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
+USE MODN_CONFZ
+USE MODD_DYN
+USE MODD_IO_ll,   ONLY : LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILEDATA
+USE MODD_LUNIT
 USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE,CINIFILEPGD_n=> CINIFILEPGD
-USE MODN_LUNIT_n
+USE MODD_PARAM_n, ONLY : CSURF
 USE MODD_PARAMETERS
-USE MODD_DYN
 USE MODD_REF,   ONLY : LBOUSS
-USE MODD_IO_ll, ONLY : GSMONOPROC
-USE MODD_PARAM_n, ONLY : CSURF
 !
+USE MODE_FIELD
 USE MODE_FMREAD
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_POS
 !
 USE MODI_DEFAULT_DESFM_n
@@ -192,6 +193,7 @@ USE MODI_READ_EXSEG_n
 USE MODI_WRITE_DESFM_n
 !
 USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_LUNIT_n
 !
 IMPLICIT NONE
 !
@@ -256,6 +258,7 @@ CHARACTER (LEN=4)  :: YSCONV
 CHARACTER (LEN=4)  :: YCLOUD
 CHARACTER (LEN=4)  :: YELEC
 CHARACTER (LEN=3)  :: YEQNSYS
+TYPE(TFILEDATA)    :: TZFILE
 !
 !-------------------------------------------------------------------------------
 !
@@ -348,49 +351,78 @@ IF (CPROGRAM=='MESONH') THEN
   HINIFILE=CINIFILE_n
   CALL FMOPEN_ll(HINIFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP)
 END IF
-
-CALL FMREAD(HINIFILE,'MASDEV',HLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
-
-IF (CPROGRAM=='MESONH') THEN
-  IF (IMASDEV > 49) THEN
-    YRECFM='COUPLING' 
-    YDIR='--'
-    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
-    IF (LCOUPLING) THEN
-    WRITE(ILUOUT,*) 'Error with the initial file'
-    WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
-    WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
-    WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
-    !callabortstop
-    CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
-    ENDIF
-  ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*      4.    READ DESFM FILE
+!             ---------------
+!
+YDESFM=TRIM(ADJUSTL(HINIFILE))//'.des'
+!
+CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
+                GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
+                GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,      &
+                GDEPOS_DST, GCHTRANS, GORILAM,                              &
+                GDEPOS_AER, GLG, GPASPOL, &
+#ifdef MNH_FOREFIRE
+                GFOREFIRE, &
+#endif
+                GLNOX_EXPLICIT,                                             &
+                GCONDSAMP, IRIMX,IRIMY,ISV,       &
+                YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS   )
+!
+!-------------------------------------------------------------------------------
+!
+!*      5.    Initialize fieldlist
+!             --------------------
+!
+IF (KMI==1) THEN !Do this only 1 time
+  IF (CPROGRAM=='SPAWN ') THEN
+    CALL INI_FIELD_LIST(2)
+  ELSE IF (CPROGRAM/='REAL  ' .AND. CPROGRAM/='IDEAL ' ) THEN
+    CALL INI_FIELD_LIST()
+  END IF
+  IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ' .OR. CPROGRAM=='MESONH') THEN
+    CALL INI_FIELD_SCALARS()
+  END IF
 END IF
-
-IF (CPROGRAM=='SPAWN ') THEN
+!
+!-------------------------------------------------------------------------------
+!
+!*      6.    READ in the LFI file SOME VARIABLES of MODD_CONF
+!             ------------------------------------------------
+!
+TZFILE%CNAME  = HINIFILE
+!TZFILE%CTYPE  = ''
+CALL PRINT_MSG(NVERB_WARNING,'IO','INI_SEG_n','filetype not (yet) set')
+IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN
+  TZFILE%CFORMAT = 'NETCDF4'
+ELSE
+  TZFILE%CFORMAT   = 'LFI'
+  TZFILE%NLFINPRAR = 0
+ENDIF
+TZFILE%CMODE    = 'READ'
+TZFILE%NLFITYPE = 2
+TZFILE%NLFIVERB = NVERB
+CALL IO_READ_FIELD(TZFILE,'MASDEV',IMASDEV)
+!
+IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
   IF (IMASDEV > 49) THEN
     YRECFM='COUPLING' 
     YDIR='--'
     CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
     IF (LCOUPLING) THEN
-    WRITE(ILUOUT,*) 'Error with the initial file'
-    WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
-    WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
-    WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
-    !callabortstop
-    CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
-    CALL ABORT
+      WRITE(ILUOUT,*) 'Error with the initial file'
+      WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
+      WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
+      WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
+      !callabortstop
+      CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
     ENDIF
   ENDIF
 END IF
-
-!
-!-------------------------------------------------------------------------------
-!
-!*      4.    READ in the LFI file SOME VARIABLES of MODD_CONF
-!             ------------------------------------------------
 !
 ! Read the storage type
   YRECFM = 'STORAGE_TYPE'
@@ -444,27 +476,7 @@ END IF
 !
 !-------------------------------------------------------------------------------
 !
-!*      5.    READ DESFM FILE
-!             ---------------
-!
-YDESFM=TRIM(ADJUSTL(HINIFILE))//'.des'
-!
-CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
-                GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
-                GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,      &
-                GDEPOS_DST, GCHTRANS, GORILAM,                              &
-                GDEPOS_AER, GLG, GPASPOL, &
-#ifdef MNH_FOREFIRE
-                GFOREFIRE, &
-#endif
-                GLNOX_EXPLICIT,                                             &
-                GCONDSAMP, IRIMX,IRIMY,ISV,       &
-                YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS   )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*      6.    READ EXSEG FILE
+!*      7.    READ EXSEG FILE
 !             ---------------
 !   We pass by arguments the informations read in DESFM descriptor to the
 ! routine which read related informations in the EXSEG descriptor in order to 
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 9d533aa6c5dea38e7341b584da432da9f52922f4..de7c186f555043e0947f98e14f99642693afedfd 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -176,15 +176,6 @@ END IF
 CALL GOTO_MODEL(1)
 CALL INI_SEG_n(1,YLUOUT(1),YINIFILE(1),YINIFILEPGD(1),ZTSTEP_ALL)
 !
-IF (CPROGRAM=='SPAWN ') THEN
-  CALL INI_FIELD_LIST(2)
-ELSE IF (CPROGRAM/='REAL  ' .AND. CPROGRAM/='IDEAL ' ) THEN
-  CALL INI_FIELD_LIST()
-END IF
-IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ' .OR. CPROGRAM=='MESONH') THEN
-  CALL INI_FIELD_SCALARS()
-END IF
-!
 DO JMI=2,NMODEL
   CALL GOTO_MODEL(JMI)
   CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL)