diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90
index 486db2897e554412c51a18e434d402e164c7be4c..bc39e66afb614f1a93c426d724f2d6011fbd2279 100644
--- a/src/MNH/close_file_mnh.f90
+++ b/src/MNH/close_file_mnh.f90
@@ -57,15 +57,17 @@ END MODULE MODI_CLOSE_FILE_MNH
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
+USE MODD_CONF,        ONLY : CPROGRAM
+USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_IO_NAM,      ONLY : CFILE
+USE MODD_LUNIT,       ONLY : CLUOUT0
+!
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_ll
 USE MODE_MSG
 !
-USE MODD_LUNIT,       ONLY : CLUOUT0
-USE MODD_CONF,        ONLY : CPROGRAM
-USE MODD_IO_NAM,      ONLY : CFILE
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -84,10 +86,11 @@ INTEGER           :: INAM           ! logical unit of namelist
 INTEGER           :: IMI            ! model index
 INTEGER           :: ILUOUT         ! output listing logical unit
 CHARACTER(LEN=16) :: YLUOUT         ! output listing file name
+TYPE(TFILEDATA),POINTER :: TZFILE
 !-------------------------------------------------------------------------------
 !
 SELECT CASE(CPROGRAM)
-  CASE('REAL  ','IDEAL ','DIAG  ')
+  CASE('REAL  ','IDEAL ','DIAG  ','PGD   ')
     YLUOUT = CLUOUT0
   CASE('MESONH','SPAWN ')
     CALL GET_MODEL_NUMBER_ll  (IMI)
@@ -103,6 +106,7 @@ END SELECT
 !
 CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP)
 IF (ILUOUT==KUNIT) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(YLUOUT))
   CALL CLOSE_ll(YLUOUT,IRESP)
   RETURN
 END IF
@@ -112,9 +116,14 @@ END IF
 !* closes the namelist
 !  -------------------
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(CFILE))
+!
+TZFILE => NULL()
+CALL IO_FILE_FIND_BYNAME(TRIM(CFILE),TZFILE,IRESP)
+!
 CALL FMLOOK_ll(CFILE,YLUOUT,INAM,IRESP)
 IF (INAM==KUNIT) THEN
-  CALL CLOSE_ll(CFILE,IRESP)
+  CALL IO_FILE_CLOSE_ll(TZFILE)
   CFILE = "                            "
 ELSE
   WRITE(ILUOUT,*) 'Error for closing a file: '
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index aace54650b4018634d1698a7c30db794431ec847..8847d6397cb38159c677d5e5e330166dec527152 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -190,7 +190,6 @@ LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file
 INTEGER :: ISTEPBAL   ! loop indice for balloons and aircraft
 INTEGER :: ILUNAM      ! Logical unit numbers for the namelist file
                        ! and for output_listing file
-CHARACTER (LEN=9) :: YNAM ! name of the namelist file
 INTEGER        :: JF =0   !  loop index
 LOGICAL :: GFOUND         ! Return code when searching namelist
 LOGICAL, DIMENSION(:,:),ALLOCATABLE     :: GMASKkids ! kids domains mask
@@ -202,7 +201,8 @@ INTEGER :: IINFO_ll               ! return code for _ll routines
 REAL, DIMENSION(:,:),ALLOCATABLE          :: ZSEA,ZTOWN
 REAL, DIMENSION(:,:,:,:),ALLOCATABLE          :: ZWETDEPAER
 !
-TYPE(TFILEDATA),POINTER :: TZDIACFILE
+TYPE(TFILEDATA),POINTER :: TZDIACFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL() !Namelist file
 !
 NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS,   &
                    NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND,  &
@@ -236,8 +236,6 @@ NAMELIST/NAM_CONF_DIAG/JPHEXT, NHALO
 !*       0.0   Initializations
 !              ---------------
 !
-TZDIACFILE => NULL()
-!
 CALL GOTO_MODEL(1)
 !
 CALL VERSION
@@ -376,9 +374,9 @@ XISOTH(:)=0.
 !*       1.0   Namelist reading
 !              ----------------
 !
-YNAM  = 'DIAG1.nam'
-CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', &
-     FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'DIAG1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+ILUNAM = TZNMLFILE%NLU
 !
 !
 CALL POSNAM(ILUNAM,'NAM_DIAG',GFOUND)
@@ -410,7 +408,7 @@ IF (GFOUND) THEN
 END IF
 CALL SET_CONFIO_ll()
 !
-CALL CLOSE_ll(YNAM)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 CINIFILEPGD = YINIFILEPGD(1)
diff --git a/src/MNH/fill_zsmtn.f90 b/src/MNH/fill_zsmtn.f90
index a9594686aa8a04fc516c3ee908dac03d670af521..cf64fb3d152390c0af9f52c500a1e61f82251a13 100644
--- a/src/MNH/fill_zsmtn.f90
+++ b/src/MNH/fill_zsmtn.f90
@@ -66,7 +66,6 @@ END MODULE MODI_FILL_ZSMTn
 !*       0.    DECLARATIONS
 !
 USE MODD_GRID_n,  ONLY : XZSMT
-USE MODD_LUNIT_n, ONLY : CLUOUT
 USE MODD_LBC_n,   ONLY : CLBCX,CLBCY
 USE MODD_NESTING
 USE MODD_PARAMETERS
@@ -143,7 +142,7 @@ DPTR_CLBCY=>CLBCY
 DPTR_XZSMT=>XZSMT
 CALL SPAWN_ZS(NXOR_ALL(KSON),NXEND_ALL(KSON),NYOR_ALL(KSON),NYEND_ALL(KSON), &
               NDXRATIO_ALL(KSON),NDYRATIO_ALL(KSON),IDIMX,IDIMY,DPTR_CLBCX,DPTR_CLBCY,         &
-              CLUOUT,PFIELD,DPTR_XZSMT,HFIELD                             )
+              PFIELD,DPTR_XZSMT,HFIELD                             )
 !-------------------------------------------------------------------------------
 !
 CALL GOTO_MODEL(IMI)
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 042e91eb741c8014e0a98752465dab47a5efefa3..6dd30005fe55d8a7316ec818e286651fca2ad0ce 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -253,8 +253,10 @@ CHARACTER (LEN=4)  :: YSCONV
 CHARACTER (LEN=4)  :: YCLOUD
 CHARACTER (LEN=4)  :: YELEC
 CHARACTER (LEN=3)  :: YEQNSYS
+TYPE(TFILEDATA),POINTER :: TZFILE_DES
 !
-TPINIFILE => NULL()
+TPINIFILE  => NULL()
+TZFILE_DES => NULL()
 !-------------------------------------------------------------------------------
 !
 !*       1.    OPEN OUPTUT-LISTING FILE AND EXSEG FILE
@@ -276,9 +278,9 @@ WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/,  &
 !
 IF (CPROGRAM=='MESONH') THEN
   YEXSEG='EXSEG'//TRIM(ADJUSTL(YMI))//'.nam'
-
-  CALL OPEN_ll(UNIT=ILUSEG,FILE=YEXSEG,IOSTAT=IRESP,ACTION='READ', &
-       DELIM='QUOTE',MODE='GLOBAL')
+  CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(YEXSEG),'NML','READ')
+  CALL IO_FILE_OPEN_ll(TZFILE_DES)
+  ILUSEG=TZFILE_DES%NLU
 !
 !*       1.3   SPAWNING or SPEC or REAL program case
 !              ---------------------
@@ -475,7 +477,7 @@ END IF
 !*      7.    CLOSE  FILES
 !             ------------
 !
-IF (CPROGRAM=='MESONH') CALL CLOSE_ll(YEXSEG,IOSTAT=IRESP)
+IF (CPROGRAM=='MESONH') CALL IO_FILE_CLOSE_ll(TZFILE_DES)
 !
 !-------------------------------------------------------------------------------
 9002  FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3)
diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90
index 2f9223c5d24262eaa74c0f1ea72ba101facc358d..31890a4b901caa6c40945235c6d2af157259fe42 100644
--- a/src/MNH/latlon_to_xy.f90
+++ b/src/MNH/latlon_to_xy.f90
@@ -103,7 +103,8 @@ REAL    :: ZXHAT               ! output conformal coodinate x
 REAL    :: ZYHAT               ! output conformal coodinate y
 INTEGER :: II,IJ               ! indexes of the point
 REAL    :: ZI,ZJ               ! fractionnal indexes of the point
-TYPE(TFILEDATA),POINTER :: TZINIFILE
+TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL()
 !
 !*    0.3    Declaration of namelists
 !            ------------------------
@@ -127,13 +128,14 @@ CALL INI_CST
 !
 CALL INITIO_ll()
 !
-CALL OPEN_ll(UNIT=INAM,FILE='LATLON2XY1.nam',IOSTAT=IRESP,ACTION='READ', &
-     DELIM='QUOTE',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 !
 READ(INAM,NAM_CONFIO)
 CALL SET_CONFIO_ll()
-CALL CLOSE_ll('LATLON2XY1.nam',IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index 49e7aac215ba5237d813f5ab214eeb6f051252b5..5222ada3eea5e5fd900530e3bb0030e00bd6bb3d 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -24,7 +24,7 @@
 !
 USE MODD_MNH2LPDM
 USE MODD_CONF, ONLY : CPROGRAM
-USE MODD_IO_ll,ONLY : TPTR2FILE
+USE MODD_IO_ll,ONLY : TFILEDATA,TPTR2FILE
 !
 USE MODE_FM
 USE MODE_IO_ll
@@ -48,6 +48,7 @@ INTEGER           :: IFMTO,IFGRI,IFDAT  ! Unite METEO et GRILLE.
 INTEGER           :: IREP,IVERB,JFIC
 LOGICAL :: GFOUND         ! Return code when searching namelist
 TYPE(TPTR2FILE),DIMENSION(JPMNHMAX) :: TZFMNH  ! MesoNH files
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL() ! Namelist file
 !
 !
 !
@@ -79,9 +80,10 @@ CALL OPEN_LL(UNIT=IFLOG,FILE=YFLOG,IOSTAT=IREP,FORM='FORMATTED', &
 !
 !*	1.4 Lecture des namelists.
 !
-CALL OPEN_LL(UNIT=IFNML,FILE=YFNML,IOSTAT=IREP,FORM='FORMATTED', &
-     ACTION='READ',MODE='GLOBAL')
-print *,'Ouverture fichier Namlist OK'
+CALL IO_FILE_ADD2LIST(TZNMLFILE,YFNML,'NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+IFNML = TZNMLFILE%NLU
+
 READ(UNIT=IFNML,NML=NAM_TURB)
 READ(UNIT=IFNML,NML=NAM_FIC)
 print *,'Lecture de NAM_FIC OK.'
@@ -94,7 +96,7 @@ LCDF4 = .FALSE.
 LLFIOUT  = .FALSE.
 LLFIREAD = .FALSE.
 CALL SET_CONFIO_ll()
-CALL CLOSE_LL(YFNML,IREP,'KEEP')
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 !
 !*	1.5 Comptage des FM a traiter.
diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90
index aa52de069b03901d2843bcb05dd09bb59c2a008b..e52b209242d0159530f9b496ac11b9a082635784 100644
--- a/src/MNH/mnhclose_namelist.f90
+++ b/src/MNH/mnhclose_namelist.f90
@@ -57,15 +57,17 @@ END MODULE MODI_MNHCLOSE_NAMELIST
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
+USE MODD_CONF,        ONLY : CPROGRAM
+USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_IO_NAM,      ONLY : CNAM
+USE MODD_LUNIT,       ONLY : CLUOUT0
+!
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_ll
 USE MODE_MSG
 !
-USE MODD_LUNIT,       ONLY : CLUOUT0
-USE MODD_CONF,        ONLY : CPROGRAM
-USE MODD_IO_NAM,      ONLY : CNAM
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -84,8 +86,11 @@ INTEGER           :: INAM           ! logical unit of namelist
 INTEGER           :: IMI            ! model index
 INTEGER           :: ILUOUT         ! output listing logical unit
 CHARACTER(LEN=16) :: YLUOUT         ! output listing file name
+TYPE(TFILEDATA),POINTER :: TZFILE
 !-------------------------------------------------------------------------------
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHCLOSE_NAMELIST','called for '//TRIM(CNAM))
+!
 SELECT CASE(CPROGRAM)
   CASE('REAL  ','IDEAL ','DIAG  ')
     YLUOUT = CLUOUT0
@@ -99,9 +104,12 @@ END SELECT
 !* closes the namelist
 !  -------------------
 !
+TZFILE => NULL()
+CALL IO_FILE_FIND_BYNAME(TRIM(CNAM),TZFILE,IRESP)
+!
 CALL FMLOOK_ll(CNAM,YLUOUT,INAM,IRESP)
 IF (INAM==KLUNAM) THEN
-  CALL CLOSE_ll(CNAM,IRESP)
+  CALL IO_FILE_CLOSE_ll(TZFILE)
   CNAM = "                            "
 ELSE
   CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP)
diff --git a/src/MNH/mnhget_desfmn.f90 b/src/MNH/mnhget_desfmn.f90
index e282ced5bb5c4317b68ff5e6f10506942d52d779..68e10f405c5f002da98164a9b56bdd9ab199f21b 100644
--- a/src/MNH/mnhget_desfmn.f90
+++ b/src/MNH/mnhget_desfmn.f90
@@ -78,7 +78,6 @@ INTEGER, INTENT(OUT) :: KLUDES ! logical unit of .des file
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER           :: ILUOUT         !
 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
                                     ! at the open of the file in LFI  routines
 INTEGER           :: IMI            ! model index
@@ -92,7 +91,7 @@ CHARACTER(LEN=32) :: YDESFM         ! .des file name
 !*       1.    initialisation of logical unit of output listing
 !
 SELECT CASE(CPROGRAM)
-  CASE('REAL  ','IDEAL ','DIAG  ')
+  CASE('REAL  ','IDEAL ','DIAG  ','PGD   ')
     YLUOUT = CLUOUT0
   CASE('MESONH','SPAWN ')
     IMI = GET_CURRENT_MODEL_INDEX() 
@@ -101,8 +100,6 @@ SELECT CASE(CPROGRAM)
     YLUOUT = ''
 END SELECT
 !
-CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP)
-!
 !*       2.    initialisation of logical units of  .des files
 !
 YDESFM =' '
diff --git a/src/MNH/mnhopen_namelist.f90 b/src/MNH/mnhopen_namelist.f90
index 130b16abf531856aeca38806d366993b0ea3f1ab..fa2675d38ddce0f74219330f805a9eae98ac7b9f 100644
--- a/src/MNH/mnhopen_namelist.f90
+++ b/src/MNH/mnhopen_namelist.f90
@@ -58,12 +58,17 @@ END MODULE MODI_MNHOPEN_NAMELIST
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODE_IO_ll
-USE MODE_FM
 USE MODD_CONF,        ONLY : CPROGRAM
-USE MODD_LUNIT,       ONLY : CLUOUT0
+USE MODD_IO_ll,       ONLY : TFILEDATA
 USE MODD_IO_NAM,      ONLY : CNAM
+USE MODD_LUNIT,       ONLY : CLUOUT0
+!
+USE MODE_FM
+USE MODE_IO_ll
+USE MODE_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_MSG
+USE MODE_IO_MANAGE_STRUCT, ONLY : io_file_print_list
 !
 IMPLICIT NONE
 !
@@ -81,18 +86,10 @@ INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
                                     ! at the open of the file in LFI  routines 
 INTEGER           :: IMI            ! model index
 !
-INTEGER           :: ILUOUT         ! output listing logical unit
-CHARACTER(LEN=16) :: YLUOUT         ! output listing file name
+TYPE(TFILEDATA),POINTER :: TZFILE
 !-------------------------------------------------------------------------------
 !
-SELECT CASE(CPROGRAM)
-  CASE('MESONH','SPAWN ')
-    CALL GET_MODEL_NUMBER_ll  (IMI)
-    WRITE(YLUOUT,FMT='(A14,I1,A1)') 'OUTPUT_LISTING',IMI,' '
-  CASE DEFAULT
-    YLUOUT = CLUOUT0
-END SELECT
-!
+TZFILE => NULL()
 !-------------------------------------------------------------------------------
 !
 !* reading of namelist
@@ -109,6 +106,7 @@ ELSE
   CASE('IDEAL ')
     CNAM='PRE_IDEA1.nam'
   CASE('MESONH')
+    CALL GET_MODEL_NUMBER_ll(IMI)
     WRITE(CNAM,FMT='(A5,I1,A22)') 'EXSEG',IMI,'.nam                  '
   CASE('DIAG  ')
     CNAM='DIAG1.nam    '
@@ -121,13 +119,16 @@ ELSE
   CASE('SPEC ')
     CNAM='SPEC1.nam'
   CASE DEFAULT
-     print*,"MNHOPEN_NAMELIST :: CPROGRAM=", CPROGRAM,"####"
-     STOP "MNHOPEN_NAMELIST : CPROGRAM NOT ALLOWED " 
+    CALL PRINT_MSG(NVERB_FATAL,'IO','MNHOPEN_NAMELIST','CPROGRAM '//TRIM(CPROGRAM)//' not allowed')
  END SELECT
 END IF
 !
-CALL OPEN_ll(KLUNAM,FILE=CNAM,IOSTAT=IRESP,ACTION='READ', &
-             FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(CNAM))
+!
+CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
+CALL IO_FILE_OPEN_ll(TZFILE)
+!
+KLUNAM = TZFILE%NLU
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/open_file_mnh.f90 b/src/MNH/open_file_mnh.f90
index 9f4589ecd82fad6e5735c88bd11287d227309be7..d35e50203a73add16ec868130b34b48a2e71b568 100644
--- a/src/MNH/open_file_mnh.f90
+++ b/src/MNH/open_file_mnh.f90
@@ -61,9 +61,14 @@ END MODULE MODI_OPEN_FILE_MNH
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_IO_ll
+USE MODD_IO_ll,  ONLY : TFILEDATA
 USE MODD_IO_NAM, ONLY : CFILE
 !
+USE MODE_FM, ONLY : IO_FILE_OPEN_ll
+USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_MSG
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -80,24 +85,22 @@ INTEGER,           INTENT(IN) :: KRECL    ! record length
 !              -------------------------------
 !
 INTEGER :: IRESP
+TYPE(TFILEDATA),POINTER :: TZFILE
 !
 !-------------------------------------------------------------------------------
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILE_MNH','called for '//TRIM(HFILE))
+!
+TZFILE => NULL()
+!
 CFILE = HFILE
 !
-IF (HFORM=='FORMATTED') THEN
-  CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION,   &
-               FORM=HFORM, MODE='GLOBAL'                            )
-ELSE 
-  IF (HACCESS=='DIRECT') THEN
-    CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION,   &
-                 FORM=HFORM,ACCESS=HACCESS,RECL=KRECL,                &
-                 MODE='GLOBAL'                                        )
-  ELSE
-    CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION,   &
-                 FORM=HFORM, MODE='GLOBAL'                             )
-  END IF
-END IF
+CALL IO_FILE_ADD2LIST(TZFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
+                      HFORM=HFORM,HACCESS=HACCESS,KRECL=KRECL,   &
+                      OOLD=.TRUE.) !OOLD=T because the file may already be in list
+CALL IO_FILE_OPEN_ll(TZFILE)
+!
+KUNIT = TZFILE%NLU
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index c34b9dbb9b191e6f1336dbb8823320bc95235929..8fc74d0b33041bb818e9322436ce2c3893c9b267 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -129,6 +129,7 @@ INTEGER           :: NHALO_MNH
 !
 INTEGER           :: ILUOUT  ! Logical unit number for the EXSPA file
 TYPE(TFILEDATA),POINTER :: TZDADFILE
+TYPE(TFILEDATA),POINTER :: TZPRE_NEST_PGD
 !
 !*       0.3   Declaration of namelists
 !              ------------------------
@@ -145,6 +146,9 @@ NAMELIST/NAM_NEST_PGD/ YNEST
 NAMELIST/NAM_CONF_NEST/JPHEXT, NHALO_MNH
 !-------------------------------------------------------------------------------
 !
+TZDADFILE      => NULL()
+TZPRE_NEST_PGD => NULL()
+!
 !*       1.    SET DEFAULT NAMES
 !              -----------------
 !
@@ -168,8 +172,9 @@ ILUOUT0=TLUOUT0%NLU
 !*       3.    OPENNING OF PRE_NEST_PGD1.nam
 !              -----------------------------
 !
-CALL OPEN_ll(UNIT=IPRE_NEST_PGD,FILE=HPRE_NEST_PGD,IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
+CALL IO_FILE_OPEN_ll(TZPRE_NEST_PGD)
+IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU
 !reading of NAM_CONFZ
 CALL FMLOOK_ll(HPRE_NEST_PGD,HPRE_NEST_PGD,ILUOUT,IRESP)
 CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND)
@@ -313,8 +318,7 @@ DO JPGD=1,NMODEL
                         'WRITE',KLFITYPE=1,KLFIVERB=NVERB,TPDADFILE=TZDADFILE)
 END DO
 !
-!-------------------------------------------------------------------------------
-CALL CLOSE_ll(HPRE_NEST_PGD)
+CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD)
 !-------------------------------------------------------------------------------
 !
 !*       7.    OPENING OF INPUT AND OUTPUT PGD FILES
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index 61fad6ff4e857a984ea1f8d4af7d1351919a9a42..d8219d640e3a54e9ca7c9e537da4cb3c6beae48d 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -12,16 +12,17 @@
 !     ##########################
 !
 INTERFACE
-      SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE,   &
-                                           HCHEMFILE,HCHEMFILETYPE, &
-                                           HSURFFILE,HSURFFILETYPE, &
-                                           HPGDFILE,TPPGDFILE)
+      SUBROUTINE OPEN_PRC_FILES(TPPRE_REAL1FILE,HATMFILE,HATMFILETYPE,TPATMFILE, &
+                                                HCHEMFILE,HCHEMFILETYPE, &
+                                                HSURFFILE,HSURFFILETYPE, &
+                                                HPGDFILE,TPPGDFILE)
 !
 USE MODD_IO_ll, ONLY: TFILEDATA
 !
-CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1   ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
 CHARACTER(LEN=6),  INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file
+TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPATMFILE ! physiographic data file
 CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE    ! name of the input chemical file
 CHARACTER(LEN=6),  INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file
 CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE    ! name of the input surface file
@@ -34,10 +35,10 @@ END INTERFACE
 END MODULE MODI_OPEN_PRC_FILES
 !
 !     ###############################################################
-      SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE,   &
-                                           HCHEMFILE,HCHEMFILETYPE, &
-                                           HSURFFILE,HSURFFILETYPE, &
-                                           HPGDFILE,TPPGDFILE)
+      SUBROUTINE OPEN_PRC_FILES(TPPRE_REAL1FILE,HATMFILE,HATMFILETYPE,TPATMFILE, &
+                                                HCHEMFILE,HCHEMFILETYPE, &
+                                                HSURFFILE,HSURFFILETYPE, &
+                                                HPGDFILE,TPPGDFILE)
 !     ###############################################################
 !
 !!****  *OPEN_PRC_FILES* - openning of the files used in PREP_REAL_CASE
@@ -123,9 +124,10 @@ IMPLICIT NONE
 !*       0.1   Declaration of arguments
 !              ------------------------
 !
-CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1   ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
 CHARACTER(LEN=6),  INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file
+TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPATMFILE ! physiographic data file
 CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE    ! name of the input chemical file
 CHARACTER(LEN=6),  INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file
 CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE    ! name of the input surface file
@@ -137,7 +139,7 @@ TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPGDFILE ! physiographic data file
 !              ------------------------------
 !
 INTEGER :: IRESP      ! return-code if problems eraised
-INTEGER :: IPRE_REAL1 ! logical unit for file HPRE_REAL1
+INTEGER :: IPRE_REAL1 ! logical unit for file PRE_REAL1
 INTEGER :: ILUOUT0    ! logical unit for listing file
 INTEGER :: ININAR     ! number of articles initially present in a FM file
 LOGICAL :: GFOUND     ! Return code when searching namelist
@@ -162,7 +164,6 @@ HCHEMFILE='                            '
 HCHEMFILETYPE='MESONH'
 HSURFFILE='                            '
 HSURFFILETYPE='MESONH'
-HPRE_REAL1='PRE_REAL1.nam               '
 CLUOUT0   ='OUTPUT_LISTING0             '
 CLUOUT = CLUOUT0
 !
@@ -184,8 +185,9 @@ IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
 !*       3.    OPENNING OF PRE_REAL1.nam
 !              -------------------------
 !
-CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
-     DELIM='QUOTE',MODE='GLOBAL',STATUS='OLD')
+CALL IO_FILE_ADD2LIST(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TPPRE_REAL1FILE,KRESP=IRESP)
+IPRE_REAL1=TPPRE_REAL1FILE%NLU
 IF (IRESP.NE.0 ) THEN
    !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES','file PRE_REAL1.nam not found')
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 509ad5ba2ad931ec8f20f62cad5ee89fbc599dab..40df2ddbc9e9982bfb57c9e181f6b1cc35198a09 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -575,6 +575,7 @@ REAL              :: XHSLOP=1.2           ! if LHSLOP filtering of slopes higher
 REAL              :: ZZS_MAX, ZZS_MAX_ll
 INTEGER           :: IJPHEXT
 !
+TYPE(TFILEDATA),POINTER :: TZEXPREFILE  => NULL()
 TYPE(TFILEDATA),POINTER :: TZFILE       => NULL()
 TYPE(TFILEDATA),POINTER :: TZFILEDUMMY  => NULL()
 TYPE(TFILEDATA),POINTER :: TZINIFILEPGD => NULL()
@@ -682,8 +683,9 @@ NLUOUT = TLUOUT0%NLU
 TLUOUT              => TLUOUT0
 TFILE_OUTPUTLISTING => TLUOUT0
 !
-CALL OPEN_ll(UNIT=NLUPRE,FILE=CEXPRE,IOSTAT=NRESP,ACTION='READ', &
-     DELIM='QUOTE',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZEXPREFILE,TRIM(CEXPRE),'NML','READ')
+CALL IO_FILE_OPEN_ll(TZEXPREFILE)
+NLUPRE=TZEXPREFILE%NLU
 !
 !*       3.2   read in NLUPRE the namelist informations
 !
@@ -907,7 +909,7 @@ IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE.
 !
 !*       4.1  Vertical Spatial grid 
 !
-CALL READ_VER_GRID(CEXPRE)
+CALL READ_VER_GRID(TZEXPREFILE)
 !
 !*       4.2  Initialize parallel variables and compute array's dimensions
 !
@@ -1722,7 +1724,7 @@ END IF
 !  before calling chemistry
 CCONF = 'START'
 CSTORAGE_TYPE='TT'                  
-CALL CLOSE_ll(CEXPRE,IOSTAT=NRESP)  ! Close the EXPRE file 
+CALL IO_FILE_CLOSE_ll(TZEXPREFILE)  ! Close the EXPRE file
 !
 IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB)
 !
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 86b617a1e1d72dc17512c56cc1e6f4f4052c31bf..23e5dae77545e103ce01329992d63ebed316c856 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -139,7 +139,8 @@ REAL, DIMENSION(:,:),ALLOCATABLE   :: ZWORK_LAT ! work array for lat and lon res
 REAL, DIMENSION(:,:),ALLOCATABLE   :: ZWORK_LON ! work array for lat and lon reshape
 INTEGER           :: IIMAX, IJMAX
 INTEGER           :: NHALO_MNH 
-TYPE(TFILEDATA),POINTER :: TZFILE
+TYPE(TFILEDATA),POINTER :: TZFILE     => NULL()
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL() ! Namelist file
 !
 NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO
 NAMELIST/NAM_ZSFILTER/NZSFILTER,LHSLOP,XHSLOP
@@ -151,8 +152,6 @@ CALL MPPDB_INIT()
 !
 CPROGRAM='PGD   '
 !
-TZFILE => NULL()
-!
 !*    1.      Set default names and parallelized I/O
 !             --------------------------------------
 !
@@ -171,8 +170,9 @@ LUNIT_MODEL(1)%TLUOUT => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
 !JUAN
-CALL OPEN_ll(UNIT=ILUNAM,FILE='PRE_PGD1.nam',IOSTAT=IRESP,    &
-             FORM='FORMATTED',ACTION='READ',STATUS='OLD',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_PGD1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE,KRESP=IRESP)
+ILUNAM = TZNMLFILE%NLU
 IF (IRESP.NE.0 ) THEN
   WRITE(YMSG,*) 'file PRE_PGD1.nam not found, IRESP=', IRESP
  !callabortstop
@@ -200,7 +200,7 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL SET_CONFIO_ll()
 !
-CALL CLOSE_ll('PRE_PGD1.nam')
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 !
 CALL SURFEX_ALLOC_LIST(1)
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 19e1f6d578365185edc3e155d9b938d58506bff3..0b3eb434a93e0f87ea30a0d3bd975d472084eee4 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -476,7 +476,6 @@ IMPLICIT NONE
 !*       0.1   Declaration of local variables
 !              ------------------------------
 !
-CHARACTER(LEN=28)              :: YPRE_REAL1  ! name of the PRE_REAL1 file
 CHARACTER(LEN=28)              :: YATMFILE    ! name of the Atmospheric file
 CHARACTER(LEN=6)               :: YATMFILETYPE! type of the Atmospheric file
 CHARACTER(LEN=28)              :: YCHEMFILE    ! name of the Chemical file
@@ -521,6 +520,7 @@ LOGICAL  :: LUSECHEM
 !
 TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL()
 !
 !
 !*       0.3   Declaration of namelists
@@ -577,10 +577,10 @@ IDX_RVT = 1
 !              ---------------------
 CALL INITIO_ll()
 !
-CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE  &
-                              ,YCHEMFILE,YCHEMFILETYPE &
-                              ,YSURFFILE,YSURFFILETYPE &
-                              ,YPGDFILE,TZPGDFILE)
+CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
+                                   ,YCHEMFILE,YCHEMFILETYPE &
+                                   ,YSURFFILE,YSURFFILETYPE &
+                                   ,YPGDFILE,TZPGDFILE)
 ILUOUT0 = TLUOUT0%NLU
 TLUOUT => TLUOUT0
 !
@@ -621,7 +621,7 @@ CALL INI_CST
 !
 !*       4.1   reading of configuration variables
 !
-CALL FMLOOK_ll(YPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP)
+IPRE_REAL1 = TZPRE_REAL1FILE%NLU
 !
 CALL INIT_NMLVAR
 CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
@@ -641,7 +641,7 @@ IF (YATMFILETYPE == 'GRIBEX') THEN
 !*       4.1  Vertical Spatial grid 
 !
 CALL INIT_NMLVAR()
-CALL READ_VER_GRID(YPRE_REAL1)
+CALL READ_VER_GRID(TZPRE_REAL1FILE)
 !
 CALL IO_READ_FIELD(TZPGDFILE,'IMAX',NIMAX)
 CALL IO_READ_FIELD(TZPGDFILE,'JMAX',NJMAX)
@@ -723,12 +723,12 @@ ZMISC = ZTIME2 - ZTIME1
 ZTIME1 = ZTIME2
 !
 IF (YATMFILETYPE=='MESONH') THEN
-  CALL READ_ALL_DATA_MESONH_CASE(YPRE_REAL1,YATMFILE,TZPGDFILE,YDAD_NAME)
+  CALL READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,YDAD_NAME)
 ELSE IF (YATMFILETYPE=='GRIBEX') THEN
   IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX')THEN
-    CALL READ_ALL_DATA_GRIB_CASE('ATM1',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
+    CALL READ_ALL_DATA_GRIB_CASE('ATM1',TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
   ELSE
-    CALL READ_ALL_DATA_GRIB_CASE('ATM0',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
+    CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
   END IF
 !
   YDAD_NAME=' '
@@ -752,12 +752,12 @@ IF(LEN_TRIM(YCHEMFILE)>0)THEN
   CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
   IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
   IF(YCHEMFILETYPE=='GRIBEX') &
-  CALL READ_ALL_DATA_GRIB_CASE('CHEM',YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
+  CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
   IF (YCHEMFILETYPE=='NETCDF') &
-  CALL READ_CHEM_DATA_NETCDF_CASE(YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
+  CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
 END IF
 !
-CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
 !
 CALL SECOND_MNH(ZTIME2)
 ZREAD = ZTIME2 - ZTIME1 - ZHORI
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 03686b9f72209884557f5bb2da5217809d1830fe..11feb97529863f153478e63d2e45a29f3dfa3646 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -65,7 +65,6 @@ IMPLICIT NONE
 !*       0.1   Declaration of local variables
 !              ------------------------------
 !
-CHARACTER(LEN=28)     :: YPRE_REAL1      ! name of the PRE_REAL1 file
 CHARACTER(LEN=28)     :: YATMFILE        ! name of the Atmospheric file
 CHARACTER(LEN=6)      :: YATMFILETYPE    ! type of the Atmospheric file
 CHARACTER(LEN=28)     :: YCHEMFILE       ! name of the Chemical file (not used)
@@ -78,7 +77,6 @@ CHARACTER(LEN=28)     :: YPGDFILE        ! name of the physiographic data
 !* file management variables and counters
 !
 INTEGER               :: ILUOUT0         ! logical unit for listing file
-INTEGER               :: IPRE_REAL1      ! logical unit for namelist file
 INTEGER               :: IRESP           ! return code in FM routines
 INTEGER               :: ININAR          ! number of articles initially
                                                   ! present in a FM file
@@ -90,6 +88,7 @@ INTEGER               :: II, IJ, IGRID, ILENGTH
 TYPE(TFILEDATA),POINTER :: TZFILE    => NULL()
 TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL()
 !
 !-------------------------------------------------------------------------------
 !
@@ -109,10 +108,10 @@ CSTORAGE_TYPE='SU'
 !              ---------------------
 CALL INITIO_ll()
 !
-CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE  &
-                              ,YCHEMFILE,YCHEMFILETYPE &
-                              ,YSURFFILE,YSURFFILETYPE &
-                              ,YPGDFILE,TZPGDFILE)
+CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
+                                   ,YCHEMFILE,YCHEMFILETYPE &
+                                   ,YSURFFILE,YSURFFILETYPE &
+                                   ,YPGDFILE,TZPGDFILE)
 ILUOUT0 = TLUOUT0%NLU
 !
 CPGDFILE = YPGDFILE
@@ -135,10 +134,8 @@ CALL INI_CST
 !
 !*       4.1   reading of configuration variables
 !
-CALL FMLOOK_ll(YPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP)
+CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
 !
-CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP)
-
 !*       4.2   reading of values of some configuration variables in namelist
 !
 CALL INI_FIELD_LIST(1)
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 71d7cee6a99c06d5efbe078d955490ecc04cbdee..8065c2f606d91cc0d2137f1303c0d31276229225 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -12,13 +12,13 @@
       MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !     #################################
 INTERFACE
-SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE,     &
+SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE,    &
                     PTIME_HORI,KVERB,ODUMMY_REAL                         ) 
 !
 USE MODD_IO_ll, ONLY: TFILEDATA
 !
 CHARACTER(LEN=4),  INTENT(IN)    :: HFILE       ! which file ('ATM0','ATM1' or 'CHEM')
-CHARACTER(LEN=28), INTENT(IN)    :: HPRE_REAL1  ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HGRIB       ! name of the GRIB file
 TYPE(TFILEDATA),   INTENT(IN)    :: TPPGDFILE   ! physiographic data file
 INTEGER,           INTENT(IN)    :: KVERB       ! verbosity level
@@ -30,7 +30,7 @@ END SUBROUTINE READ_ALL_DATA_GRIB_CASE
 END INTERFACE
 END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !     ##########################################################################
-      SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE,     &
+      SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE,    &
                        PTIME_HORI,KVERB,ODUMMY_REAL                            )
 !     ##########################################################################
 !
@@ -182,7 +182,7 @@ IMPLICIT NONE
 !       ------------------------
 !
 CHARACTER(LEN=4),  INTENT(IN)    :: HFILE       ! which file ('ATM0','ATM1' or 'CHEM')
-CHARACTER(LEN=28), INTENT(IN)    :: HPRE_REAL1  ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HGRIB       ! name of the GRIB file
 TYPE(TFILEDATA),   INTENT(IN)    :: TPPGDFILE   ! physiographic data file
 INTEGER,           INTENT(IN)    :: KVERB       ! verbosity level
@@ -1402,9 +1402,9 @@ IF (ODUMMY_REAL) THEN
   !*       2.10.1   read 2D dummy fields
   !
   ! close file
-  CALL CLOSE_ll(HPRE_REAL1,IOSTAT=IRET)
+  CALL IO_FILE_CLOSE_ll(TPPRE_REAL1)
   ! open input file
-  CALL CH_OPEN_INPUT(HPRE_REAL1, "DUMMY_2D", ICHANNEL, ILUOUT0, KVERB)
+  CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", ICHANNEL, ILUOUT0, KVERB)
   !
   ! read number of dummy 2D fields to transfer into mesonh
   READ(ICHANNEL, *) IMOC
@@ -1518,7 +1518,7 @@ ENDIF
 !
 IF (HFILE(1:3)=='ATM') THEN
   WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress'
-  CALL READ_VER_GRID(HPRE_REAL1)
+  CALL READ_VER_GRID(TPPRE_REAL1)
 END IF
 
 !
diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90
index 70c1d45337b93ba36fa4a97bbb2873779cf57971..2850e89015043d36178ee51d8c1df1bddc90239a 100644
--- a/src/MNH/read_all_data_mesonh_case.f90
+++ b/src/MNH/read_all_data_mesonh_case.f90
@@ -12,12 +12,12 @@
 MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !####################################
 INTERFACE
-      SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, &
-                              HDAD_NAME                                  )
+      SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, &
+                              HDAD_NAME                                   )
 !
 USE MODD_IO_ll, ONLY: TFILEDATA
 !
-CHARACTER(LEN=28), INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HFMFILE    ! name of the Mesonh input file
 TYPE(TFILEDATA),   INTENT(IN)    :: TPPGDFILE  ! physiographic data file
 CHARACTER(LEN=*),  INTENT(INOUT) :: HDAD_NAME  ! true name of the Mesonh input file
@@ -28,10 +28,10 @@ END INTERFACE
 !
 END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !
-!     ####################################################################
-      SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, &
-                              HDAD_NAME                                  )
-!     ####################################################################
+!     #####################################################################
+      SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, &
+                              HDAD_NAME                                   )
+!     #####################################################################
 !
 !!****  *READ_ALL_DATA_MESONH_CASE* - reads data for the initialization of real cases.
 !! 
@@ -117,8 +117,9 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_IO_ll
+USE MODE_FM
 USE MODE_FMREAD
+USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules
@@ -163,7 +164,7 @@ IMPLICIT NONE
 !*       0.1   Declaration of arguments
 !              ------------------------
 !
-CHARACTER(LEN=28), INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HFMFILE    ! name of the Mesonh input file
 TYPE(TFILEDATA),   INTENT(IN)    :: TPPGDFILE  ! physiographic data file
 CHARACTER(LEN=*),  INTENT(INOUT) :: HDAD_NAME  ! true name of the Mesonh input file
@@ -228,10 +229,9 @@ ZRES    = XRES
 YOUTFILE=CINIFILE
 CINIFILE=HFMFILE
 !
-CALL CLOSE_ll(HPRE_REAL1, IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TZPRE_REAL1)
 CALL INIT_MNH
-CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
-     DELIM='QUOTE',MODE='GLOBAL',STATUS='OLD')
+CALL IO_FILE_OPEN_ll(TZPRE_REAL1)
 !
 CINIFILE=YOUTFILE
 !
@@ -267,7 +267,7 @@ IJSUP_LS = NJMAX + 2* JPHEXT
 !*            5. Reading of vertical grid
 !                ------------------------
 !
-CALL READ_VER_GRID(HPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS)
+CALL READ_VER_GRID(TZPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS)
 !
 !*            6. Add a bogus vortex from observations (radar, satellite,...)
 !                -----------------------------------------------------------
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index b115be48d4de07aee11b6f86f49d43b9c9b2309f..20537716fd8da854cb934a219e2a60537d3d5bfb 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -2,12 +2,12 @@
       MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !     #################################
 INTERFACE
-SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE,  &
+SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, &
                                       PTIME_HORI,KVERB,ODUMMY_REAL ) 
 !
 USE MODD_IO_ll, ONLY: TFILEDATA
 !
-CHARACTER(LEN=28),  INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file
 CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
 TYPE(TFILEDATA),    INTENT(IN)    :: TPPGDFILE  ! physiographic data file
 REAL,               INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations
@@ -18,7 +18,7 @@ END SUBROUTINE READ_CHEM_DATA_NETCDF_CASE
 END INTERFACE
 END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !     ####################################################################
-      SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE,  &
+      SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, &
                                             PTIME_HORI,KVERB,ODUMMY_REAL ) 
 !     ####################################################################
 !
@@ -131,7 +131,7 @@ IMPLICIT NONE
 !* 0.1. Declaration of arguments
 !       ------------------------
 !
-CHARACTER(LEN=28),  INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file
 CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
 TYPE(TFILEDATA),    INTENT(IN)    :: TPPGDFILE  ! physiographic data file
 REAL,               INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations
@@ -735,7 +735,7 @@ CALL CLOSE_ll(YMOZ,IOSTAT=IRET)
 !* 4.1 Read VERTICAL GRID
 !
 WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress'
-CALL READ_VER_GRID(HPRE_REAL1)
+CALL READ_VER_GRID(TPPRE_REAL1)
 !
 !--------------------------------------------------------------
 !
diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90
index 0cec68dfa8019854ed779f949f34af7b86f4e26b..eecbe662a9a69e169aa72c6b398fbf987fbe6c6e 100644
--- a/src/MNH/read_exspa.f90
+++ b/src/MNH/read_exspa.f90
@@ -105,11 +105,11 @@ END MODULE MODI_READ_EXSPA
 !               ------------
 !
 USE MODD_CONF
-USE MODD_IO_ll,   ONLY : TFILE_OUTPUTLISTING
+USE MODD_IO_ll,   ONLY : TFILEDATA,TFILE_OUTPUTLISTING
 USE MODD_LUNIT_n, ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS
 !
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll
+USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_POS
@@ -150,7 +150,6 @@ LOGICAL,            INTENT(OUT) :: OBAL_ONLY      ! compute anelastique balance
 INTEGER :: IRESP    ! Return codes in FM routines
 INTEGER :: ILUOUT   ! Logical unit number for the output listing 
 INTEGER :: ILUSPA   ! Logical unit number for the EXSPA file
-CHARACTER (LEN=32) :: YEXSPA          ! Name of the EXSPA file
 LOGICAL :: GFOUND   ! Return code when searching namelist
 !
 !* prefixes in the namelists are such because of code history
@@ -171,6 +170,7 @@ CHARACTER(LEN=28) :: CINIFILE    ! re-declaration because of namelist
 CHARACTER(LEN=28) :: CINIFILEPGD ! re-declaration because of namelist
 
 CHARACTER (LEN=28) :: YSONFILE = ' '  ! Name of SON input file
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  ! Namelist file
 !
 !*       0.3    Namelist declarations
 !
@@ -197,6 +197,8 @@ NAMELIST/NAM_LUNIT2_SPA/ CINIFILE,  &! In file name (model 1)
 !
 !*       1.    initialize logical unit number of the EXSPA file :
 !
+TZNMLFILE  => NULL()
+!
 YDOMAIN     = ' '
 YSPAFILE    = ' '
 YSPANBR     = '00'
@@ -212,9 +214,9 @@ TFILE_OUTPUTLISTING => LUNIT_MODEL(2)%TLUOUT
 !
 ILUOUT=LUNIT_MODEL(2)%TLUOUT%NLU
 !
-YEXSPA  = 'SPAWN1.nam'
-CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
-             form='FORMATTED',position="REWIND",mode='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPAWN1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+ILUSPA = TZNMLFILE%NLU
 !
 !
 !*       2.    read the EXSPA file :
@@ -242,7 +244,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFIO',GFOUND,ILUOUT)
 IF (GFOUND) READ(ILUSPA,NAM_CONFIO)
 !
 CALL SET_CONFIO_ll()
-CALL CLOSE_ll(YEXSPA)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 !
 !*       3.    model 1 and SON1 FM file name (passed as arguments)
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index ec7e6bb775cb0fc1ccd1f0dce945d9e0dd2cddfb..0bb587beb87a96e72da5ed5bb746edb19fc4f04e 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -12,9 +12,11 @@
       MODULE MODI_READ_VER_GRID
 !     #########################
 INTERFACE
-      SUBROUTINE READ_VER_GRID(HPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
+      SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
 !
-CHARACTER(LEN=*),             INTENT(IN) :: HPRE_REAL1 ! name of the namelist file
+USE MODD_IO_ll, ONLY : TFILEDATA
+!
+TYPE(TFILEDATA),POINTER,      INTENT(IN) :: TPPRE_REAL1! namelist file
 REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PZHAT      ! vertival grid of input fmfile
 LOGICAL,            OPTIONAL, INTENT(IN) :: OSLEVE     ! flag for SLEVE coordinate
 REAL,               OPTIONAL, INTENT(IN) :: PLEN1      ! Decay scale for smooth topography
@@ -24,9 +26,9 @@ END SUBROUTINE READ_VER_GRID
 END INTERFACE
 END MODULE MODI_READ_VER_GRID
 !
-!     ##########################################
-      SUBROUTINE READ_VER_GRID(HPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
-!     ##########################################
+!     ##############################################################
+      SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
+!     ##############################################################
 !
 !!****  *READ_VER_GRID* - reads namelist data in file PRE_REAL1 for the 
 !!                        initialization of the vertical grid for real cases.
@@ -67,10 +69,6 @@ END MODULE MODI_READ_VER_GRID
 !!      The NKMAX+1 levels are read in * format after the namelists, from 
 !!      ground level to rigid top level
 !!
-!!    EXTERNAL
-!!    --------
-!!    function FMLOOK  :to retrieve a logical unit number associated with a file
-!!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
 !!
@@ -107,25 +105,26 @@ END MODULE MODI_READ_VER_GRID
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_CONF           ! declaration modules
+USE MODD_DIM_n, NKMAX_n=>NKMAX
+USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2
+USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_LUNIT
+USE MODD_PARAMETERS
+!
 USE MODE_FM
 USE MODE_MSG
 USE MODE_POS
 !
 USE MODI_DEFAULT_SLEVE
 !
-USE MODD_CONF           ! declaration modules
-USE MODD_LUNIT
-USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2
-USE MODD_DIM_n, NKMAX_n=>NKMAX
-USE MODD_PARAMETERS
-USE MODD_CONF, ONLY : CCONF
 USE MODN_BLANK
 !
 IMPLICIT NONE
 !
 !*       0.1   Declaration of arguments
 !              ------------------------
-CHARACTER(LEN=*),             INTENT(IN) :: HPRE_REAL1 ! name of the namelist file
+TYPE(TFILEDATA),POINTER,      INTENT(IN) :: TPPRE_REAL1! namelist file
 LOGICAL,            OPTIONAL, INTENT(IN) :: OSLEVE     ! flag for SLEVE coordinate
 REAL,               OPTIONAL, INTENT(IN) :: PLEN1      ! Decay scale for smooth topography
 REAL,               OPTIONAL, INTENT(IN) :: PLEN2      ! Decay scale for small-scale topography deviation
@@ -166,7 +165,7 @@ NAMELIST/NAM_VER_GRID/ LTHINSHELL,NKMAX,YZGRID_TYPE,ZDZGRD,ZDZTOP,ZZMAX_STRGRD,Z
 !*       1.    READING OF THE NAMELIST IN FILE HPRE_REAL1 :  
 !              ------------------------------------------
 ILUOUT0 = TLUOUT0%NLU
-CALL FMLOOK_ll(HPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP)
+IPRE_REAL1 = TPPRE_REAL1%NLU
 !
 !*       1.1   Vertical grid default value
 !              ---------------------------
diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90
index d7da3f6da6a5faae4d331686cf36f02e2a02179e..62ab1131c7eb407a3cd3b15aa5c3611152903168 100644
--- a/src/MNH/reset_exseg.f90
+++ b/src/MNH/reset_exseg.f90
@@ -64,14 +64,17 @@ END MODULE MODI_RESET_EXSEG
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODE_POS
-USE MODE_IO_ll
+USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
 USE MODE_FMREAD
+USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_POS
 !
 USE MODD_DIAG_FLAG
 USE MODD_CH_MNHC_n, ONLY: LUSECHEM
 USE MODD_CONF_n, ONLY: LUSERV
 USE MODD_GET_n
+USE MODD_IO_ll,   ONLY: TFILEDATA
 USE MODD_PARAM_n, ONLY: CDCONV, CRAD
 USE MODN_PARAM_KAFR_n
 USE MODN_PARAM_RAD_n
@@ -85,21 +88,23 @@ CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT ! Name for output listing
 !
 !*       0.2   declarations of local variables
 !
-CHARACTER (LEN=9) :: YNAM      ! name of the namelist file
 INTEGER :: IRESP,ILUNAM        ! return code of FMLOOK and logical unit number
 LOGICAL :: GFOUND              ! Return code when searching namelist
 CHARACTER(LEN=100):: YCOMMENT       ! Comment string
 INTEGER           :: IGRID          ! IGRID : grid indicator
 INTEGER           :: ILENCH         ! ILENCH : length of comment string
+TYPE(TFILEDATA),POINTER :: TZNMLFILE! Namelist file
 !
 !-------------------------------------------------------------------------------
 !
 !*       1.    OPENING NAMELIST FILE
 !              ---------------------
 !
-YNAM  = 'DIAG1.nam'
-CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', &
-     FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL')
+TZNMLFILE  => NULL()
+!
+CALL IO_FILE_FIND_BYNAME('DIAG1.nam',TZNMLFILE,IRESP)
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+ILUNAM = TZNMLFILE%NLU
 !
 !-------------------------------------------------------------------------------
 !
@@ -177,6 +182,6 @@ PRINT*,' '
 !
 !-------------------------------------------------------------------------------
 !
-CALL CLOSE_ll(YNAM)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 END SUBROUTINE RESET_EXSEG
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index d5212659a497cc39871587153ec9742716429663..458c0dda94d6954e7a879a10296de5202a343ddf 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -12,12 +12,12 @@
       MODULE MODI_SET_SUBDOMAIN
 !     #########################
 INTERFACE
-      SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, &
+      SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, &
                                KXOR,KYOR,KDXRATIO,KDYRATIO            )
 !
 USE MODD_IO_ll, ONLY : TFILEDATA
 !
-CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file
+TYPE(TFILEDATA),   INTENT(IN) :: TPNMLFILE ! namelist file
 TYPE(TFILEDATA),   INTENT(IN) :: TPATMFILE ! atmospheric MNH file
 INTEGER,           INTENT(OUT):: KXOR_DAD  ! XOR compared to Dad file, if any
 INTEGER,           INTENT(OUT):: KYOR_DAD  ! YOR compared to Dad file, if any
@@ -31,7 +31,7 @@ END INTERFACE
 END MODULE MODI_SET_SUBDOMAIN
 !
 !     #################################################################
-      SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, &
+      SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, &
                                KXOR,KYOR,KDXRATIO,KDYRATIO            )
 !     #################################################################
 !
@@ -112,7 +112,7 @@ IMPLICIT NONE
 !*       0.1   Declaration of arguments
 !              ------------------------
 !
-CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file
+TYPE(TFILEDATA),   INTENT(IN) :: TPNMLFILE ! namelist file
 TYPE(TFILEDATA),   INTENT(IN) :: TPATMFILE ! atmospheric MNH file
 INTEGER,           INTENT(OUT):: KXOR_DAD  ! XOR compared to Dad file, if any
 INTEGER,           INTENT(OUT):: KYOR_DAD  ! YOR compared to Dad file, if any
@@ -181,15 +181,13 @@ NYOR=NUNDEF
 !*       2.2   Reading of the namelist file (or given as dummy argument)
 !              ---------------------------- 
 !
-CALL OPEN_ll(UNIT=ILUNAM,FILE=HNAMELIST,IOSTAT=IRESP,    &
-             FORM='FORMATTED',ACTION='READ',MODE='GLOBAL')
+ILUNAM = TPNMLFILE%NLU
 CALL POSNAM(ILUNAM,'NAM_MESONH_DOM',GFOUND,ILUOUT0)  
 IF (GFOUND) THEN
   NIMAX=NIMAX_n ; NJMAX=NJMAX_n
   READ(UNIT=ILUNAM,NML=NAM_MESONH_DOM)
   NIMAX_n=NIMAX ; NJMAX_n=NJMAX
 END IF
-CALL CLOSE_ll(HNAMELIST,IOSTAT=IRESP)
 !
 !*       2.3   Default values if none was given in namelist: domain is centered
 !              ---------------------------- ---------------
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index 440b0ca5ce1fc49d782ef4b98ee48e0f245c0e13..8fbfb9263c86072eb0ea8f04ad1d5106c951629d 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -496,10 +496,10 @@ PLATOR = XLATORI
 !
 !*       3.    INITIALIZATION OF ZS and ZSMT:
 !              ------------------------------
-CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT,  &
-              XZS1,  PZS,  'ZS    ',PZS_LS)
-CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT,  &
-              XZSMT1,PZSMT,'ZSMT  ',PZSMT_LS)
+CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,  &
+              LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XZS1,  PZS,  'ZS    ',PZS_LS)
+CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,    &
+              LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XZSMT1,PZSMT,'ZSMT  ',PZSMT_LS)
 !
 CALL MPPDB_CHECK2D(PZS,"SPAWN_GRID2:PZS",PRECISION)
 CALL MPPDB_CHECK2D(PZSMT,"SPAWN_GRID2:PZSMT",PRECISION)
diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90
index efce8381ded06c241bf52cc3f793ec54c7217277..45794282e071a852a717bbdfdf7bf4ec84212612 100644
--- a/src/MNH/spawn_zs.f90
+++ b/src/MNH/spawn_zs.f90
@@ -13,8 +13,8 @@ MODULE MODI_SPAWN_ZS
 !
 INTERFACE
 !
-     SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,HLBCX,HLBCY,&
-                          HLUOUT,PZS1_F,PZS2_C,HFIELD,PZS2_LS   )
+     SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,&
+                          HLBCX,HLBCY,PZS1_F,PZS2_C,HFIELD,PZS2_LS                )
 !
 INTEGER,   INTENT(IN)  :: KXOR,KXEND !  horizontal position (i,j) of the ORigin and END
 INTEGER,   INTENT(IN)  :: KYOR,KYEND ! of the model 2 domain, relative to model 1
@@ -23,7 +23,6 @@ INTEGER,   INTENT(IN)  :: KDYRATIO   ! between model 2 and model 1
 INTEGER,   INTENT(IN)  :: KDIMX_C    ! dimension (X dir) of local son subdomain in father grid
 INTEGER,   INTENT(IN)  :: KDIMY_C    ! dimension (Y dir) of local son subdomain in father grid
 CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-CHARACTER(LEN=*),     INTENT(IN)  :: HLUOUT  ! output-listing file
 REAL, DIMENSION(:,:), INTENT(IN)  :: PZS1_F    ! model 1 orography
 REAL, DIMENSION(:,:), INTENT(OUT) :: PZS2_C    ! interpolated orography with iterative correction
 CHARACTER(LEN=6),     INTENT(IN)  :: HFIELD ! name of the field to nest
@@ -36,10 +35,10 @@ END INTERFACE
 END MODULE MODI_SPAWN_ZS
 !
 !
-!     #########################################################################
-     SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,HLBCX,HLBCY,&
-                          HLUOUT,PZS1_F,PZS2_C,HFIELD,PZS2_LS   )
-!     #########################################################################
+!     #############################################################################
+     SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,&
+                          HLBCX,HLBCY,PZS1_F,PZS2_C,HFIELD,PZS2_LS                )
+!     #############################################################################
 !
 !!****  *SPAWN_ZS * - subroutine to spawn zs field
 !!
@@ -110,6 +109,7 @@ END MODULE MODI_SPAWN_ZS
 !
 USE MODD_PARAMETERS, ONLY : JPHEXT       ! Declarative modules
 USE MODD_CONF,       ONLY : NVERB
+USE MODD_LUNIT_n,    ONLY: TLUOUT
 !
 USE MODD_BIKHARDT_n
 !
@@ -147,7 +147,6 @@ INTEGER,   INTENT(IN)  :: KDYRATIO   ! between model 2 and model 1
 INTEGER,   INTENT(IN)  :: KDIMX_C    ! dimension (X dir) of local son subdomain in father grid
 INTEGER,   INTENT(IN)  :: KDIMY_C    ! dimension (Y dir) of local son subdomain in father grid
 CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-CHARACTER(LEN=*),     INTENT(IN)  :: HLUOUT  ! output-listing file
 REAL, DIMENSION(:,:), INTENT(IN)  :: PZS1_F    ! model 1 orography
 REAL, DIMENSION(:,:), INTENT(OUT) :: PZS2_C    ! interpolated orography with iterative correction
 CHARACTER(LEN=6),     INTENT(IN)  :: HFIELD ! name of the field to nest
@@ -240,7 +239,7 @@ CALL GOTO_MODEL(IMI)
 !
 !*       1.2  recovers logical unit number of output listing
 !
-CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index 0accb8acce2d68ea76c01ea1e13f8f82dbe16167..a0e5d65c6916d6680c638be7230db5469eba2d86 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -142,14 +142,15 @@ CHARACTER (LEN=28) :: YSPAFILE = ' '  ! possible name of the output FM-file
 CHARACTER (LEN= 2) :: YSPANBR = '00'  ! NumBeR associated to the SPAwned file
 INTEGER            :: IINFO_ll        ! return code of // routines
 INTEGER :: IRESP                      ! Return codes in FM routines
-INTEGER :: ILUSPA,ILUOUT              ! Logical unit number for the EXSPA file
-CHARACTER (LEN=32) :: YEXSPA          ! Name of the EXSPA file
+INTEGER :: ILUSPA                     ! Logical unit number for the EXSPA file
 LOGICAL :: GFOUND                     ! Return code when searching namelist
 !
 LOGICAL :: LSPAWN_SURF = .TRUE.  ! .TRUE. : surface fields are spawned
 LOGICAL                           :: LRES
 REAL                              :: XRES
-TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZINIFILE  => NULL()
+TYPE(TFILEDATA),POINTER :: TZEXPAFILE => NULL()
+!
 NAMELIST/NAM_SPAWN_SURF/LSPAWN_SURF, LRES, XRES  
 NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO
 !
@@ -179,9 +180,9 @@ CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
 !*       2.    NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE
 !              ----------------------------------------
 !
-YEXSPA  = 'SPAWN1.nam'
-CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
-             form='FORMATTED',position="REWIND",mode='GLOBAL')
+CALL IO_FILE_FIND_BYNAME('SPAWN1.nam',TZEXPAFILE,IRESP)
+CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+ILUSPA = TZEXPAFILE%NLU
 !
 CALL INIT_NMLVAR
 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
@@ -193,7 +194,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
 CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
-CALL CLOSE_ll(YEXSPA)
+CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -225,18 +226,17 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
 !*       5.    SPAWNING OF MODEL 2 FROM MODEL 1
 !              --------------------------------
 !
-CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
-             form='FORMATTED',position="REWIND",mode='GLOBAL')
-ILUOUT = TLUOUT%NLU
+CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+ILUSPA = TZEXPAFILE%NLU
+!
 CALL SET_POINTERS_TO_MODEL1()
 CALL GOTO_MODEL(2)
-ILUOUT = TLUOUT%NLU
 CALL INIT_NMLVAR
 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
 CALL GOTO_MODEL(1)
-CALL CLOSE_ll(YEXSPA)
+CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
 !
 CALL GO_TOMODEL_ll(2,IINFO_ll)
 !
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index fa05c7f654ce452c5e569393ecb30c15cdfc4178..d3f31de6056cb87f3ec4fcb5198f8dce6decb31d 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -22,7 +22,7 @@
 !
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG
+USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n
 USE MODD_TIME_n
@@ -35,7 +35,7 @@ USE MODI_SPECTRE_AROME
 USE MODE_MSG
 USE MODE_POS
 USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_PRINT_LIST
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
 USE MODE_MODELN_HANDLER
 USE MODE_FM
 !USE MODD_TYPE_DATE
@@ -54,7 +54,6 @@ INTEGER                          :: IRESP         ! return code in FM routines
 INTEGER                          :: ILUOUT0       ! Logical unit number for the output listing
 INTEGER                          :: ILUNAM        ! Logical unit numbers for the namelist file
                                                   ! and for output_listing file
-CHARACTER (LEN=9)                :: YNAM          ! name of the namelist file
 LOGICAL                          :: GFOUND        ! Return code when searching namelist
 !
 INTEGER                          :: IINFO_ll      ! return code for _ll routines 
@@ -63,9 +62,7 @@ REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORK         ! work array
 REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORKAROME    ! work array
 INTEGER :: NI,NJ,NK
 REAL    ::XDELTAX,XDELTAY
-
-
-
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL()
 !
 NAMELIST/NAM_SPECTRE/ LSPECTRE_U,LSPECTRE_V,LSPECTRE_W,LSPECTRE_TH,LSPECTRE_RV,&
                       LSPECTRE_LSU,LSPECTRE_LSV,LSPECTRE_LSW,LSPECTRE_LSTH,LSPECTRE_LSRV,LSMOOTH
@@ -121,9 +118,9 @@ PRINT*, '*********************************************************************'
 PRINT*, '*********************************************************************'
 PRINT*, ' '
 !
-YNAM  = 'SPEC1.nam'
-CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', &
-     FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPEC1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+ILUNAM = TZNMLFILE%NLU
 !
 PRINT*, 'READ THE SPEC1.NAM FILE'
 !
@@ -165,7 +162,7 @@ IF (GFOUND) THEN
 END IF
 CALL SET_CONFIO_ll()
 !
-CALL CLOSE_ll(YNAM)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 !
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index ed97ea0ae9d854a889a11a402a9da8b5d74552ed..d0356b05f209a6991cb36eaf0961acd6a57bb6fb 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -117,7 +117,7 @@ CHARACTER(LEN=20) :: YCOMMENT
 CHARACTER(LEN=3)  :: YJ
 INTEGER   ::   ILENG, ILENTITRE, ILENUNITE, ILENCOMMENT, IRESP
 INTEGER   ::   ILUOUTDIA
-INTEGER   ::   II, IJ, IK, IT, IN, IP, INUM, J, JJ
+INTEGER   ::   II, IJ, IK, IT, IN, IP, J, JJ
 INTEGER   ::   INTRAJT, IKTRAJX, IKTRAJY, IKTRAJZ
 INTEGER   ::   ITTRAJX, ITTRAJY, ITTRAJZ
 INTEGER   ::   INTRAJX, INTRAJY, INTRAJZ
@@ -221,7 +221,6 @@ IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(HLUOUTDIA),' IRESP=',IRESP
 ENDIF
 !
-CALL FMLOOK_ll(TRIM(TPDIAFILE%CNAME)//'.lfi',HLUOUTDIA,INUM,IRESP)
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(TPDIAFILE%CNAME)//'.lfi',' IRESP=',IRESP
 ENDIF
diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90
index 0437b2d63cf4ac3ebb223090617fcd9e063361eb..5803210fff780ebd3e31609d4b44c2a1d5aaf0f1 100644
--- a/src/MNH/xy_to_latlon.f90
+++ b/src/MNH/xy_to_latlon.f90
@@ -104,6 +104,7 @@ REAL    :: ZYHAT               ! output conformal coodinate y
 REAL    :: ZLAT                ! output latitude
 REAL    :: ZLON                ! output longitude
 TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL()
+TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL()
 !
 !*    0.3    Declaration of namelists
 !            ------------------------
@@ -126,12 +127,13 @@ CALL INI_CST
 !            ------------------------
 CALL INITIO_ll()
 !
-CALL OPEN_ll(UNIT=INAM,FILE='XY2LATLON1.nam',IOSTAT=IRESP,ACTION='READ', &
-     DELIM='QUOTE',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'XY2LATLON1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 READ(INAM,NAM_CONFIO)
 CALL SET_CONFIO_ll()
-CALL CLOSE_ll('XY2LATLON1.nam',IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 41a9f76f0144f34992db0349851ffd247124ea5b..1252f83bd57d238f7877056ed1c75e6f3d128cc0 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -99,20 +99,19 @@ CHARACTER(LEN=2)   :: YZOOMNBR
 CHARACTER(LEN=28)  :: YMY_NAME,YDAD_NAME
 CHARACTER(LEN=28)  :: YPGDFILE
 CHARACTER(LEN=2)   :: YSTORAGE_TYPE
-CHARACTER(LEN=28) :: YNAMELIST        
 LOGICAL :: GFOUND
 INTEGER            :: IXOR_DAD,IYOR_DAD  ! compared to Dad file, if any
 INTEGER            :: IXOR,IYOR          ! given or computed
 INTEGER            :: IDXRATIO,IDYRATIO
-TYPE(TFILEDATA),POINTER :: TZZOOMFILE,TZPGDFILE
+TYPE(TFILEDATA),POINTER :: TZNMLFILE  => NULL()
+TYPE(TFILEDATA),POINTER :: TZPGDFILE  => NULL()
+TYPE(TFILEDATA),POINTER :: TZZOOMFILE => NULL()
 !
 REAL,  DIMENSION(:,:), ALLOCATABLE :: ZZS1,ZZSMT1,ZZS2,ZZSMT2
 !
 NAMELIST/NAM_PGDFILE/CPGDFILE,YZOOMFILE,YZOOMNBR
 !------------------------------------------------------------------------------
 !
-TZZOOMFILE => NULL()
-!
 CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='ZOOMPG'
@@ -132,10 +131,9 @@ CALL IO_FILE_OPEN_ll(TLUOUT0)
 TFILE_OUTPUTLISTING => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
-YNAMELIST = 'PRE_ZOOM1.nam'                  ! name of the namelist file
- 
-CALL OPEN_ll(UNIT=ILUNAM,FILE=YNAMELIST,IOSTAT=IRESP,    &
-             FORM='FORMATTED',ACTION='READ',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ')
+CALL IO_FILE_OPEN_ll(TZNMLFILE)
+ILUNAM = TZNMLFILE%NLU
 !
 CPGDFILE  = 'PGDFILE'                         ! name of the input file
 YZOOMFILE = ''
@@ -146,8 +144,6 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL SET_CONFIO_ll()
 !
-CALL CLOSE_ll(YNAMELIST,IOSTAT=IRESP)
-!
 !------------------------------------------------------------------------------
 !
 !*    2.      ZOOM OF PGD DOMAIN
@@ -173,7 +169,10 @@ CALL IO_READ_FIELD(TZPGDFILE,'ZSMT',ZZSMT1)
 !*    2.3     Define subdomain
 !             ----------------
 !
-CALL SET_SUBDOMAIN(YNAMELIST,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO)
+CALL SET_SUBDOMAIN(TZNMLFILE,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO)
+!
+CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+!
 ! NIMAX, NJMAX: size of output domain
 !
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)