diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index b305c1aaada034e98869801a7a6006abb2793353..3007bf5c4793fcfcdcf5620e9cbc722b3c6d8bbb 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -812,7 +812,7 @@ END DO
     TYPE(option),DIMENSION(:),   INTENT(IN)  :: options
     INTEGER,                     INTENT(IN)  :: runmode
 
-    INTEGER                     :: idx
+    INTEGER                     :: idx, IRESP2
     INTEGER(KIND=IDCDF_KIND)    :: omode
     INTEGER(KIND=IDCDF_KIND)    :: status
     INTEGER(KIND=LFI_INT)       :: ilu,iresp
@@ -857,41 +857,39 @@ END DO
    ALLOCATE(NIMAX_ll,NJMAX_ll,NKMAX)
    CALL IO_READ_FIELD(INFILES(1)%TFILE,'IMAX',NIMAX_ll)
    CALL IO_READ_FIELD(INFILES(1)%TFILE,'JMAX',NJMAX_ll)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'KMAX',NKMAX)
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'KMAX',NKMAX,IRESP2)
+   IF (IRESP2/=0) NKMAX = 0
    !
    CALL IO_READ_FIELD(INFILES(1)%TFILE,'PROGRAM',CPROGRAM_ORIG)
    !
    ALLOCATE(CSTORAGE_TYPE)
    CALL IO_READ_FIELD(INFILES(1)%TFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
    !
-   IF ( TRIM(CPROGRAM_ORIG)/='PGD' &
-     .AND. .NOT.(TRIM(CPROGRAM_ORIG)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
-     ALLOCATE(XXHAT(NIMAX_ll+2*JPHEXT))
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'XHAT',XXHAT)
-     ALLOCATE(XYHAT(NJMAX_ll+2*JPHEXT))
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'YHAT',XYHAT)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
-     !
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LAT0',XLAT0)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LON0',XLON0)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'BETA',XBETA)
-     !
-     IF (.NOT.LCARTESIAN) THEN
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'RPK',   XRPK)
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'LATORI',XLATORI)
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'LONORI',XLONORI)
-     ENDIF
-     !
-     IF (TRIM(CPROGRAM_ORIG)/='NESPGD') THEN
-       ALLOCATE(XZHAT(NKMAX+2*JPVEXT))
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'ZHAT',XZHAT)
-       ALLOCATE(LSLEVE)
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'SLEVE',LSLEVE)
-       ALLOCATE(TDTMOD)
-       CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTMOD',TDTMOD)
-     END IF
-   END IF
+   ALLOCATE(XXHAT(NIMAX_ll+2*JPHEXT))
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'XHAT',XXHAT)
+   ALLOCATE(XYHAT(NJMAX_ll+2*JPHEXT))
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'YHAT',XYHAT)
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
+   !
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LAT0',XLAT0)
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LON0',XLON0)
+   CALL IO_READ_FIELD(INFILES(1)%TFILE,'BETA',XBETA)
    !
+   IF (.NOT.LCARTESIAN) THEN
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'RPK',   XRPK)
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LATORI',XLATORI)
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LONORI',XLONORI)
+   ENDIF
+   !
+   IF (TRIM(CPROGRAM_ORIG)/='PGD' .AND. TRIM(CPROGRAM_ORIG)/='NESPGD' .AND. TRIM(CPROGRAM_ORIG)/='ZOOMPG' &
+       .AND. .NOT.(TRIM(CPROGRAM_ORIG)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
+     ALLOCATE(XZHAT(NKMAX+2*JPVEXT))
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'ZHAT',XZHAT)
+     ALLOCATE(LSLEVE)
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'SLEVE',LSLEVE)
+     ALLOCATE(TDTMOD)
+     CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTMOD',TDTMOD)
+   END IF
    !
    ! Outfiles
    !
@@ -905,7 +903,7 @@ END DO
          idx = KNFILES_OUT
          CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,HOUTFILE,'UNKNOWN','WRITE', &
                                HFORMAT='NETCDF4',OOLD=.TRUE.)
-         CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE)
+         CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
          IF (options(OPTCOMPRESS)%set) THEN
            outfiles(idx)%tfile%LNCCOMPRESS       = .TRUE.
@@ -928,7 +926,7 @@ END DO
        CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,houtfile,'UNKNOWN','WRITE', &
                              HFORMAT='LFI',KLFIVERB=0,OOLD=.TRUE.)
        LIOCDF4 = .FALSE. !Necessary to open correctly the LFI file
-       CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE)
+       CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
        LIOCDF4 = .TRUE.
    END IF
    !
@@ -939,7 +937,7 @@ END DO
      idx = KNFILES_OUT
      CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,'dummy_file','UNKNOWN','WRITE', &
                            HFORMAT='NETCDF4',OOLD=.TRUE.)
-     CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE)
+     CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
    END IF
 
    PRINT *,'--> Converted to file: ', TRIM(houtfile)
@@ -992,7 +990,7 @@ END DO
       filename = trim(houtfile)//'.'//TRIM(YVARS(ji))
       CALL IO_FILE_ADD2LIST(outfiles(ji)%TFILE,filename,'UNKNOWN','WRITE', &
                             HFORMAT='NETCDF4')
-      CALL IO_FILE_OPEN_ll(outfiles(ji)%TFILE)
+      CALL IO_FILE_OPEN_ll(outfiles(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
       IF (options(OPTCOMPRESS)%set) THEN
         outfiles(ji)%tfile%LNCCOMPRESS       = .TRUE.