diff --git a/tools/diachro/src/DIAPRO/extract_and_open_files.f90 b/tools/diachro/src/DIAPRO/extract_and_open_files.f90
index c1fd1e67ea06b4e79cbce43d324cfcc9bbb406b0..ab6a79f238a30554808f455b1efecfdd0ceeb249 100644
--- a/tools/diachro/src/DIAPRO/extract_and_open_files.f90
+++ b/tools/diachro/src/DIAPRO/extract_and_open_files.f90
@@ -55,11 +55,13 @@ END MODULE MODI_EXTRACT_AND_OPEN_FILES
 !
 USE MODD_FILES_DIACHRO ! NBGUIL
 USE MODD_ALLOC_FORDIACHRO
-USE MODD_RESOLVCAR 
+USE MODD_RESOLVCAR
+USE MODD_PARAMETERS,ONLY:JPHEXT
 !USE MODD_DIM1
 !USE MODN_PARA
 !USE MODN_NCAR
 USE MODI_CREATLINK
+USE MODI_FMREAD
 !
 IMPLICIT NONE
 !
@@ -89,6 +91,8 @@ INTEGER   ::   ILU, INUM, IRESP2
 LOGICAL   ::   GPLUS
 !INTEGER           :: IIINF, IJINF, IISUP, IJSUP
 !REAL              :: ZIDEBCOU, ZJDEBCOU
+CHARACTER(LEN=20) :: YCOMMENT
+INTEGER           ::  ILENCH,ILENG,IGRID
 !------------------------------------------------------------------------------
 !
 YCARIN = HCARIN
@@ -362,16 +366,9 @@ DO J=1,NBGUIL,2 !***********************************************************
 	NUMFILECUR=NUMFILES(NBFILES)
 
 ! ouverture du listing
-        !CALL FMLOOK(CLUOUTDIAS(NBFILES),CLUOUTDIAS(NBFILES),&
-        !            NLUOUTDIAS(NBFILES),NRESPDIAS(NBFILES)  )
-        !IF (NRESPDIAS(NBFILES) .NE. 0) THEN
-        !WRITE(YC,'(I2.2)')NBFILES
-        !CLUOUTDIAS(NBFILES)=ADJUSTL(ADJUSTR(CLUOUTDIAS(NBFILES))//YC)
-        !print *,'NBFILES CLUOUTDIAS(NBFILES) YC',NBFILES,CLUOUTDIAS(NBFILES),YC
         CALL FMATTR(CLUOUTDIAS(NBFILES),CLUOUTDIAS(NBFILES), &
                     NLUOUTDIAS(NBFILES),NRESPDIAS(NBFILES))
         OPEN(UNIT=NLUOUTDIAS(NBFILES),FILE=CLUOUTDIAS(NBFILES),FORM='FORMATTED')
-        !ENDIF
         WRITE(UNIT=NLUOUTDIAS(NBFILES),FMT=1)NBFILES,' ',CFILEDIAS(NBFILES)
 	1 FORMAT(' OPEN DIACHRONIC FILE ',I2.2,A,A28)
 
@@ -397,12 +394,10 @@ DO J=1,NBGUIL,2 !***********************************************************
 
 ! Modif le 3/1/96. Pour conserver la chaine _FILEx_
 	IF(JM>=1)THEN
-!       IF(JM>1)THEN
 	  HCAROUT(1:NMGUIL(J)-1)=YCARIN(1:NMGUIL(J)-1)
-!         HCAROUT(1:JM-1)=YCARIN(1:JM-1)
-!         print *,' HCAROUT 1 ',HCAROUT
         ENDIF
-
+! READ JPHEXT
+        CALL FMREAD(CFILEDIAS(NBFILES),'JPHEXT',CLUOUTDIAS(NBFILES),ILENG,JPHEXT,IGRID,ILENCH,YCOMMENT,NRESPDIAS(NBFILES))
       ELSE    ! NBFILES/=0
 !
 ! Fichiers autres que le premier
@@ -464,8 +459,6 @@ DO J=1,NBGUIL,2 !***********************************************************
           CFILEDIAS(NBFILES)=ADJUSTL(YNAMFILE)
 
 ! Ouverture du fichier lfi et fermeture du fichier des correspondant
-          !WRITE(YC,'(I2.2)')NBFILES
-	  !CLUOUTDIAS(NBFILES)=ADJUSTL(ADJUSTR(CLUOUTDIAS(NBFILES))//YC)
           CALL FMLOOK(CLUOUTDIAS(NBFILES),CLUOUTDIAS(NBFILES), &
                       NLUOUTDIAS(NBFILES),NRESPDIAS(NBFILES))
           IF (NRESPDIAS(NBFILES) .NE. 0) THEN
@@ -473,7 +466,6 @@ DO J=1,NBGUIL,2 !***********************************************************
             LPBREAD=.TRUE.
             RETURN
           ENDIF
-          !OPEN(UNIT=NLUOUTDIAS(NBFILES),FILE=CLUOUTDIAS(NBFILES),FORM='FORMATTED')
           WRITE(UNIT=NLUOUTDIAS(NBFILES),FMT=1)NBFILES,' ',CFILEDIAS(NBFILES)
 
       IF(NVERBIA>0) THEN
@@ -501,24 +493,18 @@ DO J=1,NBGUIL,2 !***********************************************************
 	IF(MAX(1,J-1) == 1)THEN
 ! Modif le 3/1/96. Pour conserver la chaine _FILEx_
 	  IDIF=NMGUIL(J)-1-1
-!         IDIF=JM-1-1
 	  IF(IDIF >0)THEN
 	    JMM=LEN_TRIM(HCAROUT)+1
 ! Modif le 3/1/96. Pour conserver la chaine _FILEx_
 	    HCAROUT(JMM:JMM+IDIF)=YCARIN(1:NMGUIL(J)-1)
-!           HCAROUT(JMM:JMM+IDIF)=YCARIN(1:JM-1)
-!           print *,' HCAROUT 2 ',HCAROUT
           ENDIF
 	ELSE
 ! Modif le 3/1/96. Pour conserver la chaine _FILEx_
 	  IDIF=NMGUIL(J)-1-(NMGUIL(MAX(1,J-1))+1)
-!         IDIF=JM-1-(NMGUIL(MAX(1,J-1))+1)
           IF(IDIF >0)THEN
 	    JMM=LEN_TRIM(HCAROUT)+1
 ! Modif le 3/1/96. Pour conserver la chaine _FILEx_
 	    HCAROUT(JMM:JMM+IDIF)=YCARIN(NMGUIL(MAX(1,J-1))+1:NMGUIL(J)-1)
-!           HCAROUT(JMM:JMM+IDIF)=YCARIN(NMGUIL(MAX(1,J-1))+1:JM-1)
-!           print *,' HCAROUT 2 ',HCAROUT
           ENDIF
 	ENDIF
 
@@ -532,16 +518,6 @@ DO J=1,NBGUIL,2 !***********************************************************
       IF(NVERBIA>0) THEN
         print *,' ** EXTRACT avant lecture de l entete de ',TRIM(CFILEDIAS(JME))
       ENDIF
-!   IIINF=NIINF; IJINF=NJINF; IISUP=NISUP; IJSUP=NJSUP
-!   ZIDEBCOU=XIDEBCOU; ZJDEBCOU=XJDEBCOU
-!   CALL INI_CST
-!   CALL READ_DIMGRIDREF(JME,CFILEDIAS(JME),CLUOUTDIAS(JME))
-!   CALL INIDEF
-!   NIMNMX=-1
-!   LMINMAX=.TRUE.
-!   CALL COMPCOORD_FORDIACHRO(0)
-!   NIINF=IIINF; NJINF=IJINF; NISUP=IISUP; NJSUP=IJSUP
-!   XIDEBCOU=ZIDEBCOU; XJDEBCOU=ZJDEBCOU
     CALL READ_FILEHEAD(JME,CFILEDIAS(JME),CLUOUTDIAS(JME))
     LFIC1=.TRUE.
 
diff --git a/tools/diachro/src/EXTRACTDIA/readvar.f90 b/tools/diachro/src/EXTRACTDIA/readvar.f90
index 536585bebf1734107c15605149416857671d3b45..63e9db135b69a7e25d7da782d3586daa0bd68608 100644
--- a/tools/diachro/src/EXTRACTDIA/readvar.f90
+++ b/tools/diachro/src/EXTRACTDIA/readvar.f90
@@ -72,7 +72,7 @@
 !              ------------
 !
 ! modules MesoNH
-USE MODD_PARAMETERS, ONLY: XUNDEF
+USE MODD_PARAMETERS, ONLY: XUNDEF,JPHEXT
 USE MODD_DIM1, ONLY: NIMAX,NJMAX,NKMAX
 USE MODD_GRID1, ONLY: XZZ
 ! modules DIACHRO
@@ -267,6 +267,9 @@ IF ( HFLAGFILE(1:3) == 'OPE' ) THEN
 !! ne pas relacher unite logique car compute_r00_pc doit fermer (avec FMCLOS)
 !!le fic.  d entree qui a ete amende des var. Lag.
 !
+! READ JPHEXT
+    CALL FMREAD(CFILEDIAS(NBFILES),'JPHEXT',CLUOUTDIAS(NBFILES),1,JPHEXT,IGRID,ILENCH,YCOMMENT,NRESPDIAS(NBFILES))
+
 !*       3.1   Reading head of file
 !              --------------------
 !      
diff --git a/tools/diachro/src/FM2DIA/read_dimgridref_fm2dia.f90 b/tools/diachro/src/FM2DIA/read_dimgridref_fm2dia.f90
index 4a8523d045adeea8a2d4e35a00b4500da8f35644..c8115f77bad86d46b662de353e43fe96e04a3d2b 100644
--- a/tools/diachro/src/FM2DIA/read_dimgridref_fm2dia.f90
+++ b/tools/diachro/src/FM2DIA/read_dimgridref_fm2dia.f90
@@ -167,6 +167,10 @@ NLENG=1
 CALL FMREAD(HNAMFILE,CRECFM,HLUOUT,NLENG,NBUGFIX,NGRID,NLENCH,CCOMMENT,NRESP)
 IF (NRESP /=0 ) NBUGFIX=0
 !
+CRECFM='JPHEXT'
+NLENG=1
+CALL FMREAD(HNAMFILE,CRECFM,HLUOUT,NLENG,JPHEXT,NGRID,NLENCH,CCOMMENT,NRESP)
+IF (NRESP /=0 ) JPHEXT=1
 !*	 1.7   Allocates the first bunch of input arrays
 !
 !*       1.7.1  Local variables :
diff --git a/tools/diachro/src/mesonh/write_lfifm1_fordiachro_cv.f90 b/tools/diachro/src/mesonh/write_lfifm1_fordiachro_cv.f90
index 9312c6d5943d285a7c8c20a06d8bb68b2cfebd05..20fe8c6b025ea71308de8b9395c02b27805f5532 100644
--- a/tools/diachro/src/mesonh/write_lfifm1_fordiachro_cv.f90
+++ b/tools/diachro/src/mesonh/write_lfifm1_fordiachro_cv.f90
@@ -265,6 +265,13 @@ IGRID=0
 ILENCH=LEN(YCOMMENT)
 CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,ILENG,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
 !
+YRECFM='JPHEXT'
+CALL ELIM(YRECFM)
+YCOMMENT=' '
+ILENG=1
+IGRID=0
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,ILENG,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
diff --git a/tools/diachro/src/mesonh_MOD/modd_parameters.f90 b/tools/diachro/src/mesonh_MOD/modd_parameters.f90
index 29fd9e650f691abb80d105614875e4979c534838..a6e4df8152d83afc9a3c3026cc6e91f7f92eeada 100644
--- a/tools/diachro/src/mesonh_MOD/modd_parameters.f90
+++ b/tools/diachro/src/mesonh_MOD/modd_parameters.f90
@@ -38,7 +38,7 @@
 !
 IMPLICIT NONE
 !
-INTEGER, PARAMETER :: JPHEXT = 1      ! Horizontal External points number
+INTEGER, SAVE :: JPHEXT = 1      ! Horizontal External points number
 INTEGER, PARAMETER :: JPVEXT = 1      ! Vertical External points number
 INTEGER, PARAMETER :: JPMODELMAX = 8  ! Maximum allowed number of nested models 
 INTEGER, PARAMETER :: JPCPLFILEMAX = 8 ! Maximum allowed number of CouPLing FILEs 
diff --git a/tools/fmmore/src/readuntouch.f90 b/tools/fmmore/src/readuntouch.f90
index 0bccd307fbc63101b4dbe533fdf0bf59f6b21c49..8e256504dc79391102038ebb146077c45e0fe32a 100644
--- a/tools/fmmore/src/readuntouch.f90
+++ b/tools/fmmore/src/readuntouch.f90
@@ -22,7 +22,7 @@ CHARACTER(LEN=*),INTENT(IN) :: HFMFILE,HLUOUT
 !
 !*       0.2    Declarations of local variables
 !
-INTEGER :: IGRID,ILENCH,IRESP,NIMAX,NJMAX,NKMAX,IXOR,IYOR
+INTEGER :: IGRID,ILENCH,IRESP,NIMAX,NJMAX,NKMAX,IXOR,IYOR,JPHEXT
 INTEGER :: ILENG ! en attendant une surcouche officielle...
 INTEGER :: NMASDEV,NBUGFIX,NVERSION_SURFEX,NBUGFIX_SURFEX
 CHARACTER(LEN=100) :: YCOMMENT
@@ -101,6 +101,19 @@ IF (IRESP.EQ.0) THEN
   WRITE(6,*) '####'
 END IF
 !
+IF (NMASDEV>=52) THEN
+  YRECFM='JPHEXT'
+  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP)
+  IF (IRESP.EQ.0) THEN
+    WRITE(6,*) '####  JPHEXT = ',JPHEXT
+    WRITE(6,*) '####'
+  END IF
+ELSE
+  JPHEXT=1
+    WRITE(6,*) '####  JPHEXT = ',JPHEXT
+    WRITE(6,*) '####'
+END IF
+!
 YRECFM='SURF'
 IF (NMASDEV>=46) THEN
   CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
@@ -108,49 +121,50 @@ IF (NMASDEV>=46) THEN
     WRITE(6,*) '####  SURF = ',CSURF
     WRITE(6,*) '####'
   END IF
-    CALL FMREAD(HFMFILE,'DIM_FULL',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
-
-YRECFM='VERSION'
-! en attendant une surcouche officielle...
-CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NVERSION_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
-IF (IRESP.EQ.0) THEN
-  WRITE(6,*) '#### SURFEX VERSION = ',NVERSION_SURFEX
-  WRITE(6,*) '####'
-END IF
-
-YRECFM='BUG'
-! en attendant une surcouche officielle...
-CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NBUGFIX_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
-IF (IRESP.EQ.0) THEN
-  WRITE(6,*) '#### SURFEX BUGFIX = ',NBUGFIX_SURFEX
-  WRITE(6,*) '####'
-END IF
-
-    IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  DIM_FULL = ',IXOR
-    END IF
-    CALL FMREAD(HFMFILE,'DIM_NATURE',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
-    IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  DIM_NATURE = ',IXOR
-    END IF
-    CALL FMREAD(HFMFILE,'DIM_SEA',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
-    IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  DIM_SEA = ',IXOR
-    END IF
-    CALL FMREAD(HFMFILE,'DIM_TOWN',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+  
+  IF (CSURF=="EXTE") THEN
+    YRECFM='VERSION'
+    ! en attendant une surcouche officielle...
+    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NVERSION_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
     IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  DIM_TOWN = ',IXOR
+      WRITE(6,*) '#### SURFEX VERSION = ',NVERSION_SURFEX
+      WRITE(6,*) '####'
     END IF
-    CALL FMREAD(HFMFILE,'DIM_WATER',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+
+    YRECFM='BUG'
+    ! en attendant une surcouche officielle...
+    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NBUGFIX_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
     IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  DIM_WATER = ',IXOR
+      WRITE(6,*) '#### SURFEX BUGFIX = ',NBUGFIX_SURFEX
       WRITE(6,*) '####'
-    END IF 
-    CALL FMREAD(HFMFILE,'ECOCLIMAP',HLUOUT,ILENG,LECOCLIMAP,IGRID,ILENCH,YCOMMENT,IRESP)
+    END IF
+    CALL FMREAD(HFMFILE,'DIM_FULL',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
     IF (IRESP.EQ.0) THEN
-      WRITE(6,*) '####  ECOCLIMAP = ',LECOCLIMAP
-      WRITE(6,*) '####'
+      WRITE(6,*) '####  DIM_FULL = ',IXOR
     END IF
+!    CALL FMREAD(HFMFILE,'DIM_NATURE',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+!    IF (IRESP.EQ.0) THEN
+!      WRITE(6,*) '####  DIM_NATURE = ',IXOR
+!    END IF
+!    CALL FMREAD(HFMFILE,'DIM_SEA',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+!    IF (IRESP.EQ.0) THEN
+!      WRITE(6,*) '####  DIM_SEA = ',IXOR
+!    END IF
+!    CALL FMREAD(HFMFILE,'DIM_TOWN',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+!    IF (IRESP.EQ.0) THEN
+!      WRITE(6,*) '####  DIM_TOWN = ',IXOR
+!    END IF
+!    CALL FMREAD(HFMFILE,'DIM_WATER',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
+!    IF (IRESP.EQ.0) THEN
+!      WRITE(6,*) '####  DIM_WATER = ',IXOR
+!      WRITE(6,*) '####'
+!    END IF 
+!    CALL FMREAD(HFMFILE,'ECOCLIMAP',HLUOUT,ILENG,LECOCLIMAP,IGRID,ILENCH,YCOMMENT,IRESP)
+!    IF (IRESP.EQ.0) THEN
+!      WRITE(6,*) '####  ECOCLIMAP = ',LECOCLIMAP
+!      WRITE(6,*) '####'
+!    END IF
+  END IF
 END IF
 !
 IF (NMASDEV>=46) THEN
@@ -303,7 +317,7 @@ IF (.NOT.LCARTESIAN) THEN
 END IF 
 ! 
 YRECFM='XHAT'
-ALLOCATE(XXHAT(NIMAX+2))
+ALLOCATE(XXHAT(NIMAX+2*JPHEXT))
 ! en attendant une surcouche officielle...
 !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
 ILENG=SIZE(XXHAT)
@@ -312,7 +326,7 @@ WRITE(6,*) '####  X mesh = ',XXHAT(2)-XXHAT(1)
 WRITE(6,*) '####  XHAT(1:2) = ',XXHAT(1),XXHAT(2)
 !
 YRECFM='YHAT'
-ALLOCATE(XYHAT(NJMAX+2))
+ALLOCATE(XYHAT(NJMAX+2*JPHEXT))
 ! en attendant une surcouche officielle...
 !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
 ILENG=SIZE(XYHAT)
@@ -370,9 +384,6 @@ IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
   END IF
 END IF
 !
-    YRECFM='CH_EMIS'
-    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
-    WRITE(6,*) '####  LCH_EMIS = ',LSLEVE
 
 IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
 !