diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90
index bc39e66afb614f1a93c426d724f2d6011fbd2279..59b5f2c277b0e187fb157c85956311394359b362 100644
--- a/src/MNH/close_file_mnh.f90
+++ b/src/MNH/close_file_mnh.f90
@@ -57,15 +57,13 @@ END MODULE MODI_CLOSE_FILE_MNH
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CONF,        ONLY : CPROGRAM
-USE MODD_IO_ll,       ONLY : TFILEDATA
-USE MODD_IO_NAM,      ONLY : CFILE
-USE MODD_LUNIT,       ONLY : CLUOUT0
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_IO_NAM,           ONLY: TFILE
+USE MODD_LUNIT,            ONLY: CLUOUT0
 !
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_FM,               ONLY: FMLOOK_ll,IO_FILE_CLOSE_ll
+USE MODE_IO_ll,            ONLY: CLOSE_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
-USE MODE_ll
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -82,11 +80,9 @@ INTEGER,           INTENT(IN)  :: KUNIT    ! logical unit of file
 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
                                     ! at the open of the file in LFI  routines 
 !
-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)
@@ -116,20 +112,18 @@ END IF
 !* closes the namelist
 !  -------------------
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(CFILE))
+IF (.NOT.ASSOCIATED(TFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','TFILE not associated')
 !
-TZFILE => NULL()
-CALL IO_FILE_FIND_BYNAME(TRIM(CFILE),TZFILE,IRESP)
+CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(TFILE%CNAME))
 !
-CALL FMLOOK_ll(CFILE,YLUOUT,INAM,IRESP)
-IF (INAM==KUNIT) THEN
-  CALL IO_FILE_CLOSE_ll(TZFILE)
-  CFILE = "                            "
+IF (TFILE%NLU==KUNIT) THEN
+  CALL IO_FILE_CLOSE_ll(TFILE)
+  TFILE => NULL()
 ELSE
   WRITE(ILUOUT,*) 'Error for closing a file: '
-  WRITE(ILUOUT,*) 'logical unit ',KUNIT,' does not correspond to file', CFILE
+  WRITE(ILUOUT,*) 'logical unit ',KUNIT,' does not correspond to file', TFILE%CNAME
 !callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','CLOSE_FILE_MNH','')
+  CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90
index e52b209242d0159530f9b496ac11b9a082635784..d24d727b7b60daa940dd0436c5b3ea5bccb24d17 100644
--- a/src/MNH/mnhclose_namelist.f90
+++ b/src/MNH/mnhclose_namelist.f90
@@ -57,15 +57,12 @@ END MODULE MODI_MNHCLOSE_NAMELIST
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CONF,        ONLY : CPROGRAM
-USE MODD_IO_ll,       ONLY : TFILEDATA
-USE MODD_IO_NAM,      ONLY : CNAM
-USE MODD_LUNIT,       ONLY : CLUOUT0
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_IO_NAM,           ONLY: TNAM
+USE MODD_LUNIT,            ONLY: CLUOUT0
 !
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_FM,               ONLY: FMLOOK_ll,IO_FILE_CLOSE_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
-USE MODE_ll
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -82,14 +79,14 @@ INTEGER,           INTENT(IN)  :: KLUNAM   ! logical unit of namelist
 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
                                     ! at the open of the file in LFI  routines 
 !
-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))
+IF (.NOT.ASSOCIATED(TNAM)) CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','TNAM not associated')
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHCLOSE_NAMELIST','called for '//TRIM(TNAM%CNAME))
 !
 SELECT CASE(CPROGRAM)
   CASE('REAL  ','IDEAL ','DIAG  ')
@@ -104,17 +101,13 @@ 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 IO_FILE_CLOSE_ll(TZFILE)
-  CNAM = "                            "
+IF (TNAM%NLU==KLUNAM) THEN
+  CALL IO_FILE_CLOSE_ll(TNAM)
+  TNAM => NULL()
 ELSE
   CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP)
   WRITE(ILUOUT,*) 'Error for closing a namelist file: '
-  WRITE(ILUOUT,*) 'logical unit ',KLUNAM,' does not correspond to namelist file', CNAM 
+  WRITE(ILUOUT,*) 'logical unit ',KLUNAM,' does not correspond to namelist file', TNAM%CNAME
 !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','MNHCLOSE_NAMELIST','')
 END IF
diff --git a/src/MNH/mnhopen_namelist.f90 b/src/MNH/mnhopen_namelist.f90
index fa2675d38ddce0f74219330f805a9eae98ac7b9f..df39e9687dd9a115b6aa01be665128a39e1f7921 100644
--- a/src/MNH/mnhopen_namelist.f90
+++ b/src/MNH/mnhopen_namelist.f90
@@ -58,17 +58,12 @@ END MODULE MODI_MNHOPEN_NAMELIST
 !*       0.    DECLARATIONS
 !              ------------
 !
-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_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_IO_NAM,           ONLY: TNAM
+!
+USE MODE_FM,               ONLY: IO_FILE_OPEN_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
 !
@@ -86,49 +81,46 @@ INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
                                     ! at the open of the file in LFI  routines 
 INTEGER           :: IMI            ! model index
 !
-TYPE(TFILEDATA),POINTER :: TZFILE
-!-------------------------------------------------------------------------------
-!
-TZFILE => NULL()
+CHARACTER(LEN=28) :: YNAM ! name of namelist
 !-------------------------------------------------------------------------------
 !
 !* reading of namelist
 !  -------------------
 !
 IF (LEN_TRIM(HFILE)>0) THEN
-  CNAM = HFILE
+  YNAM = HFILE
 ELSE
  SELECT CASE(CPROGRAM)
   CASE('PGD   ')
-    CNAM='PRE_PGD1.nam '
+    YNAM='PRE_PGD1.nam '
   CASE('REAL  ')
-    CNAM='PRE_REAL1.nam'
+    YNAM='PRE_REAL1.nam'
   CASE('IDEAL ')
-    CNAM='PRE_IDEA1.nam'
+    YNAM='PRE_IDEA1.nam'
   CASE('MESONH')
     CALL GET_MODEL_NUMBER_ll(IMI)
-    WRITE(CNAM,FMT='(A5,I1,A22)') 'EXSEG',IMI,'.nam                  '
+    WRITE(YNAM,FMT='(A5,I1,A22)') 'EXSEG',IMI,'.nam                  '
   CASE('DIAG  ')
-    CNAM='DIAG1.nam    '
+    YNAM='DIAG1.nam    '
   CASE('SPAWN ')
-    CNAM='SPAWN1.nam   '
+    YNAM='SPAWN1.nam   '
   CASE('NESPGD')
-    CNAM='PRE_NEST_PGD1.nam'
+    YNAM='PRE_NEST_PGD1.nam'
   CASE('ZOOMPG')
-    CNAM='PRE_ZOOM1.nam'
+    YNAM='PRE_ZOOM1.nam'
   CASE('SPEC ')
-    CNAM='SPEC1.nam'
+    YNAM='SPEC1.nam'
   CASE DEFAULT
     CALL PRINT_MSG(NVERB_FATAL,'IO','MNHOPEN_NAMELIST','CPROGRAM '//TRIM(CPROGRAM)//' not allowed')
  END SELECT
 END IF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(CNAM))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(YNAM))
 !
-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)
+CALL IO_FILE_ADD2LIST(TNAM,TRIM(YNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
+CALL IO_FILE_OPEN_ll(TNAM)
 !
-KLUNAM = TZFILE%NLU
+KLUNAM = TNAM%NLU
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_io_nam.f90 b/src/MNH/modd_io_nam.f90
index 0f07b006b5e2b118931407ec58fd050ef881cdd0..4bb99bc31493ddb05336ac18f0b57aabf3573ba9 100644
--- a/src/MNH/modd_io_nam.f90
+++ b/src/MNH/modd_io_nam.f90
@@ -35,12 +35,13 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !------------------------------------------------------------------------------
 !
-CHARACTER(LEN=28), SAVE :: CNAM ="                            " ! name of namelist
-CHARACTER(LEN=28), SAVE :: CFILE="                            " ! name of file
+TYPE(TFILEDATA),POINTER :: TNAM  => NULL() ! namelist file
+TYPE(TFILEDATA),POINTER :: TFILE => NULL() ! file
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/MNH/open_file_mnh.f90 b/src/MNH/open_file_mnh.f90
index d35e50203a73add16ec868130b34b48a2e71b568..072117ec309ad36070d9aa59370d396ba01f9715 100644
--- a/src/MNH/open_file_mnh.f90
+++ b/src/MNH/open_file_mnh.f90
@@ -61,12 +61,10 @@ END MODULE MODI_OPEN_FILE_MNH
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll,  ONLY : TFILEDATA
-USE MODD_IO_NAM, ONLY : CFILE
+USE MODD_IO_NAM,           ONLY: TFILE
 !
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -85,22 +83,17 @@ 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
-!
-CALL IO_FILE_ADD2LIST(TZFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
-                      HFORM=HFORM,HACCESS=HACCESS,KRECL=KRECL,   &
+CALL IO_FILE_ADD2LIST(TFILE,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)
+CALL IO_FILE_OPEN_ll(TFILE)
 !
-KUNIT = TZFILE%NLU
+KUNIT = TFILE%NLU
 !
 !-------------------------------------------------------------------------------
 !