diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index abc7599766929e2d08e88a4f57f17d12cca8032b..674b21574e9c2c06920f4e4271afb73bcc10b7ce 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1999-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -403,33 +403,24 @@ CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG)
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG_BLANK',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG_BLANK)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG_BLANK', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG_BLANK)
 !
-CALL POSNAM(ILUNAM,'NAM_DIAG_FILE',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_DIAG_FILE)
-END IF
+CALL POSNAM( TZNMLFILE, 'NAM_DIAG_FILE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DIAG_FILE)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_STO_FILE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_STO_FILE)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFZ)
+!
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 !
-CALL POSNAM(ILUNAM,'NAM_STO_FILE',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_STO_FILE)
-END IF
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_CONFZ)
-END IF
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
-IF (GFOUND) THEN
-  READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-END IF
 CALL IO_Config_set()
 !
 CALL IO_File_close(TZNMLFILE)
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 1864623ffbe8bd132b556b841d5c1f3a6840e8bd..f0d7cc6879cb71e19e23774b8cd5b442a6567a07 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -249,19 +249,19 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF ! IIMAX
   LUSECHEM = .TRUE.
   IF (LORILAM) THEN
-    CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_CH_ORILAM', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM)
   ENDIF
   IF (LDUST) THEN
     LDSTINIT=.TRUE.
     LDSTPRES=.FALSE.
-    CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_DUST', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST)
   ENDIF
   IF (LSALT) THEN
     LSLTINIT=.TRUE.
     LSLTPRES=.FALSE.
-    CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT)
+    CALL POSNAM(TZCHEMFILE, 'NAM_SALT', GFOUND )
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
   ENDIF
 
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 98a316851fc4b5d21ca797b02b3275da6c87069f..f7f5ea11509566967e1b757bdbfc4cb0b333721b 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -324,7 +324,7 @@ CALL DEFAULT_DESFM_n(KMI)
 !*       3.    READ INITIAL FILE NAME AND OPEN INITIAL FILE
 !              --------------------------------------------
 !
-CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND)
+CALL POSNAM( TZFILE_DES, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) THEN
   CALL INIT_NAM_LUNITn
   READ(UNIT=ILUSEG,NML=NAM_LUNITn)
@@ -337,9 +337,9 @@ END IF
 
 IF (CPROGRAM=='MESONH') THEN
    IF (KMI.EQ.1) THEN
-      CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
+      CALL POSNAM( TZFILE_DES, 'NAM_CONFZ', GFOUND )
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
-      CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT)
+      CALL POSNAM( TZFILE_DES, 'NAM_CONFIO', GFOUND )
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO)
       CALL IO_Config_set()
    END IF
diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90
index 98b134a36a1cf7e21a18a8cb4c49a3627e5f8490..ae3cfb6cabf936316edb62b8075f01839b07b4c8 100644
--- a/src/MNH/latlon_to_xy.f90
+++ b/src/MNH/latlon_to_xy.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -147,16 +147,14 @@ CALL IO_File_add2list(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
 CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 !
-CALL POSNAM(INAM,'NAM_INIFILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_INIFILE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=INAM,NML=NAM_INIFILE)
-  PRINT*, '  namelist NAM_INIFILE read'
 END IF
 !
-CALL POSNAM(INAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=INAM,NML=NAM_CONFIO)
-  PRINT*, '  namelist NAM_CONFIO read'
 END IF
 !
 CALL IO_Config_set()
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index deb8dda2312cc5000d28482412cf5e4695292e0d..7a37fde0fe1a5c05c86da90720d933ea9b6a0011 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -113,7 +113,7 @@ READ(UNIT=IFNML,NML=NAM_TURB)
 READ(UNIT=IFNML,NML=NAM_FIC)
 print *,'Lecture de NAM_FIC OK.'
 
-CALL POSNAM(IFNML,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=IFNML,NML=NAM_CONFIO)
 END IF
diff --git a/src/MNH/mode_pos.f90 b/src/MNH/mode_pos.f90
index 09a2ca12ee8467375b1784743768c89c72e14e98..1a8344973bc1ae797242feb6205c49603f716d8f 100644
--- a/src/MNH/mode_pos.f90
+++ b/src/MNH/mode_pos.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1993-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1993-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -12,9 +12,9 @@ implicit none
 !!
 CONTAINS
 !!
-!!    ##############################################
-      SUBROUTINE POSNAM(KULNAM,HDNAML,OFOUND,KLUOUT)
-!!    ##############################################
+!!    ###########################################
+      SUBROUTINE POSNAM( TPFILE, HDNAML, OFOUND )
+!!    ###########################################
 !!
 !!*** *POSNAM*
 !!
@@ -45,72 +45,102 @@ CONTAINS
 !!       Original : 22/06/93
 !!       I. Mallet  15/10/01     adaptation to MesoNH (F90 norm)
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 05/04/2023: POSNAM: modernisation + improvements
 !------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
+USE MODD_IO,    ONLY: TFILEDATA
+
+USE MODE_MSG
+USE MODE_TOOLS, ONLY: Upcase
 !
 !*       0.1   Declarations of arguments
 !
-INTEGER,          INTENT(IN) :: KULNAM
+TYPE(TFILEDATA),  INTENT(IN) :: TPFILE
 CHARACTER(LEN=*), INTENT(IN) :: HDNAML
 LOGICAL,          INTENT(OUT):: OFOUND
-INTEGER, OPTIONAL,INTENT(IN) :: KLUOUT
 !
 !*       0.2   Declarations of local variables
 !
-CHARACTER(LEN=120) :: YLINE
-CHARACTER(LEN=1)   :: YLTEST
-INTEGER            :: ILEN,ILEY,IND1,IRET
-INTEGER            :: J,JA
-!
-CHARACTER(LEN=1),DIMENSION(26) :: YLO=(/'a','b','c','d','e','f','g','h', &
-     'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'/)
-CHARACTER(LEN=1),DIMENSION(26) :: YUP=(/'A','B','C','D','E','F','G','H', &
-     'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/)
-!
-!*       1.    POSITION FILE
-!              -------------
-!
-REWIND(KULNAM)
-ILEN=LEN(HDNAML)
-IRET = 0
-!
+CHARACTER(LEN=100)            :: YERRORMSG
+CHARACTER(LEN=120)            :: YLINE
+CHARACTER(LEN=1)              :: YLTEST
+CHARACTER(LEN=:), ALLOCATABLE :: YDNAML
+INTEGER                       :: ILU
+INTEGER                       :: ILEN, IND1, IRET
+INTEGER                       :: IVERBLVL
+
+
+OFOUND = .FALSE.
+
+IF ( .NOT.TPFILE%LOPENED ) THEN
+  call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ' not opened' )
+  RETURN
+END IF
+
+ILU = TPFILE%NLU
+
+IF ( TPFILE%CTYPE == 'DES' ) THEN
+  IVERBLVL = NVERB_DEBUG
+ELSE IF ( TPFILE%CTYPE == 'NML' ) THEN
+  IVERBLVL = NVERB_INFO
+ELSE
+  ! Check if there is an associated .des file
+  ! and use it if available
+  IF ( ASSOCIATED( TPFILE%TDESFILE ) ) THEN
+    IVERBLVL = NVERB_DEBUG
+    IF ( .NOT.TPFILE%TDESFILE%LOPENED ) THEN
+      call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', Trim( TPFILE%TDESFILE%CNAME ) // ' not opened' )
+      RETURN
+    END IF
+    ILU = TPFILE%TDESFILE%NLU
+  ELSE
+    IVERBLVL = NVERB_INFO
+    call Print_msg( NVERB_WARNING, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) &
+                    // ': unexpected filetype: ' // Trim( TPFILE%CTYPE ) )
+  END IF
+END IF
+
+REWIND( ILU )
+
+ILEN = LEN( HDNAML )
+ALLOCATE( CHARACTER(LEN=ILEN) :: YDNAML )
+YDNAML = Upcase( HDNAML ) ! Force namelist name into upper case (read namelist name will also be upcased)
+
 search_nam : DO
-      YLINE=' '
-      READ(UNIT=KULNAM,FMT='(A)',IOSTAT=IRET,END=100) YLINE
-      IF (IRET /=0 ) THEN
-        IF (PRESENT(KLUOUT)) &
-         WRITE(KLUOUT,FMT=*) '-> error reading from unit',KULNAM,' line ',YLINE
-      ELSE   
-        ILEY=LEN(YLINE)
-        DO J=1,ILEY
-          DO JA=1,26
-            IF (YLINE(J:J)==YLO(JA)) YLINE(J:J)=YUP(JA) 
-          END DO
-        END DO
-        IND1=INDEX(YLINE,'&'//HDNAML)
-        IF(IND1.NE.0) THEN
-          YLTEST=YLINE(IND1+ILEN+1:IND1+ILEN+1)
-          !IF((LLT(YLTEST,'0').OR.LGT(YLTEST,'9')).AND. &
-          !   (LLT(YLTEST,'A').OR.LGT(YLTEST,'Z'))) EXIT search_nam
-          IF(YLTEST == ' ') EXIT search_nam
-        ENDIF
-      ENDIF
-ENDDO search_nam
-!
-BACKSPACE(KULNAM)
-OFOUND=.TRUE.
-IF (PRESENT(KLUOUT)) WRITE(KLUOUT,FMT=*) '-- namelist ',HDNAML,' read'
-!
+  READ ( UNIT=ILU, FMT='(A)', IOSTAT=IRET, IOMSG=YERRORMSG, END=100 ) YLINE
+  IF (IRET /= 0 ) THEN
+    call Print_msg( NVERB_ERROR, 'IO', 'POSNAM', 'read error:' // Trim( YERRORMSG ) )
+  ELSE
+    YLINE = Upcase( YLINE )
+    IND1 = INDEX( YLINE, '&'//YDNAML )
+    IF( IND1 /= 0 ) THEN
+      IF( IND1 > 1 ) THEN
+        IF ( LEN_TRIM( YLINE(:IND1-1) ) /= 0 ) THEN
+          ! Check that it is really the beginning of a namelist and that is not a comment
+          ! Nothing but spaces is allowed here
+          call Print_msg( NVERB_DEBUG, 'IO', 'POSNAM', 'invalid header or commented namelist: ' // Trim ( YLINE) )
+          CYCLE
+        END IF
+      END IF
+      YLTEST = YLINE(IND1+ILEN+1:IND1+ILEN+1)
+      IF( YLTEST == ' ' ) EXIT search_nam
+    END IF
+  END IF
+END DO search_nam
+
+BACKSPACE( ILU )
+OFOUND = .TRUE.
+call Print_msg( IVERBLVL, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ': namelist ' // Trim( HDNAML ) // ' found' )
+
 RETURN
-!
+
 ! end of file: namelist name not found
 100  CONTINUE
-OFOUND=.FALSE.
-IF (PRESENT(KLUOUT)) &
-WRITE(KLUOUT,FMT=*)  &
-'-- namelist ',HDNAML,' not found: default values used if required'
+call Print_msg( IVERBLVL, 'IO', 'POSNAM', Trim( TPFILE%CNAME ) // ': namelist ' // Trim( HDNAML ) &
+                 // ' not found: default values used if required' )
+
 !------------------------------------------------------------------
 END SUBROUTINE POSNAM
 !!
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index d331134d68ce797a6112596032f6fe6448b3b1e8..555d5cbc174d5b8f21ef737eccbb17b5255752d3 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -172,11 +172,11 @@ CALL IO_File_add2list(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
 CALL IO_File_open(TZPRE_NEST_PGD)
 IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU
 !reading of NAM_CONFZ
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFZ)
 !
 !JUAN
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONF_NEST',GFOUND)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONF_NEST', GFOUND )
 IF (GFOUND) THEN
    NHALO_MNH = NHALO_CONF_MNH
    READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONF_NEST)
@@ -203,35 +203,35 @@ GADD=.TRUE.
 DO JPGD=1,JPMODELMAX
   IDAD=0
   IF (JPGD==1) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD1',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD1', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD1)
   END IF
   IF (JPGD==2) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD2',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD2', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD2)
   END IF
   IF (JPGD==3) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD3',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD3', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD3)
   END IF
   IF (JPGD==4) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD4',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD4', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD4)
   END IF
   IF (JPGD==5) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD5',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD5', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD5)
   END IF
   IF (JPGD==6) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD6',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD6', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD6)
   END IF
   IF (JPGD==7) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD7',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD7', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD7)
   END IF
   IF (JPGD==8) THEN
-    CALL POSNAM(IPRE_NEST_PGD,'NAM_PGD8',GFOUND)
+    CALL POSNAM( TZPRE_NEST_PGD, 'NAM_PGD8', GFOUND )
     IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD8)
   END IF
   !
@@ -291,10 +291,10 @@ END DO
 !*       6.    NAMES OF OUTPUT PGD FILES
 !              -------------------------
 !
-CALL POSNAM(IPRE_NEST_PGD,'NAM_NEST_PGD',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_NEST_PGD', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_NEST_PGD)
 !
-CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_NEST_PGD, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index ecf98378f07cd1712e1d68cb4c51bcd853324bd5..056eb30ae0b95a26cc5df71c399bf76b18ca4f13 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -208,15 +208,15 @@ ENDIF
 !              ----------------------------
 !
 !JUANZ
-CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
 !JUANZ
-CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
 CINIFILE = CINIFILE_n
-CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1FILE, 'NAM_FILE_NAMES', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_FILE_NAMES)
 CINIFILE_n = CINIFILE
 !
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 8abd65649d35f0fe2dc1e5a2257d5e7b99be5faa..ee75625e84f9a4ebe04ffd83774e65aad7bb4d2b 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -690,35 +690,35 @@ NLUPRE=TZEXPREFILE%NLU
 !*       3.2   read in NLUPRE the namelist informations
 !
 WRITE(NLUOUT,FMT=*) 'attempt to read ',TRIM(TZEXPREFILE%CNAME),' file'
-CALL POSNAM(NLUPRE,'NAM_REAL_PGD',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_REAL_PGD', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_REAL_PGD)
 !
 !
-CALL POSNAM(NLUPRE,'NAM_CONF_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONF_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONF_PRE)
 !JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFZ',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ)
 !JUANZ
-CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO)
 CALL IO_Config_set()
-CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_GRID_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE)
-CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_GRIDH_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRIDH_PRE)
-CALL POSNAM(NLUPRE,'NAM_VPROF_PRE',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_VPROF_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_VPROF_PRE)
-CALL POSNAM(NLUPRE,'NAM_BLANKN',GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=NLUPRE,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL READ_PRE_IDEA_NAM_n(NLUPRE,NLUOUT)
-CALL POSNAM(NLUPRE,'NAM_AERO_PRE',GFOUND,NLUOUT)
+CALL READ_PRE_IDEA_NAM_n( TZEXPREFILE )
+CALL POSNAM( TZEXPREFILE, 'NAM_AERO_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_AERO_PRE)
-CALL POSNAM(NLUPRE,'NAM_IBM_LSF' ,GFOUND,NLUOUT)
+CALL POSNAM( TZEXPREFILE, 'NAM_IBM_LSF', GFOUND )
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_IBM_LSF )
 !
 CALL INI_FIELD_LIST()
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 2df254d5ec8aab95ee4ad9713ccf8e65fc7f4af4..64c43fb8cce5d20a50b84d57ea9c6896d052e079 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -190,23 +190,23 @@ IF (IRESP.NE.0 ) THEN
 ENDIF
 !JUAN
 
-CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_PGDFILE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
-CALL POSNAM(ILUNAM,'NAM_ZSFILTER',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_ZSFILTER', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_ZSFILTER)
-CALL POSNAM(ILUNAM,'NAM_SLEVE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SLEVE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_SLEVE)
 !JUANZ
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFZ)
-CALL POSNAM(ILUNAM,'NAM_CONF_PGD',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONF_PGD', GFOUND )
 IF (GFOUND) THEN
    NHALO_MNH = NHALO_CONF_MNH
    READ(UNIT=ILUNAM,NML=NAM_CONF_PGD)
    NHALO_CONF_MNH = NHALO_MNH
 ENDIF
 !JUANZ
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 7af314fe4d80534c4e54da7ddf628de41dbdfb56..0ed4641b560593cbb9442d6fb8b7005066bbeb04 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -674,9 +674,9 @@ CALL INI_CST
 IPRE_REAL1 = TZPRE_REAL1FILE%NLU
 !
 CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_REAL_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_PARAM_LIMA',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_PARAM_LIMA', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_PARAM_LIMA)
 !
 CALL INI_FIELD_LIST()
@@ -746,18 +746,18 @@ XANGCONV0=0. ; XANGCONV1000=0. ; XANGCONV2000=0.
 CDADATMFILE=' ' ; CDADBOGFILE=' '
 !
 CALL INIT_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_REAL_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_HURR_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_HURR_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_HURR_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CH_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_CH_CONF', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CH_CONF)
 CALL UPDATE_MODD_FROM_NMLVAR
-CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
 IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
-CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
-CALL POSNAM(IPRE_REAL1,'NAM_IBM_LSF' ,GFOUND,ILUOUT0)
+CALL POSNAM( TZPRE_REAL1FILE, 'NAM_IBM_LSF' , GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_IBM_LSF)
 !
 GAERINIT = LAERINIT
@@ -810,7 +810,7 @@ END IF
 !
 !IF(LEN_TRIM(YCHEMFILE)>0)THEN
 !  ! read again Nam_aero_conf
-!  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+!  CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
 !  IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
 !  IF(YCHEMFILETYPE=='GRIBEX') &
 !  CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
@@ -844,7 +844,7 @@ END IF
 !
 IF(LEN_TRIM(YCHEMFILE)>0)THEN
   ! read again Nam_aero_conf
-  CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0)
+  CALL POSNAM( TZPRE_REAL1FILE, 'NAM_AERO_CONF', GFOUND )
   IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
   IF(YCHEMFILETYPE=='GRIBEX') &
   CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 213063f3545c5c332f751b34e18e16ad2c717fc8..10c8623f5d247296a2cc35158ed31cc8cd465fc6 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -343,6 +343,7 @@ LOGICAL :: GFOUND          ! Return code when searching namelist
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_DST ! Dust Moist flag
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_SLT ! Sea Salt Moist flag
 LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_AER ! Orilam Moist flag
+TYPE(TFILEDATA), POINTER :: TZDESFILE
 !
 !-------------------------------------------------------------------------------
 !
@@ -354,144 +355,145 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_DESFM_n','called for '//TRIM(TPDATAFILE%CN
 IF (.NOT.ASSOCIATED(TPDATAFILE%TDESFILE)) &
   CALL PRINT_MSG(NVERB_FATAL,'IO','READ_DESFM_n','TDESFILE not associated for '//TRIM(TPDATAFILE%CNAME))
 !
-ILUDES = TPDATAFILE%TDESFILE%NLU
+TZDESFILE => TPDATAFILE%TDESFILE
+ILUDES = TZDESFILE%NLU
 ILUOUT = TLUOUT%NLU
 !
-CALL POSNAM(ILUDES,'NAM_LUNITN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_LUNITN', GFOUND )
 CALL INIT_NAM_LUNITN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_LUNITn)
   CALL UPDATE_NAM_LUNITN
 END IF
-CALL POSNAM(ILUDES,'NAM_CONFN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CONFN', GFOUND )
 CALL INIT_NAM_CONFN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CONFn)
   CALL UPDATE_NAM_CONFN
 END IF
-CALL POSNAM(ILUDES,'NAM_DYNN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_DYNN', GFOUND )
 CALL INIT_NAM_DYNN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_DYNn)
   CALL UPDATE_NAM_DYNN
 END IF
-CALL POSNAM(ILUDES,'NAM_ADVN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_ADVN', GFOUND )
 CALL INIT_NAM_ADVN
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_ADVn)
   CALL UPDATE_NAM_ADVN
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAMN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAMN', GFOUND )
 CALL INIT_NAM_PARAMn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAMn)
   CALL UPDATE_NAM_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAM_RADN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_RADN', GFOUND )
 CALL INIT_NAM_PARAM_RADn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_RADn)
   CALL UPDATE_NAM_PARAM_RADn
 END IF
 #ifdef MNH_ECRAD
-CALL POSNAM(ILUDES,'NAM_PARAM_ECRADN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_ECRADN', GFOUND )
 CALL INIT_NAM_PARAM_ECRADn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_ECRADn)
   CALL UPDATE_NAM_PARAM_ECRADn
 END IF
 #endif
-CALL POSNAM(ILUDES,'NAM_PARAM_KAFRN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_KAFRN', GFOUND )
 CALL INIT_NAM_PARAM_KAFRn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_KAFRn)
   CALL UPDATE_NAM_PARAM_KAFRn
 END IF
-CALL POSNAM(ILUDES,'NAM_PARAM_MFSHALLN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_PARAM_MFSHALLN', GFOUND )
 CALL INIT_NAM_PARAM_MFSHALLn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_PARAM_MFSHALLn)
   CALL UPDATE_NAM_PARAM_MFSHALLn
 END IF
-CALL POSNAM(ILUDES,'NAM_LBCN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_LBCN', GFOUND )
 CALL INIT_NAM_LBCn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_LBCn)
   CALL UPDATE_NAM_LBCn
 END IF
-CALL POSNAM(ILUDES,'NAM_NUDGINGN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_NUDGINGN', GFOUND )
 CALL INIT_NAM_NUDGINGn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_NUDGINGn)
   CALL UPDATE_NAM_NUDGINGn
 END IF
-CALL POSNAM(ILUDES,'NAM_TURBN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_TURBN', GFOUND )
 CALL INIT_NAM_TURBn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_TURBn)
   CALL UPDATE_NAM_TURBn
 END IF
-CALL POSNAM(ILUDES,'NAM_CH_MNHCN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CH_MNHCN', GFOUND )
 CALL INIT_NAM_CH_MNHCn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CH_MNHCn)
   CALL UPDATE_NAM_CH_MNHCn
 END IF
-CALL POSNAM(ILUDES,'NAM_CH_SOLVERN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_CH_SOLVERN', GFOUND )
 CALL INIT_NAM_CH_SOLVERn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_CH_SOLVERn)
   CALL UPDATE_NAM_CH_SOLVERn
 END IF
-CALL POSNAM(ILUDES,'NAM_DRAGN',GFOUND)
+CALL POSNAM( TZDESFILE, 'NAM_DRAGN', GFOUND )
 CALL INIT_NAM_DRAGn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_DRAGn)
   CALL UPDATE_NAM_DRAGn
 END IF
-CALL POSNAM(ILUDES,'NAM_IBM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_IBM_PARAMN', GFOUND )
 CALL INIT_NAM_IBM_PARAMn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_IBM_PARAMn)
   CALL UPDATE_NAM_IBM_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_RECYCL_PARAMN', GFOUND )
 CALL INIT_NAM_RECYCL_PARAMn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_RECYCL_PARAMn)
   CALL UPDATE_NAM_RECYCL_PARAMn
 END IF
-CALL POSNAM(ILUDES,'NAM_SERIESN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_SERIESN', GFOUND )
 CALL INIT_NAM_SERIESn
 IF (GFOUND) THEN 
   READ(UNIT=ILUDES,NML=NAM_SERIESn)
   CALL UPDATE_NAM_SERIESn
 END IF
-CALL POSNAM(ILUDES,'NAM_BLOWSNOWN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_BLOWSNOWN', GFOUND )
 CALL INIT_NAM_BLOWSNOWn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_BLOWSNOWn)
   CALL UPDATE_NAM_BLOWSNOWn
 END IF
-CALL POSNAM(ILUDES,'NAM_BLANKN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL POSNAM(ILUDES,'NAM_PROFILERN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_PROFILERN', GFOUND )
 CALL INIT_NAM_PROFILERn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_PROFILERN)
   CALL UPDATE_NAM_PROFILERn
 END IF
-CALL POSNAM(ILUDES,'NAM_STATIONN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_STATIONN', GFOUND )
 CALL INIT_NAM_STATIONn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_STATIONn)
   CALL UPDATE_NAM_STATIONn
 END IF
-CALL POSNAM(ILUDES,'NAM_FIREN',GFOUND,ILUOUT)
+CALL POSNAM( TZDESFILE, 'NAM_FIREN', GFOUND )
 CALL INIT_NAM_FIREn
 IF (GFOUND) THEN
   READ(UNIT=ILUDES,NML=NAM_FIREn)
@@ -500,13 +502,13 @@ END IF
 !
 !
 IF (KMI == 1) THEN
-  CALL POSNAM(ILUDES,'NAM_CONF',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_CONF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONF)
-  CALL POSNAM(ILUDES,'NAM_DYN',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_DYN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DYN)
-  CALL POSNAM(ILUDES,'NAM_NESTING',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_NESTING', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_NESTING)
-  CALL POSNAM(ILUDES,'NAM_BACKUP',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
       ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX))
@@ -530,10 +532,10 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUDES,NML=NAM_BACKUP)
   ELSE
-    CALL POSNAM(ILUDES,'NAM_FMOUT',GFOUND)
+    CALL POSNAM( TZDESFILE, 'NAM_FMOUT', GFOUND )
     IF (GFOUND) CALL PRINT_MSG(NVERB_FATAL,'IO','READ_DESFM_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT')
   END IF
-  CALL POSNAM(ILUDES,'NAM_OUTPUT',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
       ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX)) !Allocate *BAK* variables to prevent
@@ -559,88 +561,88 @@ IF (KMI == 1) THEN
   END IF
 ! Note: it is not useful to read the budget namelists in the .des files
 ! The values here (if present in file) don't need to be compared with the ones in the EXSEGn files
-!   CALL POSNAM(ILUDES,'NAM_BUDGET',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BUDGET', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BUDGET)
-!   CALL POSNAM(ILUDES,'NAM_BU_RU',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RU', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RU)
-!   CALL POSNAM(ILUDES,'NAM_BU_RV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RV)
-!   CALL POSNAM(ILUDES,'NAM_BU_RW',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RW', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RW)
-!   CALL POSNAM(ILUDES,'NAM_BU_RTH',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RTH', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RTH)
-!   CALL POSNAM(ILUDES,'NAM_BU_RTKE',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RTKE', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RTKE)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRV)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRC',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRC', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRC)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRR',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRR', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRR)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRI',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRI', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRI)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRS',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRS)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRG',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRG', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRG)
-!   CALL POSNAM(ILUDES,'NAM_BU_RRH',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RRH', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RRH)
-!   CALL POSNAM(ILUDES,'NAM_BU_RSV',GFOUND)
+!   CALL POSNAM( TZDESFILE, 'NAM_BU_RSV', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BU_RSV)
-  CALL POSNAM(ILUDES,'NAM_LES',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_LES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_LES)
-  CALL POSNAM(ILUDES,'NAM_PDF',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PDF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PDF)
-  CALL POSNAM(ILUDES,'NAM_FRC',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FRC)
-  CALL POSNAM(ILUDES,'NAM_PARAM_ICE',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_ICE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_ICE)
-  CALL POSNAM(ILUDES,'NAM_PARAM_C2R2',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_C2R2', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C2R2)
-  CALL POSNAM(ILUDES,'NAM_PARAM_C1R3',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_C1R3', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_C1R3)
-  CALL POSNAM(ILUDES,'NAM_PARAM_LIMA',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_PARAM_LIMA', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAM_LIMA)
-  CALL POSNAM(ILUDES,'NAM_ELEC',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_ELEC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_ELEC)
-  CALL POSNAM(ILUDES,'NAM_SERIES',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_SERIES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SERIES)
-  CALL POSNAM(ILUDES,'NAM_TURB_CLOUD',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_TURB_CLOUD', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_TURB_CLOUD)
-  CALL POSNAM(ILUDES,'NAM_TURB',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_TURB', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_TURB)
-  CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_CH_ORILAM', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM)
-  CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_DUST', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST)
-  CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_SALT', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
-  CALL POSNAM(ILUDES,'NAM_PASPOL',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_PASPOL', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PASPOL)
 #ifdef MNH_FOREFIRE
-  CALL POSNAM(ILUDES,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_FOREFIRE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FOREFIRE)
 #endif
-  CALL POSNAM(ILUDES,'NAM_CONDSAMP',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_CONDSAMP', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONDSAMP)
-  CALL POSNAM(ILUDES,'NAM_BLOWSNOW',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_BLOWSNOW', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_BLOWSNOW)
-  CALL POSNAM(ILUDES,'NAM_2D_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_2D_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_2D_FRC)
   LTEMPDEPOS_DST(:) = LDEPOS_DST(:)
   LTEMPDEPOS_SLT(:) = LDEPOS_SLT(:)
   LTEMPDEPOS_AER(:) = LDEPOS_AER(:)
-  CALL POSNAM(ILUDES,'NAM_LATZ_EDFLX',GFOUND)
+  CALL POSNAM( TZDESFILE, 'NAM_LATZ_EDFLX', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_LATZ_EDFLX)
-  CALL POSNAM(ILUDES,'NAM_VISC',GFOUND,ILUOUT)
+  CALL POSNAM( TZDESFILE, 'NAM_VISC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_VISC)
 ! Note: it is not useful to read the FLYERS/AIRCRAFTS/BALLOONS namelists in the .des files
 ! The values here (if present in file) don't need to be compared with the ones in the EXSEGn files
-!   CALL POSNAM(ILUDES,'NAM_FLYERS',GFOUND,ILUOUT)
+!   CALL POSNAM( TZDESFILE, 'NAM_FLYERS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FLYERS)
-!   CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+!   CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
-!   CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+!   CALL POSNAM(ILUSEG,'NAM_BALLOONS', GFOUND )
 !   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
 END IF
 !
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 70d8d7e98e669b1f0dd856a2789a64ff9491e676..4beb4919742f425eecb54ff024b386b0e8097227 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -515,76 +515,76 @@ CALL INIT_NAM_STATIONn
 CALL INIT_NAM_FIREn
 !
 WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')")
-CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LUNITn)
-CALL POSNAM(ILUSEG,'NAM_CONFN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CONFN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFn)
-CALL POSNAM(ILUSEG,'NAM_DYNN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DYNN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYNn)
-CALL POSNAM(ILUSEG,'NAM_ADVN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_ADVN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ADVn)
-CALL POSNAM(ILUSEG,'NAM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_PARAM_RADN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_RADN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_RADn)
 #ifdef MNH_ECRAD
-CALL POSNAM(ILUSEG,'NAM_PARAM_ECRADN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_ECRADN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ECRADn)
 #endif
-CALL POSNAM(ILUSEG,'NAM_PARAM_KAFRN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_KAFRN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_KAFRn)
-CALL POSNAM(ILUSEG,'NAM_PARAM_MFSHALLN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_MFSHALLN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_MFSHALLn)
-CALL POSNAM(ILUSEG,'NAM_LBCN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_LBCN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LBCn)
-CALL POSNAM(ILUSEG,'NAM_NUDGINGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_NUDGINGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NUDGINGn)
-CALL POSNAM(ILUSEG,'NAM_TURBN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_TURBN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURBn)
-CALL POSNAM(ILUSEG,'NAM_DRAGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGn)
-CALL POSNAM(ILUSEG,'NAM_IBM_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_IBM_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_IBM_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_RECYCL_PARAMN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_RECYCL_PARAMn)
-CALL POSNAM(ILUSEG,'NAM_CH_MNHCN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CH_MNHCN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_MNHCn)
-CALL POSNAM(ILUSEG,'NAM_CH_SOLVERN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_CH_SOLVERN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_SOLVERn)
-CALL POSNAM(ILUSEG,'NAM_SERIESN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_SERIESN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIESn)
-CALL POSNAM(ILUSEG,'NAM_BLANKN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_BLANKN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLANKn)
-CALL POSNAM(ILUSEG,'NAM_BLOWSNOWN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_BLOWSNOWN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOWn)
-CALL POSNAM(ILUSEG,'NAM_DRAGTREEN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGTREEN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGTREEn)
-CALL POSNAM(ILUSEG,'NAM_DRAGBLDGN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_DRAGBLDGN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGBLDGn)
-CALL POSNAM(ILUSEG,'NAM_EOL',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL)
-CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL_ADNR', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR)
-CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_EOL_ALM', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM)
-CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_PROFILERN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn)
-CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_STATIONN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn)
-CALL POSNAM(ILUSEG,'NAM_FIREN',GFOUND,ILUOUT)
+CALL POSNAM( TPEXSEGFILE, 'NAM_FIREN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIREn)
 !
 IF (KMI == 1) THEN                                               
   WRITE(UNIT=ILUOUT,FMT="(' namelists common to all the models ')")
-  CALL POSNAM(ILUSEG,'NAM_CONF',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONF)
-  CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONFZ', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
-  CALL POSNAM(ILUSEG,'NAM_DYN',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_DYN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYN)
-  CALL POSNAM(ILUSEG,'NAM_NESTING',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_NESTING', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NESTING)
-  CALL POSNAM(ILUSEG,'NAM_BACKUP',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
@@ -609,14 +609,14 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUSEG,NML=NAM_BACKUP)
   ELSE
-    CALL POSNAM(ILUSEG,'NAM_FMOUT',GFOUND)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_FMOUT', GFOUND )
     IF (GFOUND) THEN
       CALL PRINT_MSG(NVERB_FATAL,'IO','READ_EXSEG_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT')
     ELSE
       IF (CPROGRAM=='MESONH') CALL PRINT_MSG(NVERB_ERROR,'IO','READ_EXSEG_n','namelist NAM_BACKUP not found')
     END IF
   END IF
-  CALL POSNAM(ILUSEG,'NAM_OUTPUT',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
     IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
@@ -641,10 +641,10 @@ IF (KMI == 1) THEN
     END IF
     READ(UNIT=ILUSEG,NML=NAM_OUTPUT)
   END IF
-  CALL POSNAM(ILUSEG,'NAM_BUDGET',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BUDGET', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BUDGET)
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RU',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RU', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RU ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RU was already allocated' )
@@ -657,7 +657,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RV was already allocated' )
@@ -670,7 +670,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RW',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RW', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RW ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RW was already allocated' )
@@ -683,7 +683,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RTH',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RTH', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RTH ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTH was already allocated' )
@@ -696,7 +696,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RTKE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RTKE', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RTKE ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTKE was already allocated' )
@@ -709,7 +709,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRV was already allocated' )
@@ -722,7 +722,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRC', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRC ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRC was already allocated' )
@@ -735,7 +735,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRR',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRR', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRR ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRR was already allocated' )
@@ -748,7 +748,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRI',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRI', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRI ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRI was already allocated' )
@@ -761,7 +761,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRS',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRS', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRS ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRS was already allocated' )
@@ -774,7 +774,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRG',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRG', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRG ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRG was already allocated' )
@@ -787,7 +787,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RRH',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RRH', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RRH ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRH was already allocated' )
@@ -800,7 +800,7 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_BU_RSV',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BU_RSV', GFOUND )
   IF (GFOUND) THEN
     IF ( ALLOCATED( CBULIST_RSV ) ) THEN
       CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RSV was already allocated' )
@@ -813,65 +813,65 @@ IF (KMI == 1) THEN
     ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(0) )
   END IF
 
-  CALL POSNAM(ILUSEG,'NAM_LES',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_LES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LES)
-  CALL POSNAM(ILUSEG,'NAM_MEAN',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_MEAN', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_MEAN)
-  CALL POSNAM(ILUSEG,'NAM_PDF',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PDF', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PDF)
-  CALL POSNAM(ILUSEG,'NAM_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FRC)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_ICE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_ICE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ICE)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_C2R2',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_C2R2', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C2R2)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_C1R3',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_C1R3', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C1R3)
-  CALL POSNAM(ILUSEG,'NAM_PARAM_LIMA',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PARAM_LIMA', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_LIMA)
-  CALL POSNAM(ILUSEG,'NAM_ELEC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_ELEC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ELEC)
-  CALL POSNAM(ILUSEG,'NAM_SERIES',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_SERIES', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIES)
-  CALL POSNAM(ILUSEG,'NAM_TURB_CLOUD',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_TURB_CLOUD', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB_CLOUD)
-  CALL POSNAM(ILUSEG,'NAM_TURB',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_TURB', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB)
-  CALL POSNAM(ILUSEG,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CH_ORILAM', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_ORILAM)
-  CALL POSNAM(ILUSEG,'NAM_DUST',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_DUST', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DUST)
-  CALL POSNAM(ILUSEG,'NAM_SALT',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_SALT', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SALT)
-  CALL POSNAM(ILUSEG,'NAM_PASPOL',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_PASPOL', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PASPOL)
 #ifdef MNH_FOREFIRE
-  CALL POSNAM(ILUSEG,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FOREFIRE', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FOREFIRE)
 #endif
-  CALL POSNAM(ILUSEG,'NAM_CONDSAMP',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_CONDSAMP', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONDSAMP)
-  CALL POSNAM(ILUSEG,'NAM_2D_FRC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_2D_FRC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_2D_FRC)
-  CALL POSNAM(ILUSEG,'NAM_LATZ_EDFLX',GFOUND)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_LATZ_EDFLX', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX)
-  CALL POSNAM(ILUSEG,'NAM_BLOWSNOW',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_BLOWSNOW', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW)
-  CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_VISC', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC)
 
-  CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT)
+  CALL POSNAM( TPEXSEGFILE, 'NAM_FLYERS', GFOUND )
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS)
 
   IF ( NAIRCRAFTS > 0 ) THEN
     CALL AIRCRAFTS_NML_ALLOCATE( NAIRCRAFTS )
-    CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_AIRCRAFTS', GFOUND )
     IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
   END IF
 
   IF ( NBALLOONS > 0 ) THEN
     CALL BALLOONS_NML_ALLOCATE( NBALLOONS )
-    CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+    CALL POSNAM( TPEXSEGFILE, 'NAM_BALLOONS', GFOUND )
     IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
   END IF
 END IF
diff --git a/src/MNH/read_pre_idea_namn.f90 b/src/MNH/read_pre_idea_namn.f90
index 7dcd303219b515d6050d7dd1bc03c781592d60ea..3a63a6b67450af94614043b6a54bb7f2aa2dc521 100644
--- a/src/MNH/read_pre_idea_namn.f90
+++ b/src/MNH/read_pre_idea_namn.f90
@@ -1,46 +1,45 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 newsrc 2006/06/06 11:10:18
-!-----------------------------------------------------------------
 !####################################
 MODULE MODI_READ_PRE_IDEA_NAM_n
 !####################################
 INTERFACE 
-  SUBROUTINE READ_PRE_IDEA_NAM_n(KLUPRE,KLUOUT)
-    INTEGER,INTENT(IN) :: KLUPRE,KLUOUT ! Logical unit numbers for EXPRE file
-                                       ! and for output_listing file
+  SUBROUTINE READ_PRE_IDEA_NAM_n( TPFILEPRE )
+    USE MODD_IO,        ONLY: TFILEDATA
+
+    TYPE(TFILEDATA), INTENT(IN) :: TPFILEPRE ! EXPRE file
   END SUBROUTINE READ_PRE_IDEA_NAM_n
 END INTERFACE
 !
 END MODULE MODI_READ_PRE_IDEA_NAM_n
 !
 !
-!     #############################################
-      SUBROUTINE READ_PRE_IDEA_NAM_n(KLUPRE,KLUOUT)
-!     #############################################
+!     ###########################################
+      SUBROUTINE READ_PRE_IDEA_NAM_n( TPFILEPRE )
+!     ###########################################
 
-USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX, NJMAX_n=>NJMAX
-USE MODD_DYN_n, ONLY: CPRESOPT_n=>CPRESOPT,NITR_n=>NITR,XRELAX_n=>XRELAX, &
-                      LRES_n=>LRES,XRES_n=>XRES
-USE MODD_LBC_n, ONLY: CLBCX_n=>CLBCX,CLBCY_n=>CLBCY
-USE MODD_CH_MNHC_n, ONLY:  LCH_INIT_FIELD_n=>LCH_INIT_FIELD, &
+USE MODD_CH_AEROSOL, ONLY: LORILAM
+USE MODD_CH_MNHC_n,  ONLY: LCH_INIT_FIELD_n=>LCH_INIT_FIELD, &
                            CCHEM_INPUT_FILE_n=>CCHEM_INPUT_FILE
-USE MODD_PARAM_n, ONLY: CSURF_n=>CSURF  
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODN_LUNIT_n           ! Namelist modules
-USE MODN_CONF_n
+USE MODD_DIM_n,      ONLY: NIMAX_n=>NIMAX, NJMAX_n=>NJMAX
+USE MODD_DYN_n,      ONLY: CPRESOPT_n=>CPRESOPT,NITR_n=>NITR,XRELAX_n=>XRELAX, &
+                           LRES_n=>LRES,XRES_n=>XRES
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LBC_n,      ONLY: CLBCX_n=>CLBCX,CLBCY_n=>CLBCY
+USE MODD_PARAM_n,    ONLY: CSURF_n=>CSURF
+
 USE MODE_POS
-!
+
+USE MODN_CONF_n
+USE MODN_LUNIT_n           ! Namelist modules
+
 IMPLICIT NONE
-INTEGER,INTENT(IN) :: KLUPRE,KLUOUT ! Logical unit numbers for EXPRE file
-                                       ! and for output_listing file
-!
+
+TYPE(TFILEDATA), INTENT(IN) :: TPFILEPRE ! EXPRE file
+
 LOGICAL :: GFOUND                  ! Return code when searching namelist 
 ! Namelist variables from $n
 INTEGER                :: NIMAX,NJMAX
@@ -53,6 +52,8 @@ CHARACTER(LEN=4), DIMENSION(2) :: CLBCX,CLBCY
 CHARACTER(LEN=5)       :: CSURF
 LOGICAL                :: LCH_INIT_FIELD
 CHARACTER(LEN=80)      :: CCHEM_INPUT_FILE
+
+INTEGER                :: ILUPRE
 !
 !*       0.2  Namelist declarations
 !
@@ -64,29 +65,31 @@ NAMELIST/NAM_CH_MNHCn_PRE/ LCH_INIT_FIELD, CCHEM_INPUT_FILE, LORILAM
 !
 !------------------------------------------------------------------------------
 !
+ILUPRE = TPFILEPRE%NLU
+
 CALL INIT_NMLVAR
-CALL POSNAM(KLUPRE,'NAM_DIMN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_DIMn_PRE)
-CALL POSNAM(KLUPRE,'NAM_DYNN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_DYNn_PRE)
-CALL POSNAM(KLUPRE,'NAM_LBCN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_LBCn_PRE)
-CALL POSNAM(KLUPRE,'NAM_GRN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_GRn_PRE)
-CALL POSNAM(KLUPRE,'NAM_CH_MNHCN_PRE',GFOUND,KLUOUT)
-IF (GFOUND) READ(UNIT=KLUPRE,NML=NAM_CH_MNHCn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_DIMN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_DIMn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_DYNN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_DYNn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_LBCN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_LBCn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_GRN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_GRn_PRE)
+CALL POSNAM( TPFILEPRE, 'NAM_CH_MNHCN_PRE', GFOUND )
+IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_CH_MNHCn_PRE)
 CALL UPDATE_MODD_FROM_NMLVAR
 !
-CALL POSNAM(KLUPRE,'NAM_CONFN',GFOUND,KLUOUT)
+CALL POSNAM( TPFILEPRE, 'NAM_CONFN', GFOUND )
 IF (GFOUND) THEN 
   CALL INIT_NAM_CONFn
-  READ(UNIT=KLUPRE,NML=NAM_CONFn)
+  READ(UNIT=ILUPRE,NML=NAM_CONFn)
   CALL UPDATE_NAM_CONFn
 END IF
-CALL POSNAM(KLUPRE,'NAM_LUNITN',GFOUND,KLUOUT)
+CALL POSNAM( TPFILEPRE, 'NAM_LUNITN', GFOUND )
 IF (GFOUND) THEN 
   CALL INIT_NAM_LUNITn 
-  READ(UNIT=KLUPRE,NML=NAM_LUNITn)
+  READ(UNIT=ILUPRE,NML=NAM_LUNITn)
   CALL UPDATE_NAM_LUNITn
 END IF
 
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 1edbd37ea3454d67c936de76de48764fde5b82c4..8c50f5066455b1cc22baee15c1b271fb8b20b324 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -1373,7 +1373,7 @@ IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NM
       ELSE
         CGROUND='NONE'
         ILUDES = TPINFILE%TDESFILE%NLU
-        CALL POSNAM(ILUDES,'NAM_PARAMN',GFOUND,ILUOUT)
+        CALL POSNAM( TPINFILE%TDESFILE, 'NAM_PARAMN', GFOUND )
         IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAMn)
       END IF
       IF (CGROUND=='NONE') THEN
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index fe77bede8d2330f95569ae06ff2f745250e362ad..2b28a476beebf3d0346f70bd7ea95c4241777631 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -186,7 +186,7 @@ CALL DEFAULT_SLEVE(LSLEVE,XLEN1,XLEN2)
 !              -------------------
 !
 NKMAX=NKMAX_n
-CALL POSNAM(IPRE_REAL1,'NAM_VER_GRID',GFOUND,ILUOUT0)
+CALL POSNAM( TPPRE_REAL1, 'NAM_VER_GRID', GFOUND )
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_VER_GRID) 
 NKMAX_n  = NKMAX
 LSLEVE_n = LSLEVE
@@ -196,7 +196,7 @@ XLEN2_n  = XLEN2
 IF (CPROGRAM=='REAL  ') THEN
   IF (ASSOCIATED (XZHAT)  ) DEALLOCATE(XZHAT)
   IF (ASSOCIATED (XZHATM) ) DEALLOCATE(XZHATM)
-  CALL POSNAM(IPRE_REAL1,'NAM_BLANKN',GFOUND,ILUOUT0)
+  CALL POSNAM( TPPRE_REAL1, 'NAM_BLANKN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_BLANKn
     READ(UNIT=IPRE_REAL1,NML=NAM_BLANKn)
diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90
index 0d06d2be3cbadabfab8ce39faa44c18c8f496bcc..b467f7c05123f190f3c63c50506cf111bdbd110f 100644
--- a/src/MNH/reset_exseg.f90
+++ b/src/MNH/reset_exseg.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2000-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -115,7 +115,7 @@ ILUNAM = TZNMLFILE%NLU
 ! Meso-NH to store these diagnostics must be allocated by the ini_model1 subroutine
 !
 IF (NCONV_KF>=0) THEN
-  CALL POSNAM(ILUNAM,'NAM_PARAM_KAFRN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_KAFRN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_KAFRn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_KAFRN)
@@ -149,7 +149,7 @@ IF (CRAD=='NONE') THEN
 END IF
 !
 IF(NRAD_3D>=1) THEN
-  CALL POSNAM(ILUNAM,'NAM_PARAM_RADN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_RADN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_RADn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_RADN)
@@ -157,7 +157,7 @@ IF(NRAD_3D>=1) THEN
     IF ( IP == 1 ) PRINT*, '  namelist NAM_PARAM_RADN read'
   END IF
 #ifdef MNH_ECRAD
-  CALL POSNAM(ILUNAM,'NAM_PARAM_ECRADN',GFOUND)
+  CALL POSNAM( TZNMLFILE, 'NAM_PARAM_ECRADN', GFOUND )
   IF (GFOUND) THEN
     CALL INIT_NAM_PARAM_EcRADn
     READ(UNIT=ILUNAM,NML=NAM_PARAM_ECRADN)
@@ -193,7 +193,7 @@ IF ( IP == 1 ) PRINT*,' '
 !
 !*      5. For retrotrajectories in // , reset NHALO >> 1 if needed from NAM_CONF_DIAG
 !          ---------------------------------------------------
-CALL POSNAM(ILUNAM,'NAM_CONF_DIAG',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONF_DIAG', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONF_DIAG)
 END IF
diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90
index 7c4ea5e2e9c224c4d9d1d2022b8fcc0c372d1d8f..c35565007fafde5c4cdbd48aba59de67dbba2bd3 100644
--- a/src/MNH/set_perturb.f90
+++ b/src/MNH/set_perturb.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -211,7 +211,7 @@ NAMELIST/NAM_PERT_PRE/CPERT_KIND,XAMPLITH,       &! Perturbation parameters
 ILUPRE = TPEXPREFILE%NLU
 ILUOUT = TLUOUT%NLU
 !
-CALL POSNAM(ILUPRE,'NAM_PERT_PRE',GFOUND,ILUOUT)
+CALL POSNAM( TPEXPREFILE, 'NAM_PERT_PRE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUPRE,NML=NAM_PERT_PRE)
 !
 !  Distribue/set identical parameter  seed to all the proc
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index ba8bdd4f2c8618bd0072d8100bd07bda3bf5bbf2..60105c54d2d93748d83d35dd2525940994ff9250 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -175,7 +175,7 @@ NYOR=NUNDEF
 !              ---------------------------- 
 !
 ILUNAM = TPNMLFILE%NLU
-CALL POSNAM(ILUNAM,'NAM_MESONH_DOM',GFOUND,ILUOUT0)  
+CALL POSNAM( TPNMLFILE, 'NAM_MESONH_DOM', GFOUND )
 IF (GFOUND) THEN
   NIMAX=NIMAX_n ; NJMAX=NJMAX_n
   READ(UNIT=ILUNAM,NML=NAM_MESONH_DOM)
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index f0ef283104e3c88829e862df850bdd5a11a39c2e..d073818d1e3a450d657454afbf24754c27213a1c 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -190,18 +190,18 @@ CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL INIT_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_SPAWN_SURF', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_BLANKN',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_BLANKN', GFOUND )
 CALL INIT_NAM_BLANKn
 IF (GFOUND) THEN
   READ(UNIT=ILUSPA,NML=NAM_BLANKn)
   CALL UPDATE_NAM_BLANKn
 END IF
-CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
-CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_CONF_SPAWN', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
 CALL IO_File_close(TZEXPAFILE)
 !
@@ -241,7 +241,7 @@ ILUSPA = TZEXPAFILE%NLU
 CALL SET_POINTERS_TO_MODEL1()
 CALL GOTO_MODEL(2)
 CALL INIT_NMLVAR
-CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
+CALL POSNAM( TZEXPAFILE, 'NAM_SPAWN_SURF', GFOUND )
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
 CALL GOTO_MODEL(1)
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index a87838c936e9c344c04f5fcc40325dac525eeab5..a6801f1de0a0391f08b41622b673fc1c038da998 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2011-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -126,38 +126,38 @@ ILUNAM = TZNMLFILE%NLU
 !
 PRINT*, 'READ THE SPEC1.NAM FILE'
 !
-CALL POSNAM(ILUNAM,'NAM_SPECTRE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SPECTRE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_SPECTRE)
   PRINT*, '  namelist NAM_SPECTRE read'
 END IF
 !
 !
-CALL POSNAM(ILUNAM,'NAM_SPECTRE_FILE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_SPECTRE_FILE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_SPECTRE_FILE)
   PRINT*, '  namelist NAM_SPECTRE_FILE read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_ZOOM_SPECTRE',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_ZOOM_SPECTRE', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_ZOOM_SPECTRE)
   PRINT*, '  namelist NAM_ZOOM_SPECTRE read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_DOMAIN_AROME',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_DOMAIN_AROME', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_DOMAIN_AROME)
   PRINT*, '  namelist NAM_DOMAIN_AROME read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_CONFZ',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFZ', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFZ)
   PRINT*, '  namelist NAM_CONFZ read'
 END IF
 !
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
   PRINT*, '  namelist NAM_CONFIO read'
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 4f0961d8e48419a0a966933dcf1ac64215208bb7..0763fd28301b809b9496f68736e0846dc36fdd8c 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2005-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -137,9 +137,9 @@ ILUNAM = TZNMLFILE%NLU
 CPGDFILE  = 'PGDFILE'                         ! name of the input file
 YZOOMFILE = ''
 YZOOMNBR  = '00'
-CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND,ILUOUT0)
+CALL POSNAM( TZNMLFILE, 'NAM_PGDFILE', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
-CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0)
+CALL POSNAM( TZNMLFILE, 'NAM_CONFIO', GFOUND )
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 CALL IO_Config_set()
 !