diff --git a/src/MNH/mnhget_desfmn.f90 b/src/MNH/mnhget_desfmn.f90
index 189bbb76259fe05ebcfc8987ca415da48ab083a5..c99de259c5fa59a4e3537fcfc43c0c2b6573e48f 100644
--- a/src/MNH/mnhget_desfmn.f90
+++ b/src/MNH/mnhget_desfmn.f90
@@ -59,13 +59,8 @@ END MODULE MODI_MNHGET_DESFM_n
 !
 !
 USE MODD_CONF,           ONLY : CPROGRAM
-USE MODD_LUNIT_n,        ONLY : CINIFILE
-USE MODD_LUNIT,          ONLY : CLUOUT0, CPGDFILE, TOUTDATAFILE
-!
-USE MODE_FM
-USE MODE_ll
-USE MODE_MODELN_HANDLER
-!
+USE MODD_LUNIT_n,        ONLY : TINIFILE
+USE MODD_LUNIT,          ONLY : TPGDFILE,TOUTDATAFILE
 !
 IMPLICIT NONE
 !
@@ -73,45 +68,24 @@ IMPLICIT NONE
 !              -------------------------
 !
 CHARACTER(LEN=5), INTENT(IN)  :: HACTION ! 'READ ', 'WRITE'
-INTEGER, INTENT(OUT) :: KLUDES ! logical unit of .des file
+INTEGER,          INTENT(OUT) :: KLUDES  ! logical unit of .des file
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
-INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
-                                    ! at the open of the file in LFI  routines
-INTEGER           :: IMI            ! model index
-!
-CHARACTER(LEN=16) :: YLUOUT         ! output listing file name
-CHARACTER(LEN=32) :: YDESFM         ! .des file name
-!
+!NONE
 !-------------------------------------------------------------------------------
 !
+!*       1.    Return logical unit of .des files
 !
-!*       1.    initialisation of logical unit of output listing
-!
-SELECT CASE(CPROGRAM)
-  CASE('REAL  ','IDEAL ','DIAG  ','PGD   ')
-    YLUOUT = CLUOUT0
-  CASE('MESONH','SPAWN ')
-    IMI = GET_CURRENT_MODEL_INDEX() 
-    WRITE(YLUOUT,FMT='(A14,I1,A1)') 'OUTPUT_LISTING',IMI,' '
-  CASE DEFAULT
-    YLUOUT = ''
-END SELECT
-!
-!*       2.    initialisation of logical units of  .des files
-!
-YDESFM =' '
 KLUDES=0
+!
 IF (HACTION=='READ ') THEN
   SELECT CASE(CPROGRAM)
     CASE('MESONH','DIAG  ')
-      YDESFM=ADJUSTL(ADJUSTR(CINIFILE)//'.des')
-      CALL FMLOOK_ll(YDESFM,YLUOUT,KLUDES,IRESP)
+      KLUDES = TINIFILE%TDESFILE%NLU
     CASE('REAL  ')
-      YDESFM=ADJUSTL(ADJUSTR(CPGDFILE)//'.des')
-      CALL FMLOOK_ll(YDESFM,YLUOUT,KLUDES,IRESP)
+      KLUDES = TPGDFILE%TDESFILE%NLU
     CASE('IDEAL ')
       KLUDES = 0
   END SELECT
diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90
index 7b8bd695424a434fac01deafebc105def5790882..22829442a2bf9f3351113428e49c8a9f9ac7fb1f 100644
--- a/src/MNH/mnhinit_io_surfn.f90
+++ b/src/MNH/mnhinit_io_surfn.f90
@@ -65,7 +65,7 @@ USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE,
                                  NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION,  &
                                  NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,        &
                                  NIE_ALL, NJE_ALL, NHALO
-USE MODD_LUNIT,            ONLY: CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: CLUOUT0, TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: CINIFILE,CINIFILEPGD,CMASK_SURFEX, TLUOUT
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,       ONLY: JPHEXT
@@ -127,7 +127,7 @@ IF (HACTION=='READ ') THEN
         CALL IO_FILE_FIND_BYNAME(TRIM(CINIFILE),TPINFILE,IRESP)
       ENDIF
     CASE('REAL  ','IDEAL ','NESPGD','SPAWN ','ZOOMPG')
-      CALL IO_FILE_FIND_BYNAME(TRIM(CPGDFILE),TPINFILE,IRESP)
+      TPINFILE => TPGDFILE
   END SELECT
 ELSE IF (HACTION=='WRITE') THEN
   IF (ASSOCIATED(TOUTDATAFILE)) THEN
diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90
index bfb22b75ff7280bed8c92799eb58554628597f7e..92c2b2b318e894c42deab87fb7ee433e57b470ec 100644
--- a/src/MNH/mnhopen_aux_io_surf.f90
+++ b/src/MNH/mnhopen_aux_io_surf.f90
@@ -61,7 +61,7 @@ USE MODD_CONF,             ONLY: CPROGRAM
 USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE, NMASK_ALL, CMASK, NIU_ALL,  &
                                  NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, CACTION, &
                                  NMASK, NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_LUNIT,            ONLY: CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: CLUOUT0, TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
@@ -92,7 +92,7 @@ INTEGER           :: IIMAX          ! number of points in X direction
 INTEGER           :: IJMAX          ! number of points in Y direction
 !
 !
-CHARACTER(LEN=28) :: YFILE          ! file name
+CHARACTER(LEN=28) :: YFILE,YPGDFILE ! file names
 INTEGER           :: ILU            ! 1D physical dimension of XCOVER
 INTEGER           :: ILUOUT
 REAL, DIMENSION(:),   ALLOCATABLE :: ZFULL  ! total cover
@@ -129,7 +129,13 @@ ELSE
   YFILE = TOUTDATAFILE%CNAME
 END IF
 !
-IF (HFILE/=YFILE .AND. HFILE/=CPGDFILE) THEN
+IF (.NOT.ASSOCIATED(TPGDFILE)) THEN
+  YPGDFILE = ''
+ELSE
+  YPGDFILE = TPGDFILE%CNAME
+END IF
+!
+IF (HFILE/=YFILE .AND. HFILE/=YPGDFILE) THEN
   CALL IO_FILE_ADD2LIST(TPINFILE,TRIM(HFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
   CALL IO_FILE_OPEN_ll(TPINFILE,KRESP=IRESP,OPARALLELIO=.FALSE.)
   !
diff --git a/src/MNH/modd_lunit.f90 b/src/MNH/modd_lunit.f90
index fee3c3d189fbeb3922aecd1f2e2fdaacfcdbd870..cea78617addf29df545e369c2409de65161d825f 100644
--- a/src/MNH/modd_lunit.f90
+++ b/src/MNH/modd_lunit.f90
@@ -48,6 +48,6 @@ IMPLICIT NONE
 CHARACTER(LEN=16),SAVE :: CLUOUT0    ! Name of output_listing file
 TYPE(TFILEDATA),POINTER :: TLUOUT0 => NULL() ! output_listing file
 TYPE(TFILEDATA),POINTER :: TOUTDATAFILE => NULL() ! output data file being written
-CHARACTER(LEN=28),SAVE :: CPGDFILE   ! name of the PGD file for PREP_REAL_CASE
+TYPE(TFILEDATA),POINTER :: TPGDFILE     => NULL() ! PGD file
 !
 END MODULE MODD_LUNIT
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index ecdab0b266dc4142be3b0095df2bc0073b82674a..831891e54ea373eff3983a08d8ddfbd647e308ce 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -1775,13 +1775,13 @@ IF (CSURF =='EXTE') THEN
   !* definition of physiographic fields
   ! computed ...
   IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN
-    CPGDFILE = TINIFILE%CNAME
+    TPGDFILE => TINIFILE
     CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
     CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
-    CPGDFILE = CINIFILEPGD                                   
+    TPGDFILE => TINIFILEPGD
   ELSE
   ! ... or read from file.
-    CPGDFILE = CPGD_FILE
+    TPGDFILE => TZPGDFILE
     CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD',                         &
                             '                            ','      ',&
                             TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH,  &
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 5429524f0835a26edd11c0548b0e92a7b9687c5a..c23ec43fa2a5b2e670a2368b25823675a9686809 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -105,7 +105,7 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_IO_ll,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
 USE MODD_GRID_n,           ONLY: XZSMT
-USE MODD_LUNIT,            ONLY: CPGDFILE,TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_NESTING
 USE MODD_PARAMETERS
@@ -305,7 +305,7 @@ END DO
 DO JPGD=1,NMODEL
   IF (LEN_TRIM(TZFILEPGD(JPGD)%TZFILE%CNAME)>0) THEN
     CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-    CPGDFILE = TZFILEPGD(JPGD)%TZFILE%CNAME
+    TPGDFILE => TZFILEPGD(JPGD)%TZFILE
     CALL GOTO_MODEL(JPGD)
     CALL GOTO_SURFEX(JPGD)
     CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD',                         &
@@ -333,7 +333,7 @@ END DO
 !
 DO JPGD=1,NMODEL
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-  CPGDFILE   = TZFILEPGD(JPGD)%TZFILE%CNAME
+  TPGDFILE     => TZFILEPGD(JPGD)%TZFILE
   TOUTDATAFILE => TZFILENESTPGD(JPGD)%TZFILE
   CALL GOTO_MODEL(JPGD)
   CALL GOTO_SURFEX(JPGD)
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 792b9404bc9cbbc85ef064f93a8fe11156482238..c848fac7bf1d1971c1d4d4edc6076838960db015 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -405,7 +405,7 @@ USE MODD_HURR_CONF
 USE MODD_IO_ll,            ONLY: GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,            ONLY: CLUOUT0,CPGDFILE,TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: CLUOUT0,TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: CINIFILE,TINIFILE,TLUOUT
 USE MODD_METRICS_n
 USE MODD_MNH_SURFEX_n
@@ -579,7 +579,7 @@ CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
 ILUOUT0 = TLUOUT0%NLU
 TLUOUT => TLUOUT0
 !
-CPGDFILE = YPGDFILE
+TPGDFILE => TZPGDFILE
 !
 CALL IO_FILE_ADD2LIST(TINIFILE,CINIFILE,'PREPREALCASE','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
 !
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 8fb535c4690f6e998af09c40b8c4d8a604e5bf1f..e3ab44721b445a5f5153e14e2a8d135eb69ddb1a 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -39,7 +39,7 @@ USE MODD_CONF,        ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
 USE MODD_IO_ll,       ONLY : TFILEDATA, LIOCDF4, LLFIOUT, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
-USE MODD_LUNIT,       ONLY : CLUOUT0, CPGDFILE, TLUOUT0
+USE MODD_LUNIT,       ONLY : CLUOUT0, TPGDFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
@@ -114,7 +114,7 @@ CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
                                    ,YPGDFILE,TZPGDFILE)
 ILUOUT0 = TLUOUT0%NLU
 !
-CPGDFILE = YPGDFILE
+TPGDFILE => TZPGDFILE
 !
 CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CINIFILE),'PREPSURFEX','WRITE',KLFITYPE=1,KLFIVERB=1)
 !
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 8562c486c8dd4f6cbafbdb9acef08be50eb25862..638fdabd2205166e4ef492dc31e3c9b145792b9e 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -1292,7 +1292,7 @@ USE MODE_POS
 !
 USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
 USE MODD_CONF,        ONLY : LCARTESIAN, CPROGRAM
-USE MODD_LUNIT,       ONLY : CPGDFILE
+USE MODD_LUNIT,       ONLY : TPGDFILE
 !
 !
 IMPLICIT NONE
@@ -1339,8 +1339,8 @@ ELSE IF (HREC=='SNOW_ROOF_TYPE'.AND.IMASDEV<46) THEN
 ELSE IF (HREC=='PHOTO'.AND.IMASDEV<46) THEN
   HFIELD='NON'
 ELSE IF ( HREC=='GRID_TYPE'.AND. (IMASDEV<46 .OR. &
-                           (CPROGRAM=='IDEAL ' .AND. CPGDFILE/=TOUT%CNAME) .OR. &
-                           (CPROGRAM=='SPAWN ' .AND. CPGDFILE/=TOUT%CNAME) .OR. &
+                           (CPROGRAM=='IDEAL ' .AND. .NOT.ASSOCIATED(TPGDFILE,TOUT)) .OR. &
+                           (CPROGRAM=='SPAWN ' .AND. .NOT.ASSOCIATED(TPGDFILE,TOUT)) .OR. &
                            CPROGRAM=='ZOOMPG'                         )) THEN
   IF (LCARTESIAN) THEN
     HFIELD="CARTESIAN "
diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90
index d549fcf15fb5a5b99dc0f425e1a3e5b605cc1864..cc27f9cde713d4ac5ff929edc4eb775eb7789db8 100644
--- a/src/MNH/spawn_surf.f90
+++ b/src/MNH/spawn_surf.f90
@@ -80,7 +80,7 @@ USE MODD_CONF,         ONLY : NVERB
 USE MODD_GRID_n,       ONLY : XZS
 USE MODD_IO_ll,        ONLY : TFILEDATA
 USE MODD_IO_SURF_MNH,  ONLY : COUTFILE
-USE MODD_LUNIT,        ONLY : CPGDFILE, TOUTDATAFILE
+USE MODD_LUNIT,        ONLY : TPGDFILE, TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_NESTING,      ONLY : CMY_NAME, CDAD_NAME
 USE MODD_PARAM_n,      ONLY : CSURF
@@ -121,7 +121,7 @@ INTEGER :: IINFO_ll
 !
 IF (CSURF=='EXTE') THEN
   IF (OSPAWN_SURF) THEN
-    CPGDFILE   = CMY_NAME(2)
+    TPGDFILE     => TPOUTDATAFILE !Corresponding to file with CNAME = CMY_NAME(2)
     TOUTDATAFILE => TPOUTDATAFILE !Corresponding to file with CNAME = CMY_NAME(2)
     COUTFILE   = CMY_NAME(2)
     !* spawn PGD fields
@@ -130,7 +130,7 @@ IF (CSURF=='EXTE') THEN
     !CALL GO_TOMODEL_ll(1,IINFO_ll)
     !CALL GOTO_MODEL(1)
     !JUAN REALZ
-    CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',HINIFILEPGD,'MESONH',CPGDFILE,'MESONH')
+    CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',HINIFILEPGD,'MESONH',TPGDFILE%CNAME,'MESONH')
     CALL MNHPUT_ZS_n
     !* writing of physiographic fields in the file
     CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 01bfaf3c7f2adca5428d0fba3b6824fbe405b9a9..4c9498550b7d72c1c96f8d5c863ef8eefa9096a6 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -53,7 +53,7 @@
 USE MODD_CONF,   ONLY : CPROGRAM, NMASDEV, NBUGFIX, CBIBUSER, &
                         L1D, L2D, LPACK
 USE MODD_IO_ll,  ONLY:  LIOCDF4,LLFIOUT,NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
-USE MODD_LUNIT,  ONLY : CLUOUT0, CPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT,  ONLY : CLUOUT0, TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX
 USE MODD_PARAM_n,     ONLY : CSURF
 USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
@@ -94,6 +94,7 @@ INTEGER :: IRESP    ! return code for I/O
 INTEGER :: ILUOUT0
 INTEGER :: ILUNAM
 INTEGER :: IINFO_ll
+CHARACTER(LEN=28)  :: CPGDFILE              ! name of the PGD file
 CHARACTER(LEN=28)  :: YZOOMFILE             ! name of the output file
 CHARACTER(LEN=2)   :: YZOOMNBR
 CHARACTER(LEN=28)  :: YMY_NAME,YDAD_NAME