diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 449c093b5f86a71f165e3673571741a01db86b87..b74d9be93abfb67033973409eb3bedd84c051d03 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -74,7 +74,7 @@
 !!   P.Tulet : 11/2015 : new diagnostic for aerosol
 !!  09/2015     (S. Bielli)    Add netcdf call for phys_param
 !!  04/2016     (G.Delautier) replace print by write in OUTPUT LISTING
-!!
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -149,10 +149,10 @@ USE MODI_MNHGET_SURF_PARAM_n
 USE MODI_VERSION
 USE MODI_INIT_MNH
 USE MODI_MENU_DIACHRO
-USE MODI_GOTO_SURFEX
 USE MODI_WRITE_SURF_ATM_N
 USE MODI_DIAG_SURF_ATM_N
-USE MODI_WRITE_DIAG_SURF_ATM_N   
+USE MODI_WRITE_DIAG_SURF_ATM_N  
+USE MODD_MNH_SURFEX_n
 !  
 #ifdef MNH_NCWRIT
 USE MODN_NCOUT
@@ -740,32 +740,36 @@ ZTIME1=ZTIME2
 !*       6.0    Surface diagnostics
 !
 IF (CSURF=='EXTE') THEN
-  CALL GOTO_SURFEX(1,.TRUE.)
+  CALL GOTO_SURFEX(1)
 #ifdef MNH_NCWRIT
   NC_WRITE= LNETCDF
   NC_FILE = 'sf1'
-  CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
+  CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
   IF ( LNETCDF ) THEN
     DEF_NC=.FALSE.
 !     print * , ' SECOND WRITE '
-    CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
+    CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
     DEF_NC=.TRUE.
   END IF
-  CALL DIAG_SURF_ATM_n('MESONH')
+  CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
+                             YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
+                             YSURF_CUR%U, YSURF_CUR%USS,'MESONH')
   NC_WRITE= LNETCDF
   NC_FILE = 'sf2'
-  CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+  CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
   IF ( LNETCDF ) THEN
     DEF_NC=.FALSE.
 !     print * , ' SECOND WRITE '
-    CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+    CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
     DEF_NC=.TRUE.
   END IF
   !!!!!! MODIF SB
 #else
-  CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
-  CALL DIAG_SURF_ATM_n('MESONH')
-  CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+  CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
+  CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
+                             YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
+                             YSURF_CUR%U, YSURF_CUR%USS,'MESONH')
+  CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
 #endif
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER WRITE_DIAG_SURF_ATM_n'
diff --git a/src/MNH/goto_model_surfex_mnh.f90 b/src/MNH/goto_model_surfex_mnh.f90
index 818bd1026588796f32ec1e28a23dfcb1b5d19d0b..e96c9c8a18827196d7be92f5f4a766e0da0856ce 100644
--- a/src/MNH/goto_model_surfex_mnh.f90
+++ b/src/MNH/goto_model_surfex_mnh.f90
@@ -13,7 +13,7 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH
   !
   INTERFACE
     !     ###############################
-          SUBROUTINE GOTO_MODEL_SURFEX_MNH(KMI, KINFO_ll)
+          SUBROUTINE GOTO_MODEL_SURFEX_MNH(U,KMI, KINFO_ll)
     !     ###############################
     !!
     !!    PURPOSE
@@ -51,18 +51,14 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH
     !*    0.     DECLARATION
     !            -----------
     !
-!    USE MODE_ll
-    USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll, GET_DIM_PHYS_ll
-    USE MODD_SURF_ATM_n, ONLY : NDIM_FULL, NSIZE_FULL, NIMAX_SURF_ll, NJMAX_SURF_ll, NIMAX_SURF_LOC, NJMAX_SURF_LOC
-!    USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
-    !
-!    USE MODI_GOTO_SURFEX
+    USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
     !
     IMPLICIT NONE
     !
     !*    0.1    Declaration of dummy arguments
     !            ------------------------------
     !
+    TYPE(SURF_ATM_t), INTENT(INOUT) :: U
     INTEGER,                         INTENT(IN)    :: KMI    !model id
     INTEGER,                         INTENT(OUT)    :: KINFO_ll
           END SUBROUTINE GOTO_MODEL_SURFEX_MNH
@@ -71,7 +67,7 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH
   !
 END MODULE MODI_GOTO_MODEL_SURFEX_MNH
 !     ###############################
-      SUBROUTINE GOTO_MODEL_SURFEX_MNH(KMI, KINFO_ll)
+      SUBROUTINE GOTO_MODEL_SURFEX_MNH(U,KMI, KINFO_ll)
 !     ###############################
 !!
 !!    PURPOSE
@@ -102,12 +98,13 @@ END MODULE MODI_GOTO_MODEL_SURFEX_MNH
 !!    ------------
 !!
 !!    Original      08/2015
+!!  06/2016     (G.Delautier) phasage surfex 8
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_SURF_ATM_n, ONLY : NDIM_FULL, NSIZE_FULL, NIMAX_SURF_ll, NJMAX_SURF_ll, NIMAX_SURF_LOC, NJMAX_SURF_LOC
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
 !
 !USE MODE_ll
 USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll, GET_DIM_PHYS_ll
@@ -115,13 +112,13 @@ USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
 USE MODD_VAR_ll, ONLY : YSPLITTING
 USE MODE_MODELN_HANDLER
 !
-USE MODI_GOTO_SURFEX
 !
 IMPLICIT NONE
 !
 !*    0.1    Declaration of dummy arguments
 !            ------------------------------
 !
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
 INTEGER,                         INTENT(IN)    :: KMI    !model id
 INTEGER,                         INTENT(OUT)    :: KINFO_ll
 !
@@ -148,8 +145,8 @@ CHARACTER*1 :: HSPLIT
 !CALL GO_TOMODEL_ll(KMI,KINFO_ll)
 !CALL GOTO_MODEL(KMI)
 !
-CALL GET_GLOBALDIMS_ll(NIMAX_SURF_ll,NJMAX_SURF_ll)
-NDIM_FULL = NIMAX_SURF_ll*NJMAX_SURF_ll
+CALL GET_GLOBALDIMS_ll(U%NIMAX_SURF_ll,U%NJMAX_SURF_ll)
+U%NDIM_FULL = U%NIMAX_SURF_ll*U%NJMAX_SURF_ll
 !
 IF ( YSPLITTING == "BSPLITTING" ) THEN
   HSPLIT = 'B'
@@ -160,8 +157,8 @@ ELSE IF ( YSPLITTING == "YSPLITTING" ) THEN
 ELSE
   HSPLIT = ''
 ENDIF
-CALL GET_DIM_PHYS_ll(HSPLIT,NIMAX_SURF_LOC,NJMAX_SURF_LOC)
-NSIZE_FULL = NIMAX_SURF_LOC*NJMAX_SURF_LOC
+CALL GET_DIM_PHYS_ll(HSPLIT,U%NIMAX_SURF_LOC,U%NJMAX_SURF_LOC)
+U%NSIZE_FULL = U%NIMAX_SURF_LOC*U%NJMAX_SURF_LOC
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index ef0cccfbc9a72388aa40c92c607c942069469af6..e5a5a624ee2570ec41f5051ff6fea4b2068b0e8a 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -104,6 +104,7 @@ END MODULE MODI_GROUND_PARAM_n
 !!     (D.Gazen)              01/12/03  change emissions handling for surf. externalization
 !!     (J.escobar)            18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n
 !      (J.escobar)            2/2014 add Forefire coupling
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -145,6 +146,7 @@ USE MODI_SHUMAN
 USE MODI_MNHGET_SURF_PARAM_n
 USE MODI_COUPLING_SURF_ATM_n
 USE MODI_DIAG_SURF_ATM_n
+USE MODD_MNH_SURFEX_n
 !
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
@@ -289,6 +291,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB  ! direct albedo
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB  ! diffuse albedo
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_EMIS     ! emissivity
 
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSURF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0H
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_QSURF
+
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PET_A_COEF
@@ -501,21 +508,23 @@ CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
 !
 ! Call to surface schemes
 !                       
-CALL COUPLING_SURF_ATM_n('MESONH', 'E',ZTIMEC,                                                   &
+CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC,                                                   &
                XTSTEP, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME,  &
                IDIM1D,NSV,SIZE(XSW_BANDS),                                                    &
                ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM,                                                   &
                ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, CSV,&
                ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA,        &
                ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV,                           &
-               ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS,                                     &
+               ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF,  &
                ZP_PEW_A_COEF, ZP_PEW_B_COEF,                                                  &
                ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,                    &
                'OK'                                                                           )
 !
 
 IF (CPROGRAM=='DIAG  ' .OR. LDIAG_IN_RUN) THEN
-  CALL DIAG_SURF_ATM_n('MESONH')
+  CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
+                             YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
+                             YSURF_CUR%U, YSURF_CUR%USS,'MESONH')
   CALL  MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, &
                            PT2M=ZP_T2M,PQ2M=ZP_Q2M,PHU2M=ZP_HU2M,        &
                            PZON10M=ZP_ZON10M,PMER10M=ZP_MER10M           )
@@ -707,6 +716,10 @@ ALLOCATE(ZP_TSRAD   (KDIM1D))
 ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3)))
 ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3)))
 ALLOCATE(ZP_EMIS    (KDIM1D))
+ALLOCATE(ZP_TSURF   (KDIM1D))
+ALLOCATE(ZP_Z0      (KDIM1D))
+ALLOCATE(ZP_Z0H     (KDIM1D))
+ALLOCATE(ZP_QSURF   (KDIM1D))
 ALLOCATE(ZP_RN      (KDIM1D))
 ALLOCATE(ZP_H       (KDIM1D))
 ALLOCATE(ZP_LE      (KDIM1D))
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 47e7df0a8b967fa3932f620efa3706ea233f55d9..b50f47d86b423400689fa1260f91658a7a50d914 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -265,6 +265,7 @@ END MODULE MODI_INI_MODEL_n
 !!                   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!       V. Masson     Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions
 !!                   J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+!!  06/2016     (G.Delautier) phasage surfex 8
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -398,7 +399,7 @@ USE MODD_FOREFIRE_n
 USE MODI_INIT_FOREFIRE_n
 #endif
 USE MODI_INI_LES_N
-USE MODI_GOTO_SURFEX
+USE MODD_MNH_SURFEX_n
 USE MODI_INI_SERIES_N
 ! Eddy fluxes  ! Ajout PP
 USE MODD_DEF_EDDY_FLUX_n   ! for VT and WT fluxes
@@ -1894,7 +1895,7 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ')) THEN
     CINIFILEPGD = HINIFILE
   END IF
   !
-  CALL GOTO_SURFEX(KMI,.TRUE.)
+  CALL GOTO_SURFEX(KMI)
   !* initialization of surface
   CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2,                             &
                             XZENITH,XAZIM,XSW_BANDS,ZDIR_ALB,ZSCA_ALB,  &
@@ -1967,7 +1968,7 @@ IF (CRAD   == 'ECMW') THEN
     ALLOCATE(ZTOWN(IIU,IJU))
     ALLOCATE(ZBARE(IIU,IJU))
     IF (CSURF=='EXTE') THEN
-      CALL GOTO_SURFEX(KMI,.TRUE.)
+      CALL GOTO_SURFEX(KMI)
       CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
     ELSE
       ZSEA (:,:) = 1.
diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90
index 2e6eb0ced83e70ee9a71eba184de69fcb63ed34a..b562cb1020d2c20b048e99f1787fa3629523f334 100644
--- a/src/MNH/init_ground_paramn.f90
+++ b/src/MNH/init_ground_paramn.f90
@@ -67,6 +67,7 @@ END MODULE MODI_INIT_GROUND_PARAM_n
 !!      Original    01/2003
 !!      01/12/03    (D.Gazen) change emissions handling for surf. externalization
 !!      Nov.  2010  (J.Escobar) PGI BUG , add SIZE(CSV) to interface
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -86,6 +87,7 @@ USE MODD_CH_AEROSOL, ONLY : CAERONAMES
 USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT
 !
 USE MODI_INIT_SURF_ATM_N
+USE MODD_MNH_SURFEX_n 
 !
 IMPLICIT NONE
 !
@@ -116,6 +118,7 @@ REAL, DIMENSION(:,:),  ALLOCATABLE :: ZDIR_ALB  ! direct albedo
 REAL, DIMENSION(:,:),  ALLOCATABLE :: ZSCA_ALB  ! diffuse albedo
 REAL, DIMENSION(:),    ALLOCATABLE :: ZEMIS     ! emissivity
 REAL, DIMENSION(:),    ALLOCATABLE :: ZTSRAD    ! radiative temperature
+REAL, DIMENSION(:),    ALLOCATABLE :: ZTSURF
 !
 INTEGER :: ISWB  ! number of SW bands
 INTEGER :: IIU   ! 1st array size
@@ -145,6 +148,7 @@ ALLOCATE(ZDIR_ALB(ILU,ISWB))
 ALLOCATE(ZSCA_ALB(ILU,ISWB))
 ALLOCATE(ZEMIS   (ILU))
 ALLOCATE(ZTSRAD  (ILU))
+ALLOCATE(ZTSURF  (ILU))
 !-------------------------------------------------------------------------------
 !
 ZRHODREF= RESHAPE(XRHODREF(IIB:IIE,IJB:IJE,JPVEXT+1), (/ ILU /) )
@@ -166,11 +170,11 @@ DO JLAYER=NSV_AERBEG,NSV_AEREND
 END DO
 !
 ISV = SIZE(HSV)
-CALL INIT_SURF_ATM_n('MESONH',HINIT,.FALSE.,                                        &
+CALL INIT_SURF_ATM_n(YSURF_CUR,'MESONH',HINIT,.FALSE.,                                        &
                      ILU,ISV,SIZE(PSW_BANDS),                         &
                      HSV,ZCO2,ZRHODREF,                                     &
                      ZZENITH,ZAZIM,PSW_BANDS,ZDIR_ALB,ZSCA_ALB,             &
-                     ZEMIS,ZTSRAD,                                          &
+                     ZEMIS,ZTSRAD,ZTSURF,                                          &
                      TIME_MODEL(1)%TDTCUR%TDATE%YEAR, TIME_MODEL(1)%TDTCUR%TDATE%MONTH,&
                      TIME_MODEL(1)%TDTCUR%TDATE%DAY, TIME_MODEL(1)%TDTCUR%TIME,        &
                      '                            ','      ',               &
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 80d314b4c231de5d46f15270eed2abae8e37dd7f..e1ead4db5c89143430f996ff9874745859f1d741 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -75,6 +75,7 @@
 !!      P.Jabouille 15/07/99  special initialisation for spawning
 !!      J.P Chaboureau 2015   add ini_spectre_n
 !!      J.Escoabr   2/03/2016 bypass , reset NHALO=1 for SPAWNING
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -99,7 +100,7 @@ USE MODI_INI_SIZE_SPAWN
 USE MODI_RESET_EXSEG
 USE MODE_MODELN_HANDLER
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_ALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 USE MODI_INI_SPECTRE_n
 !JUAN
 USE MODE_SPLITTINGZ_ll
@@ -205,13 +206,17 @@ CALL INI_PARAZ_ll(IINFO_ll)
 !-------------------------------------------------------------------------------
 !
 !
-CALL ALLOC_SURFEX(NMODEL)
+!     Allocations of Surfex Types
+CALL SURFEX_ALLOC_LIST(NMODEL)
+DO JMI=1,NMODEL
+  YSURF_CUR => YSURF_LIST(JMI)
 !
-IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') THEN 
-  CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
-ELSE
-  CALL READ_ALL_NAMELISTS('MESONH','ALL',.TRUE.)
-ENDIF
+  IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') THEN 
+    CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
+  ELSE
+    CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','ALL',.TRUE.)
+  ENDIF
+ENDDO
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index 834639429ee77c6beb0afce22a6b39b0559ea311..05d460927af2428d3972c7cded95d807b7255c00 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -77,6 +77,7 @@
 !!      J.Escobar                 19/03/2008  rename INIT to INIT_MNH --> grib problem
 !!      J.Escobar                  6/11/2014  remove test on LCHECK otherwise never call MPPDB_INIT
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -95,7 +96,7 @@ USE MODE_MODELN_HANDLER
 !
 USE MODI_VERSION
 USE MODI_INIT_MNH
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
 USE MODE_MPPDB
 !
@@ -171,7 +172,7 @@ ELSE
 END IF
 !
 !
-CALL DEALLOC_SURFEX
+CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhget_surf_paramn.f90 b/src/MNH/mnhget_surf_paramn.f90
index 2c11b827c8ac414b0529401df06ad3de057a7ff4..f6d5bd927c1e0041bd4115ab3820511aa95ffd08 100644
--- a/src/MNH/mnhget_surf_paramn.f90
+++ b/src/MNH/mnhget_surf_paramn.f90
@@ -77,6 +77,7 @@ END MODULE MODI_MNHGET_SURF_PARAM_n
 !!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test 
 !!                            & correction of index linearisation for NHALO<>1 
 !!       S. Donier  06/2015 : bug surface aerosols
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -91,6 +92,7 @@ USE MODI_GET_FRAC_N
 USE MODI_GET_JCOVER_N
 USE MODI_GET_FLUX_N
 USE MODI_GET_ZS_N
+USE MODD_MNH_SURFEX_n
 USE MODI_GET_SURF_VAR_n
 !
 IMPLICIT NONE
@@ -151,6 +153,7 @@ REAL, DIMENSION(:),   ALLOCATABLE :: ZZON10M! zonal Wind at 10 meters     (m/s)
 REAL, DIMENSION(:),   ALLOCATABLE :: ZMER10M! meridian Wind at 10 meters  (m/s)
 REAL, DIMENSION(:),   ALLOCATABLE :: ZNETLW ! Net surface Longwave  flux  (W/m2)
 REAL, DIMENSION(:),   ALLOCATABLE :: ZNETSW ! Net surface Shortwave flux  (W/m2)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZCD, ZEVAP, ZSUBL
 !
 !-------------------------------------------------------------------------------
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
@@ -163,7 +166,7 @@ IF (PRESENT(PCOVER)) THEN
   ALLOCATE(ZCOVER( ILU ))
   ! A verifier car GET_COVER a une option TOWN !!'
   DO JCOVER=1,SIZE(PCOVER,3)
-    CALL GET_COVER_n('MESONH',ILU,ICOVER,ZCOVER)
+    CALL GET_COVER_n(YSURF_CUR%U,'MESONH',ICOVER,ZCOVER)
     CALL REMOVE_HALO(ZCOVER,PCOVER(:,:,JCOVER))    
   END DO
   DEALLOCATE(ZCOVER)
@@ -175,7 +178,7 @@ IF (PRESENT(PSEA) .OR. PRESENT(PTOWN) .OR. &
   ALLOCATE(ZWATER ( ILU ))
   ALLOCATE(ZNATURE( ILU ))
   ALLOCATE(ZTOWN  ( ILU ))
-  CALL GET_FRAC_n('MESONH',ILU,ZSEA,ZWATER,ZNATURE,ZTOWN)
+  CALL GET_FRAC_n(YSURF_CUR%U,'MESONH',ILU,ZSEA,ZWATER,ZNATURE,ZTOWN)
   IF (PRESENT(PSEA)) THEN
     CALL REMOVE_HALO(ZSEA,PSEA)
   END IF
@@ -186,13 +189,17 @@ END IF
 !
 IF (PRESENT(PBARE)) THEN
   ALLOCATE(ZBARE  ( ILU ))
-  CALL GET_SURF_VAR_n('MESONH', ILU, 1, PNATURE=ZNATURE, PBARE=ZBARE)
+  CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,&
+                       YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,&
+                       YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,&
+                       YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,&
+                       'MESONH', ILU, 1, PNATURE=ZNATURE, PBARE=ZBARE)
   CALL REMOVE_HALO(ZBARE,PBARE)
   DEALLOCATE(ZBARE)
 END IF
 !
 IF (PRESENT(KCOVER)) THEN
-  CALL GET_JCOVER_n('MESONH',KCOVER)
+  CALL GET_JCOVER_n(YSURF_CUR%U,'MESONH',KCOVER)
 END IF
 !
 IF (PRESENT(PRN) .OR.PRESENT(PH)  .OR.PRESENT(PLE)  .OR.PRESENT(PGFLUX).OR. &
@@ -202,8 +209,9 @@ IF (PRESENT(PRN) .OR.PRESENT(PH)  .OR.PRESENT(PLE)  .OR.PRESENT(PGFLUX).OR. &
     ALLOCATE(ZT2M   (ILU), ZQ2M   (ILU), ZHU2M(ILU))
     ALLOCATE(ZZON10M(ILU), ZMER10M(ILU))
     ALLOCATE(ZNETLW (ILU), ZNETSW (ILU))
-    CALL GET_FLUX_n('MESONH', ILU,ZRN,ZH,ZLE,ZLEI,ZGFLUX,ZT2M,ZQ2M,ZHU2M,ZZON10M,ZMER10M,&
-                    ZNETLW,ZNETSW)
+    ALLOCATE(ZCD(ILU), ZEVAP(ILU), ZSUBL(ILU))
+    CALL GET_FLUX_n(YSURF_CUR%DGU,'MESONH', ILU,ZRN,ZH,ZLE,ZLEI,ZGFLUX,ZT2M,ZQ2M,ZHU2M,ZZON10M,ZMER10M,&
+                    ZNETLW,ZNETSW,ZCD,ZEVAP,ZSUBL)
     IF(PRESENT(PRN))     PRN=ZRN
     IF(PRESENT(PH))      PH=ZH
     IF(PRESENT(PLE))     PLE=ZLE
@@ -216,12 +224,13 @@ IF (PRESENT(PRN) .OR.PRESENT(PH)  .OR.PRESENT(PLE)  .OR.PRESENT(PGFLUX).OR. &
     IF(PRESENT(PMER10M)) PMER10M=ZMER10M
     DEALLOCATE(ZRN, ZH, ZLE,ZLEI, ZGFLUX, ZT2M, ZQ2M, ZHU2M, ZZON10M, ZMER10M)
     DEALLOCATE(ZNETLW,ZNETSW)
+    DEALLOCATE(ZCD,ZEVAP,ZSUBL)       
 END IF
 !
 IF (PRESENT(PZS)) THEN
   PZS(:,:) = XUNDEF
   ALLOCATE(ZZS  ( ILU ))
-  CALL GET_ZS_n('MESONH',ILU,ZZS)
+  CALL GET_ZS_n(YSURF_CUR%U,'MESONH',ILU,ZZS)
   CALL REMOVE_HALO(ZZS,PZS)
   DEALLOCATE(ZZS)
 END IF
@@ -231,7 +240,11 @@ IF (PRESENT(PH_TREE)  .OR.PRESENT(PLAI_TREE)) THEN
   PLAI_TREE(:,:) = XUNDEF
   ALLOCATE(ZVH  ( ILU ))
   ALLOCATE(ZLAI  ( ILU ))
-  CALL GET_SURF_VAR_n('MESONH',ILU,1,PLAI_TREE=ZLAI,PH_TREE=ZVH)
+  CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,&
+                       YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,&
+                       YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,&
+                       YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,&
+                       'MESONH',ILU,1,PNATURE=ZNATURE,PLAI_TREE=ZLAI,PH_TREE=ZVH)
   CALL REMOVE_HALO(ZLAI,PLAI_TREE)
   CALL REMOVE_HALO(ZVH,PH_TREE)
   DEALLOCATE(ZVH)
diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90
index 29347f45547f13c3677763760840d74bf7c53617..f3740b99c7d126acccf9c90ac0db323ea2ddc96b 100644
--- a/src/MNH/mnhinit_io_surfn.f90
+++ b/src/MNH/mnhinit_io_surfn.f90
@@ -53,6 +53,7 @@ END MODULE MODI_MNHINIT_IO_SURF_n
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    09/2003 
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -79,6 +80,7 @@ USE MODE_MODELN_HANDLER
 USE MODI_GET_1D_MASK
 USE MODI_GET_TYPE_DIM_N
 USE MODI_GET_SURF_MASK_N
+USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
 !
@@ -167,9 +169,9 @@ CALL GET_1D_MASK(ILU_ALL,ILU_ALL,ZFULL,NMASK_ALL)
 DEALLOCATE(ZFULL)
 !
 !* dimension and mask for distributed field on processors
-CALL GET_TYPE_DIM_n(HMASK,ILM)
+CALL GET_TYPE_DIM_n(YSURF_CUR%DTCO,YSURF_CUR%U,HMASK,ILM)
 ALLOCATE(NMASK(ILM))
-CALL GET_SURF_MASK_n(HMASK,ILM,NMASK,ILU,NLUOUT)
+CALL GET_SURF_MASK_n(YSURF_CUR%DTCO,YSURF_CUR%U,HMASK,ILM,NMASK,ILU,NLUOUT)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhput_zsn.f90 b/src/MNH/mnhput_zsn.f90
index 5abb95ed543031b63f990d7ee1876fa39da7b930..ee64bfec3cf7b58f19d7f954335f1e712067c808 100644
--- a/src/MNH/mnhput_zsn.f90
+++ b/src/MNH/mnhput_zsn.f90
@@ -51,6 +51,7 @@ END MODULE MODI_MNHPUT_ZS_n
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    01/2004
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -64,6 +65,7 @@ USE MODD_DIM_n,      ONLY : NIMAX, NJMAX
 USE MODD_GRID_n,     ONLY : XZS
 !
 USE MODI_PUT_ZS_N
+USE MODD_MNH_SURFEX_n
 !
 USE MODI_GET_LUOUT
 !
@@ -101,7 +103,9 @@ IL = (IIE-IIB+1)*(IJE-IJB+1)
 ALLOCATE(ZZS(IL))
 ZZS(:) = RESHAPE (XZS(IIB:IIE,IJB:IJE), (/ IL /) )
 !
-CALL PUT_ZS_n('MESONH',IL,ZZS(:))
+CALL PUT_ZS_n(YSURF_CUR%FM%F,YSURF_CUR%IM%I,YSURF_CUR%SM%S,&
+              YSURF_CUR%U,YSURF_CUR%TM%TOP,YSURF_CUR%WM%W,'MESONH',IL,ZZS(:))
+!
 CALL MPPDB_CHECK_SURFEX2D(ZZS,"mnhput_zs_n:ZZS",PRECISION,ILUOUT)
 CALL MPPDB_CHECK2D(XZS,"mnhput_zs_n:MODD_GRID_n::XZS",PRECISION)
 !
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 9cb3df58fa91929766a5dd6aa6831654d5802dc6..80b376ab0a9c7138810f0274924a13001db3882e 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -237,6 +237,7 @@ END MODULE MODI_MODEL_n
 !!                              of write_phys_param
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!      M.Mazoyer : 04/2016      DTHRAD used for radiative cooling when LACTIT
+!!  06/2016     (G.Delautier) phasage surfex 8
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -372,7 +373,6 @@ USE MODD_TIMEZ
 USE MODE_MNH_TIMING
 !
 USE MODI_SETLB_LG
-USE MODI_GOTO_SURFEX
 USE MODI_WRITE_SURF_ATM_N
 USE MODI_SET_MASK
 USE MODI_DIAG_SURF_ATM_N
@@ -387,6 +387,8 @@ USE MODE_UTIL
 USE MODI_GET_HALO
 USE MODE_MPPDB
 !
+USE MODD_MNH_SURFEX_n
+!
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
@@ -860,7 +862,7 @@ XT_BOUND = XT_BOUND + ZTIME2 - ZTIME1
 !
 !-------------------------------------------------------------------------------
 !* initializes surface number
-IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI,.TRUE.)
+IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI)
 !-------------------------------------------------------------------------------
 !
 !*       4.    STORAGE IN A SYNCHRONOUS FILE
@@ -920,18 +922,18 @@ DO JOUT = 1,NOUT_NUMB
     CALL MNHWRITE_ZS_DUMMY_n(CPROGRAM)
 #endif
     IF (CSURF=='EXTE') THEN
-      CALL GOTO_SURFEX(IMI,.TRUE.)
+      CALL GOTO_SURFEX(IMI)
 #ifdef MNH_NCWRIT
       NC_WRITE = LNETCDF
       NC_FILE = 'sf1'
-      CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
+      CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
       IF ( LNETCDF ) THEN
         DEF_NC=.FALSE.
-        CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
+        CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
         DEF_NC=.TRUE.
       END IF
 #else
-      CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
+      CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
 #endif
     END IF
     !
@@ -1317,20 +1319,22 @@ END IF
 DO JOUT = 1,NOUT_NUMB
   IF (KTCOUNT == NOUT_TIMES(JOUT)) THEN
     IF (CSURF=='EXTE') THEN
-      CALL GOTO_SURFEX(IMI,.TRUE.)
-      CALL DIAG_SURF_ATM_n('MESONH')
+      CALL GOTO_SURFEX(IMI)
+      CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
+                             YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
+                             YSURF_CUR%U, YSURF_CUR%USS,'MESONH')
 #ifdef MNH_NCWRIT
       NC_WRITE=LNETCDF
       NC_FILE='sf2'
-      CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+      CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
       IF ( LNETCDF ) THEN
         DEF_NC=.FALSE.
-        CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+        CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
         DEF_NC=.TRUE.
         NC_WRITE = .FALSE.
       END IF
 #else
-      CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+      CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
 #endif
     END IF
   END IF
diff --git a/src/MNH/pgd_grid_io_init_mnh.f90 b/src/MNH/pgd_grid_io_init_mnh.f90
index 052bc66554732c2a4c629aa5ffccccb0b2b00c8c..7f21b8eb48c695e9aa6914e970217ab77a86a192 100644
--- a/src/MNH/pgd_grid_io_init_mnh.f90
+++ b/src/MNH/pgd_grid_io_init_mnh.f90
@@ -132,6 +132,7 @@ END MODULE MODI_PGD_GRID_IO_INIT_MNH
 !!    Original      01/2004
 !!    10/10/2011  J.Escobar call INI_PARAZ_ll
 !!    2014        M.Faivre
+!!  06/2016     (G.Delautier) phasage surfex 8
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
@@ -149,6 +150,8 @@ USE MODE_SPLITTINGZ_ll
 USE MODI_GET_SURF_GRID_DIM_N
 USE MODI_GET_LUOUT
 !
+USE MODD_MNH_SURFEX_n
+!
 IMPLICIT NONE
 !
 !*    0.1    Declaration of dummy arguments
@@ -196,12 +199,12 @@ IF ( PRESENT(KIMAX) .AND. PRESENT(KJMAX) .AND. PRESENT(HGRID) .AND. PRESENT(OREC
   IDXRATIO = KDXRATIO
   IDYRATIO = KDYRATIO
 ELSE
-  CALL GET_SURF_GRID_DIM_n(YGRID,GRECT,IIMAX,IJMAX,KGRID_PAR,PGRID_PAR)
+  CALL GET_SURF_GRID_DIM_n(YSURF_CUR%UG,YGRID,GRECT,IIMAX,IJMAX,KGRID_PAR,PGRID_PAR)
   IDXRATIO = 1
   IDYRATIO = 1
 ENDIF
 #else
-  CALL GET_SURF_GRID_DIM_n(YGRID,GRECT,IIMAX,IJMAX)
+  CALL GET_SURF_GRID_DIM_n(YSURF_CUR%UG,YGRID,GRECT,IIMAX,IJMAX)
   IDXRATIO = 1
   IDYRATIO = 1
 #endif
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 53a1a07b3af756cd554a8f2226bff9fb2853d033..09a1918e8c35a3aa5f97d52d408e989ae2cde604 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -221,6 +221,7 @@ END MODULE MODI_PHYS_PARAM_n
 !!                           follow the number of the dad model
 !!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test
 !!                       2014  (M.Faivre)
+!!  06/2016     (G.Delautier) phasage surfex 8
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -321,7 +322,7 @@ USE MODI_EDDYUV_FLUX_ONE_WAY_n     ! Ajout PP
 USE MODD_DEF_EDDY_FLUX_n           ! Ajout PP
 USE MODD_DEF_EDDYUV_FLUX_n         ! Ajout PP
 USE MODD_LATZ_EDFLX
-USE MODI_GOTO_SURFEX
+USE MODD_MNH_SURFEX_n
 USE MODI_SWITCH_SBG_LES_N
 !
 USE MODE_MPPDB
@@ -1059,7 +1060,7 @@ PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
 ZTIME1 = ZTIME2
 !
 IF (CSURF=='EXTE') THEN
-  CALL GOTO_SURFEX(IMI,.TRUE.)
+  CALL GOTO_SURFEX(IMI)
 !
   IF( LTRANS ) THEN
     XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 58d2b89d076c1fe2d5f4f32100540707ad8c4bcb..852fdd356260697a300a24a517fd2877a6f603d5 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -311,6 +311,7 @@
 !!      Bug : detected with cray compiler ,
 !!                  missing '&' in continuation string  3/12/2014 J.Escobar
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -386,14 +387,12 @@ USE MODI_ZSMT_PIC
 USE MODI_ZSMT_PGD
 USE MODI_READ_VER_GRID
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
 USE MODI_PGD_GRID_SURF_ATM
 USE MODI_SPLIT_GRID
 USE MODI_PGD_SURF_ATM
 USE MODI_ICE_ADJUST_BIS
 USE MODI_WRITE_PGD_SURF_ATM_n
 USE MODI_PREP_SURF_MNH
-USE MODI_ALLOC_SURFEX
 !
 !JUAN
 USE MODE_SPLITTINGZ_ll
@@ -411,8 +410,7 @@ USE MODI_TH_R_FROM_THL_RT_3D
 USE MODI_VERSION
 USE MODI_INIT_PGD_SURF_ATM
 USE MODI_WRITE_SURF_ATM_N
-USE MODI_DEALLOC_SURF_ATM_N
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 ! Modif ADVFRC
 USE MODD_2D_FRC
 USE MODD_ADVFRC_n     ! Modif for grid-nesting
@@ -1772,22 +1770,22 @@ IF (CSURF =='EXTE') THEN
       STOP
     ENDIF      
   ENDIF
-  CALL ALLOC_SURFEX(1)
-  CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)                                     
+  CALL SURFEX_ALLOC_LIST(1)
+  YSURF_CUR => YSURF_LIST(1)
+  CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)              
   ! Switch to model 1 surface variables
-  CALL GOTO_SURFEX(1,.TRUE.)
+  CALL GOTO_SURFEX(1)
   !* definition of physiographic fields
   ! computed ...
   IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN
     CPGDFILE = CINIFILE
-    CALL PGD_GRID_SURF_ATM('MESONH',CINIFILE,'MESONH',.TRUE.)
-!   CALL SPLIT_GRID('MESONH')
-    CALL PGD_SURF_ATM     ('MESONH',CINIFILE,'MESONH',.TRUE.)
+    CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',CINIFILE,'MESONH',.TRUE.)
+    CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',CINIFILE,'MESONH',.TRUE.)
     CPGDFILE = CINIFILEPGD                                   
   ELSE
   ! ... or read from file.
     CPGDFILE = CPGD_FILE
-    CALL INIT_PGD_SURF_ATM('MESONH','PGD',                         &
+    CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD',                         &
                             '                            ','      ',&
                             TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH,  &
                             TDTCUR%TDATE%DAY, TDTCUR%TIME           )
@@ -1812,10 +1810,10 @@ IF (CSURF =='EXTE') THEN
     CALL WRITE_HGRID(1,CINIFILEPGD,' ')
     NC_FILE='sf1'
     NC_WRITE=LNETCDF
-    CALL WRITE_PGD_SURF_ATM_n('MESONH')
+    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
     IF ( LNETCDF ) THEN
        DEF_NC=.FALSE.
-       CALL WRITE_PGD_SURF_ATM_n('MESONH')
+       CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
        DEF_NC=.TRUE.
        NC_WRITE = .FALSE.
     END IF
@@ -1826,20 +1824,18 @@ IF (CSURF =='EXTE') THEN
     CALL FMWRIT(CINIFILEPGD,'L2D         ',CLUOUT,'--',L2D,0,1,' ',NRESP)
     CALL FMWRIT(CINIFILEPGD,'PACK        ',CLUOUT,'--',LPACK,0,1,' ',NRESP)
     CALL WRITE_HGRID(1,CINIFILEPGD,' ')
-    CALL WRITE_PGD_SURF_ATM_n('MESONH')
+    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 #endif
   CSTORAGE_TYPE='TT'
   ENDIF
   
   !
-  !* deallocation of physiographic fields
-  CALL DEALLOC_SURF_ATM_n
   !
   !* rereading of physiographic fields and definition of prognostic fields
   !* writing of all surface fields
   COUTFMFILE = CINIFILE
   CALL PREP_SURF_MNH('                            ','      ')
-  CALL DEALLOC_SURFEX
+  CALL SURFEX_DEALLO_LIST
 ELSE
   CSURF = "NONE"
 END IF
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index a377c308c96464ec355470ba8624f44987eb2cf2..f6218f71c627bf6af99a35bc985f732fca4a5074 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -92,6 +92,7 @@
 !!                  06/2015 (M.Moge) parallelization 
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -121,16 +122,13 @@ USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
 USE MODI_VERSION
-USE MODI_ALLOC_SURFEX
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
 USE MODI_INIT_HORGRID_ll_n
 USE MODI_INIT_PGD_SURF_ATM
 USE MODI_WRITE_PGD_SURF_ATM_N
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
 #ifdef MNH_NCWRIT
-USE MODD_SURF_ATM_GRID_n,     ONLY : XLON, XLAT
 USE MODN_NCOUT
 USE MODE_UTIL
 #endif
@@ -202,8 +200,9 @@ CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 !
 CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
 !
-CALL ALLOC_SURFEX(NMODEL)
-CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
+CALL SURFEX_ALLOC_LIST(NMODEL)
+YSURF_CUR => YSURF_LIST(1)
+CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
 !
 !-------------------------------------------------------------------------------
 !
@@ -266,7 +265,7 @@ END DO
 DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
   CALL FMREAD(CPGD(JPGD),'L1D         ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP)
   CALL FMREAD(CPGD(JPGD),'L2D         ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP)
   CALL FMREAD(CPGD(JPGD),'PACK        ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP)
@@ -283,7 +282,7 @@ END DO
 !
 
 DO JPGD=1,NMODEL
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
 !!$  CALL INIT_HORGRID_ll_n()
@@ -300,7 +299,7 @@ WRITE(ILUOUT0,FMT=*) 'field ZS   of all models'
 DO JPGD=NMODEL,1,-1
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
   CALL NEST_FIELD_n('ZS    ')
 END DO
 !
@@ -311,7 +310,7 @@ WRITE(ILUOUT0,FMT=*) 'field ZSMT of all models'
 DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
   CALL NEST_ZSMT_n('ZSMT  ')
 END DO
 
@@ -326,8 +325,8 @@ DO JPGD=1,NMODEL
     CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
     CPGDFILE = CPGD(JPGD)
     CALL GOTO_MODEL(JPGD)
-    CALL GOTO_SURFEX(JPGD,.TRUE.)
-    CALL INIT_PGD_SURF_ATM('MESONH','PGD',                         &
+    CALL GOTO_SURFEX(JPGD)
+    CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD',                         &
          '                            ','      ',&
          NUNDEF,NUNDEF,NUNDEF,XUNDEF             )
   END IF
@@ -341,7 +340,7 @@ END DO
 DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
   CALL MNHPUT_ZS_n
 END DO
 !
@@ -355,10 +354,10 @@ DO JPGD=1,NMODEL
   CPGDFILE   = CPGD(JPGD)
   COUTFMFILE = CNESTPGD(JPGD)
   CALL GOTO_MODEL(JPGD)
-  CALL GOTO_SURFEX(JPGD,.TRUE.)
+  CALL GOTO_SURFEX(JPGD)
 #ifdef MNH_NCWRIT
   NC_WRITE = LNETCDF
-  CALL WRITE_PGD_SURF_ATM_n('MESONH')
+  CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   IF (LNETCDF.AND..NOT.LCARTESIAN) THEN
     LLFIFM = .FALSE.
     LLFIFM = .TRUE.
@@ -367,14 +366,14 @@ DO JPGD=1,NMODEL
   CALL WRITE_ZSMT_n(CNESTPGD(JPGD))
   IF ( LNETCDF ) THEN
     DEF_NC=.FALSE.
-    CALL WRITE_PGD_SURF_ATM_n('MESONH')
+    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 !*      11.    SMOOTH OROGRAPHY WRITING
     CALL WRITE_ZSMT_n(CNESTPGD(JPGD))
     DEF_NC=.TRUE.
     NC_WRITE = .FALSE.
   END IF
 #else
-  CALL WRITE_PGD_SURF_ATM_n('MESONH')
+  CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   CALL WRITE_ZSMT_n(CNESTPGD(JPGD))
 #endif
 END DO
@@ -444,7 +443,7 @@ CALL CLOSE_ll(CLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
-CALL DEALLOC_SURFEX
+CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 7689fe3584a9309a7046915d623896a3a53e4fbe..e1433f6e9a5fcc2259bb80f64950c521a3299c24 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -67,6 +67,7 @@
 !!    J.Escobar : 05/10/2015 : missing JPHEXT for LAT/LON/ZS/ZSMT writing
 !!    M.Moge          11/2015     disable the creation of files on multiple 
 !!                                Z-levels when using parallel IO for PREP_PGD
+!!  06/2016     (G.Delautier) phasage surfex 8
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
@@ -96,23 +97,19 @@ USE MODD_CONF, ONLY       : NHALO_CONF_MNH => NHALO
 !JUAN
 USE MODN_CONFIO
 !
-USE MODI_ALLOC_SURFEX
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
 USE MODI_VERSION
 USE MODI_PGD_GRID_SURF_ATM
 USE MODI_SPLIT_GRID
 USE MODI_PGD_SURF_ATM
 USE MODI_WRITE_PGD_SURF_ATM_N
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
-USE MODD_SURF_ATM_GRID_n,     ONLY : XLON, XLAT
 #ifdef MNH_NCWRIT
 USE MODN_NCOUT
 USE MODE_UTIL
 USE MODE_FMREAD
 #endif
-USE MODD_SURF_ATM_GRID_n, ONLY : NGRID_PAR, XGRID_PAR
 USE MODE_MPPDB
 USE MODI_EXTEND_GRID_ON_HALO
 !
@@ -135,7 +132,6 @@ LOGICAL           :: LHSLOP=.FALSE.       ! filtering of slopes higher than XHSL
 REAL              :: XHSLOP=1.2           ! if LHSLOP filtering of slopes higher than XHSLOP   
 INTEGER           :: NSLEVE   =12         ! number of iteration for filter for smooth orography
 REAL              :: XSMOOTH_ZS = XUNDEF  ! optional uniform smooth orography for SLEVE coordinate
-!#ifdef MNH_NCWRIT
 REAL, DIMENSION(:,:),ALLOCATABLE   :: ZWORK ! work array for lat and lon reshape
 REAL, DIMENSION(:,:),ALLOCATABLE   :: ZWORK_LAT ! work array for lat and lon reshape
 REAL, DIMENSION(:,:),ALLOCATABLE   :: ZWORK_LON ! work array for lat and lon reshape
@@ -145,7 +141,6 @@ INTEGER           :: IGRID    ! grid location
 INTEGER           :: ILENCH   ! length of comment string
 CHARACTER(LEN=100):: YCOMMENT ! comment string
 INTEGER           :: IIMAX, IJMAX
-!#endif
 INTEGER           :: NHALO_MNH 
 !
 NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO
@@ -212,11 +207,12 @@ IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_NCOUT)
 CALL CLOSE_ll('PRE_PGD1.nam')
 !
 !
-CALL ALLOC_SURFEX(1)
-CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
+CALL SURFEX_ALLOC_LIST(1)
+YSURF_CUR => YSURF_LIST(1)
+CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
 !
 CALL GOTO_MODEL(1)
-CALL GOTO_SURFEX(1,.TRUE.)
+CALL GOTO_SURFEX(1)
 !
 CALL VERSION
 CSTORAGE_TYPE = 'PG'
@@ -230,15 +226,17 @@ CALL INI_CST
 !*            Initializes the grid
 !             --------------------
 ! 
-CALL PGD_GRID_SURF_ATM('MESONH','                            ','      ',.FALSE.)
+CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',&
+                       '                            ','      ',.FALSE.)
 !
-CALL EXTEND_GRID_ON_HALO('MESONH',NGRID_PAR, XGRID_PAR)
+CALL EXTEND_GRID_ON_HALO('MESONH',YSURF_CUR%UG, YSURF_CUR%U,&
+        YSURF_CUR%UG%NGRID_PAR, YSURF_CUR%UG%XGRID_PAR)
 !
 !
 !*            Initializes all physiographic fields
 !             ------------------------------------
 !
-CALL PGD_SURF_ATM('MESONH','                            ','      ',.FALSE.)
+CALL PGD_SURF_ATM(YSURF_CUR,'MESONH','                            ','      ',.FALSE.)
 !
 !
 !*    3.      Writes the physiographic fields
@@ -280,7 +278,7 @@ CALL FMWRIT(COUTFMFILE,'JPHEXT      ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP)
 !
 #ifdef MNH_NCWRIT
 NC_WRITE = LNETCDF
-CALL WRITE_PGD_SURF_ATM_n('MESONH')
+CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 IF (LNETCDF.AND..NOT.LCARTESIAN) THEN
   LLFIFM = .FALSE.
 !!!! WRITE LAT and LON
@@ -288,11 +286,11 @@ IF (LNETCDF.AND..NOT.LCARTESIAN) THEN
   ALLOCATE(ZWORK(IIMAX+NHALO*2,IJMAX+NHALO*2))
   ALLOCATE(ZWORK_LAT(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
   ALLOCATE(ZWORK_LON(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-  ZWORK=RESHAPE(XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) )
+  ZWORK=RESHAPE(YSURF_CUR%UG%XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) )
   ZWORK_LAT=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1))
 !!
 CALL FMWRIT(COUTFMFILE,'LAT',CLUOUT0,'XY',ZWORK_LAT,1,21,'X_Y_latitude (degree)',IRESP)
-  ZWORK=RESHAPE(XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) )
+  ZWORK=RESHAPE(YSURF_CUR%UG%XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) )
   ZWORK_LON=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1))
 CALL FMWRIT(COUTFMFILE,'LON',CLUOUT0,'XY',ZWORK_LON,1,22,'X_Y_longitude (degree)',IRESP)
   DEALLOCATE(ZWORK)
@@ -305,7 +303,7 @@ CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS)
 
 IF ( LNETCDF ) THEN
   DEF_NC=.FALSE.
-  CALL WRITE_PGD_SURF_ATM_n('MESONH')
+  CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   IF (LNETCDF.AND..NOT.LCARTESIAN) THEN
     LLFIFM = .FALSE.
 !!!! WRITE LAT and LON
@@ -324,7 +322,7 @@ IF ( LNETCDF ) THEN
   NC_WRITE = .FALSE.
 END IF
 #else
-CALL WRITE_PGD_SURF_ATM_n('MESONH')
+CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 !*    4.      Computes and writes smooth orography for SLEVE coordinate
 !             ---------------------------------------------------------
 !CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS,LHSLOP,XHSLOP)
@@ -335,9 +333,9 @@ IF (.NOT.LCARTESIAN) THEN
    ALLOCATE(ZWORK(IIMAX+NHALO*2,IJMAX+NHALO*2))
    ALLOCATE(ZWORK_LAT(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
    ALLOCATE(ZWORK_LON(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-   ZWORK=RESHAPE(XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) )
+   ZWORK=RESHAPE(YSURF_CUR%UG%XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) )
    ZWORK_LAT=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1))
-   ZWORK=RESHAPE(XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) )
+   ZWORK=RESHAPE(YSURF_CUR%UG%XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) )
    ZWORK_LON=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1))
    YRECFM='LAT'
    YCOMMENT='X_Y_latitude (degree)'
@@ -367,7 +365,7 @@ CALL FMCLOS_ll(COUTFMFILE,'KEEP',CLUOUT0,IRESP,OPARALLELIO=.FALSE.)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
-CALL DEALLOC_SURFEX
+CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 0d3a0aae571d04862b389b48b2cab9083093d957..9e97f27f9a598b19ac20f2b9e8e4153bef158773 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -379,6 +379,7 @@
 !!                  Aug   2015     (M.Moge) removing EXTRAPOL on XDXX and XDYY in part 8
 !!    J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!    M.Leriche        2015 : add LUSECHEM  dans NAM_CH_CONF 
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -457,10 +458,8 @@ USE MODE_EXTRAPOL
 USE MODI_SECOND_MNH
 USE MODI_VERSION
 USE MODI_DEALLOC_PARA_LL
-USE MODI_ALLOC_SURFEX
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
 USE MODE_MPPDB
 !
@@ -1075,12 +1074,13 @@ IF (.NOT. LCOUPLING ) THEN
 !
   IF (CSURF=="EXTE") THEN
     IF (YATMFILETYPE/='MESONH') THEN
-      CALL ALLOC_SURFEX(1)
-      CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
+      CALL SURFEX_ALLOC_LIST(1)
+      YSURF_CUR => YSURF_LIST(1)
+      CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
     ENDIF
-    CALL GOTO_SURFEX(1,.TRUE.)
+    CALL GOTO_SURFEX(1)
     CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE)
-    CALL DEALLOC_SURFEX
+    CALL SURFEX_DEALLO_LIST
   ENDIF
 !
   CALL SECOND_MNH(ZTIME2)
diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90
index e8898242854a3a40a30ed373b0871d490b73b0dd..f3c604ff9d4521f5797f9061d7c8f09804a595fd 100644
--- a/src/MNH/prep_surf_mnh.f90
+++ b/src/MNH/prep_surf_mnh.f90
@@ -45,6 +45,7 @@ END MODULE MODI_PREP_SURF_MNH
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    01/2004
+!!  06/2016     (G.Delautier) phasage surfex 8
 !------------------------------------------------------------------
 !
 
@@ -59,6 +60,7 @@ USE MODI_INIT_PGD_SURF_ATM
 USE MODI_PREP_SURF_ATM
 USE MODI_WRITE_SURF_ATM_N
 USE MODI_WRITE_DIAG_SURF_ATM_N
+USE MODD_MNH_SURFEX_n
 !
 #ifdef MNH_NCWRIT
 USE MODN_NCOUT
@@ -96,25 +98,25 @@ YATMFILETYPE = HATMFILETYPE
 IF(YATMFILETYPE=='GRIBEX') YATMFILETYPE='GRIB  '
 IF (LEN_TRIM(HATMFILE)==0) YATMFILETYPE='      '
 !
-CALL INIT_PGD_SURF_ATM('MESONH','PRE',HATMFILE,YATMFILETYPE,  &
+CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HATMFILE,YATMFILETYPE,  &
                        TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, &
                        TDTCUR%TDATE%DAY, TDTCUR%TIME          )
-CALL PREP_SURF_ATM('MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE)
+CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE)
 #ifdef MNH_NCWRIT
 NC_WRITE=LNETCDF
 NC_FILE='sf2'
-CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.)
-CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE')
+CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.)
+CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE')
 IF ( LNETCDF ) THEN
   DEF_NC=.FALSE.
-  CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.)
-  CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE')
+  CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.)
+  CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE')
   DEF_NC=.TRUE.
   NC_WRITE = .FALSE.
 END IF
 #else
-CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.)
-CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE')
+CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.)
+CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE')
 #endif
 
 !
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index d467eb8f61d248e6cea18602601d9ac65ca49b43..a628994ed7e25489ab0df4f09001facd21440b42 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -29,6 +29,7 @@
 !!    -------------
 !!      Original    12/2004 (P. Le Moigne)
 !!    10/10/2011  J.Escobar call INI_PARAZ_ll
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -55,10 +56,8 @@ USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
 !JUANZ
 USE MODI_VERSION
-USE MODI_ALLOC_SURFEX
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
 !
@@ -172,11 +171,11 @@ ELSE
   TDTCUR%TIME       = XUNDEF
 END IF
 !
-CALL ALLOC_SURFEX(1)
-CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)
-CALL GOTO_SURFEX(1,.TRUE.)
+CALL SURFEX_ALLOC_LIST(1)
+YSURF_CUR => YSURF_LIST(1)
+CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
+CALL GOTO_SURFEX(1)
 !
-CALL GOTO_SURFEX(1,.TRUE.)
 CALL PREP_SURF_MNH(YATMFILE,YATMFILETYPE)
 !
 !-------------------------------------------------------------------------------
@@ -204,7 +203,7 @@ CALL CLOSE_ll(CLUOUT0, IOSTAT=IRESP)
 CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT0,IRESP)
 !
 CALL END_PARA_ll(IINFO_ll)
-CALL DEALLOC_SURFEX
+CALL SURFEX_DEALLO_LIST
 !-------------------------------------------------------------------------------
 !
 END PROGRAM PREP_SURFEX
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index f69ab13843e664bf6d5e2e4aeac570ff7bc7044c..74917206eab6371b9dfaa524657a3fa89630e5e2 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -561,6 +561,7 @@ END SUBROUTINE READ_SURFX2_MNH
 !!    -------------
 !!
 !!      original                                                     01/08/03
+!!  06/2016     (G.Delautier) phasage surfex 8
 !----------------------------------------------------------------------------
 !
 !*      0.    DECLARATIONS
@@ -571,6 +572,7 @@ USE MODE_FMREAD
 USE MODE_ll
 USE MODE_IO_ll
 !
+USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
 USE MODD_CST,         ONLY : XPI
 !
 USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT,  NMASK, &
@@ -588,7 +590,7 @@ IMPLICIT NONE
 CHARACTER(LEN=16),   INTENT(IN) :: HREC     ! name of the article to be read
 INTEGER,             INTENT(IN) :: KL1,KL2  !  number of points
 REAL, DIMENSION(KL1,KL2), INTENT(OUT):: PFIELD   ! array containing the data field
-LOGICAL,DIMENSION(KL2),   INTENT(IN) ::OFLAG  ! mask for array filling
+LOGICAL,DIMENSION(JPCOVER),   INTENT(IN) ::OFLAG  ! mask for array filling
 INTEGER,             INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
 CHARACTER(LEN=100),  INTENT(OUT):: HCOMMENT ! comment
 CHARACTER(LEN=1),    INTENT(IN) :: HDIR     ! type of field :
@@ -661,7 +663,7 @@ END IF
 !
 IF (.NOT. GCOVER_PACKED) THEN
    ICOVER=0
-   DO JL2=1,KL2
+   DO JL2=1,SIZE(OFLAG)
       WRITE(YREC,'(A5,I3.3)') 'COVER',JL2
       IF (OFLAG(JL2)) THEN
         ICOVER=ICOVER+1
@@ -680,13 +682,8 @@ IF (KRESP /=0) THEN
   WRITE(NLUOUT,*) ' '
 ELSE IF (HDIR=='H' .OR. HDIR=='A') THEN
    ICOVER=0
-   DO JL2=1,KL2
-      IF (OFLAG(JL2)) THEN
-         ICOVER=ICOVER+1
-         CALL PACK_2D_1D(IMASK,ZWORK3D(IIB:IIE,IJB:IJE,ICOVER),PFIELD(:,JL2))
-      ELSE
-         PFIELD(:,JL2) = 0.0
-      END IF
+   DO JL2=1,NCOVER
+     CALL PACK_2D_1D(IMASK,ZWORK3D(IIB:IIE,IJB:IJE,JL2),PFIELD(:,JL2))
    END DO
 END IF
 !
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index 04438246b2e3060e72e3138ae16e38381090b5e4..a80c570f5e5c39c2ee93ec71bc4f957b4c57666b 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -41,6 +41,7 @@
 !!    -------------
 !!      Original    4/03/2002
 !!         Oct. 2011 : (P.Le Moigne) Surface series
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -67,6 +68,7 @@ USE MODE_ll
 USE MODE_IO_ll
 !
 USE MODI_TEMPORAL_DIST
+USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
 !
@@ -129,7 +131,11 @@ END IF
 IF (LSURF) THEN
    KI=(IIE-IIB+1)*(IJE-IJB+1)
    ALLOCATE(ZSERIES(KI,5))
-   CALL GET_SURF_VAR_n('MESONH',KI,5,PSERIES=ZSERIES)
+   CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,&
+                       YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,&
+                       YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,&
+                       YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,&
+                       'MESONH',KI,5,PSERIES=ZSERIES)
    ZTS(:,:)=0.
    ZTMNW(:,:)=0.
    ZTBOT(:,:)=0.
diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90
index 38ed003558ab08111cd319e0c13c52dc8506054b..417e9675326ce7b30f5d981aaa248a851c0bff5c 100644
--- a/src/MNH/spawn_surf.f90
+++ b/src/MNH/spawn_surf.f90
@@ -65,6 +65,7 @@ END MODULE MODI_SPAWN_SURF
 !!    -------------
 !!
 !!      Original     01/2004  
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -89,14 +90,13 @@ USE MODE_IO_ll
  !JUAN REALZ
 USE MODE_MODELN_HANDLER
  !JUAN REALZ
-USE MODI_GOTO_SURFEX
 USE MODI_ZOOM_PGD_SURF_ATM
 USE MODI_WRITE_PGD_SURF_ATM_N
 USE MODI_WRITE_SURF_ATM_N
-USE MODI_DEALLOC_SURF_ATM_N
 USE MODI_INIT_PGD_SURF_ATM
 USE MODI_PREP_SURF_ATM
 USE MODI_WRITE_DIAG_SURF_ATM_N
+USE MODD_MNH_SURFEX_n
 !
 #ifdef MNH_NCWRIT
 USE MODN_NCOUT
@@ -133,49 +133,48 @@ IF (CSURF=='EXTE') THEN
     COUTFMFILE = CMY_NAME(2)
     COUTFILE   = CMY_NAME(2)
     !* spawn PGD fields
-    CALL GOTO_SURFEX(1,.TRUE.)
+    CALL GOTO_SURFEX(1)
     !JUAN REALZ
     !CALL GO_TOMODEL_ll(1,IINFO_ll)
     !CALL GOTO_MODEL(1)
     !JUAN REALZ
-    CALL ZOOM_PGD_SURF_ATM('MESONH',HINIFILEPGD,'MESONH',CPGDFILE,'MESONH')
+    CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',HINIFILEPGD,'MESONH',CPGDFILE,'MESONH')
     CALL MNHPUT_ZS_n
     !* writing of physiographic fields in the file
 #ifdef MNH_NCWRIT
     NC_WRITE=LNETCDF
     NC_FILE='pgd'
-    CALL WRITE_PGD_SURF_ATM_n('MESONH')
+    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
     IF ( LNETCDF ) THEN
       DEF_NC=.FALSE.
-      CALL WRITE_PGD_SURF_ATM_n('MESONH')
+      CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
       DEF_NC=.TRUE.
       NC_WRITE = .FALSE.
    END IF
 #else 
-    CALL WRITE_PGD_SURF_ATM_n('MESONH')
+    CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 #endif
-    CALL DEALLOC_SURF_ATM_n
     !* rereading of physiographic fields and definition of prognostic fields
-    CALL INIT_PGD_SURF_ATM('MESONH','PRE',HINIFILE,'MESONH',      &
+    CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HINIFILE,'MESONH',      &
                            TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, &
                            TDTCUR%TDATE%DAY, TDTCUR%TIME          )
-    CALL PREP_SURF_ATM('MESONH',HINIFILE,'MESONH',HINIFILEPGD,'MESONH')
+    CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HINIFILE,'MESONH',HINIFILEPGD,'MESONH')
     !* writing of all surface fields
 #ifdef MNH_NCWRIT
     NC_WRITE=LNETCDF
     NC_FILE='sf2'
-    CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
-    CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+    CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
+    CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
     IF ( LNETCDF ) THEN
       DEF_NC=.FALSE.
-      CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
-      CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+      CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
+      CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
       DEF_NC=.TRUE.
       NC_WRITE = .FALSE.
    END IF
 #else
-    CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.)
-    CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL')
+    CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
+    CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
 #endif    
     !
   ELSE
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index c4a50e16fd33d66d3403ffede6ac9802b5853328..914c14f2b7bb585b4154e5ef6e48e1d28fa1615c 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -73,6 +73,7 @@
 !!      Modification 05/02/2015 (M.Moge) read namelist NAM_CONFZ, before INIT_MNH
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+!!  06/2016     (G.Delautier) phasage surfex 8
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -120,7 +121,7 @@ USE MODI_BOUNDARIES
 !
 USE MODI_VERSION
 USE MODI_INIT_MNH
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 USE MODE_MPPDB
 !
 !
@@ -238,7 +239,7 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
                    CCHEM_INPUT_FILE,YSPAFILE,YSPANBR,YSONFILE,          &
                    CINIFILE, CINIFILEPGD, LSPAWN_SURF                   )
 !
-CALL DEALLOC_SURFEX
+CALL SURFEX_DEALLO_LIST
 CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
 CALL END_PARA_ll(IINFO_ll)
 !JUAN CALL ABORT
diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90
index b0e0d736916551010fc59f0aea57bc0cf28c6e99..073515c71e85bc044222c5aaa3026d037404b5bd 100644
--- a/src/MNH/write_surf_mnh.f90
+++ b/src/MNH/write_surf_mnh.f90
@@ -397,6 +397,7 @@ END SUBROUTINE WRITE_SURFX1_MNH
 !!    -------------
 !!
 !!      original                                                     01/08/03
+!!  06/2016     (G.Delautier) phasage surfex 8
 !----------------------------------------------------------------------------
 !
 !*      0.    DECLARATIONS
@@ -407,6 +408,7 @@ USE MODE_FMWRIT
 USE MODE_ll
 USE MODE_IO_ll
 !
+USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
 USE MODD_PARAMETERS,  ONLY : XUNDEF, JPHEXT
 USE MODD_CONF_n,        ONLY : CSTORAGE_TYPE
 USE MODD_CONFZ ,        ONLY : NB_PROCIO_W
@@ -425,7 +427,7 @@ IMPLICIT NONE
 CHARACTER(LEN=12),   INTENT(IN)  :: HREC     ! name of the article to be read
 INTEGER,             INTENT(IN)  :: KL1,KL2       ! number of points
 REAL, DIMENSION(KL1,KL2), INTENT(IN)  :: PFIELD   ! array containing the data field
-LOGICAL,DIMENSION(KL2),   INTENT(IN)  ::OFLAG  ! mask for array filling
+LOGICAL,DIMENSION(JPCOVER),   INTENT(IN)  ::OFLAG  ! mask for array filling
 INTEGER,             INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
 CHARACTER(LEN=100),  INTENT(IN)  :: HCOMMENT ! Comment string
 CHARACTER(LEN=1),    INTENT(IN)  :: HDIR     ! type of field :
@@ -503,18 +505,15 @@ ALLOCATE(ZWORK3D(IIU,IJU,NCOVER))
 ZWORK3D = XUNDEF
 !
 ICOVER=0
-DO IKL2=1,KL2
-  IF (OFLAG(IKL2)) THEN
-    ICOVER=ICOVER+1   
-    CALL UNPACK_1D_2D(IMASK,PFIELD(:,IKL2),ZWORK3D(IIB:IIE,IJB:IJE,ICOVER))
-  END IF
+DO IKL2=1,NCOVER
+  CALL UNPACK_1D_2D(IMASK,PFIELD(:,IKL2),ZWORK3D(IIB:IIE,IJB:IJE,IKL2))
 END DO
 
 IGRID=4
 
 IF (.NOT. GCOVER_PACKED) THEN
   ICOVER=0
-  DO JL2=1,KL2
+  DO JL2=1,SIZE(OFLAG)
     WRITE(YREC,'(A5,I3.3)') 'COVER',JL2
     IF (OFLAG(JL2)) THEN
       ICOVER=ICOVER+1
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index a3898c39d13c106c0a318ffc084b1a6cc53c10bb..ee07ef56a29f22e4d52ae35da62afbc4fef4c5ee 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -42,6 +42,7 @@
 !!    Original     march 2005
 !!    10/10/2011  J.Escobar call INI_PARAZ_ll
 !!    30/03/2012  S.Bielli  Add NAM_NCOUT
+!!  06/2016     (G.Delautier) phasage surfex 8
 !!
 !----------------------------------------------------------------------------
 !
@@ -71,12 +72,10 @@ USE MODE_SPLITTINGZ_ll
 !JUANZ
 !
 USE MODI_VERSION
-USE MODI_ALLOC_SURFEX
 USE MODI_READ_ALL_NAMELISTS
-USE MODI_GOTO_SURFEX
 USE MODI_ZOOM_PGD_SURF_ATM
 USE MODI_WRITE_PGD_SURF_ATM_N
-USE MODI_DEALLOC_SURFEX
+USE MODD_MNH_SURFEX_n
 !
 #ifdef MNH_NCWRIT
 USE MODN_NCOUT
@@ -215,18 +214,19 @@ CALL FMCLOS_ll(CPGDFILE,'KEEP',CLUOUT0,IRESP)
 !
 !
 IF (CSURF=='EXTE') THEN
-  CALL ALLOC_SURFEX(1)
-  CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.)      
+  CALL SURFEX_ALLOC_LIST(1)
+  YSURF_CUR => YSURF_LIST(1)
+  CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)      
   YPGDFILE   = CPGDFILE
   CPGDFILE   = YZOOMFILE
   COUTFMFILE = YZOOMFILE
-  CALL GOTO_SURFEX(1,.TRUE.)
-  CALL ZOOM_PGD_SURF_ATM('MESONH',YPGDFILE,'MESONH',YZOOMFILE,'MESONH')
+  CALL GOTO_SURFEX(1)
+  CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',YPGDFILE,'MESONH',YZOOMFILE,'MESONH')
 !
 !*    2.6     Writes the physiographic fields
 !             -------------------------------
 !
-  CALL WRITE_PGD_SURF_ATM_n('MESONH')
+  CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 ELSE
   ALLOCATE(ZZS2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
   ZZS2(:,:)=ZZS1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1)
@@ -284,7 +284,7 @@ CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
 !
 CALL END_PARA_ll(IINFO_ll)
 
-IF (CSURF=='EXTE') CALL DEALLOC_SURFEX
+IF (CSURF=='EXTE') CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 !