diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 9e361758f9f2bacdc899da99d8f38934dbf23672..6f2dc6936390a9abf1c47bf30a7c77bfdc2da94c 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -1698,6 +1698,110 @@ END IF ! CPROGRAM=MESONH
 !
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SSO_ANIS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SSO_ANIS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_SSO_ANISOTROPY'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SSO_SLOPE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SSO_SLOPE'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_SSO_SLOPE'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SSO_DIR'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SSO_DIR'
+TFIELDLIST(IDX)%CUNITS     = 'degree'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_SSO_DIR'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'AVG_ZS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: AVG_ZS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_AVG_ZS'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SIL_ZS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SIL_ZS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_SIL_ZS'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'MAX_ZS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: MAX_ZS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_MAX_ZS'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'MIN_ZS'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: MIN_ZS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_MIN_ZS'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'SSO_STDEV'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: SSO_STDEV'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_SSO_STDEV'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'ACPRR'
 TFIELDLIST(IDX)%CSTDNAME   = 'rainfall_amount'
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: ACPRR'
@@ -1950,6 +2054,7 @@ USE MODD_ADV_n
 USE MODD_CONF_n
 USE MODD_DYN_n
 USE MODD_FIELD_n
+USE MODD_GR_FIELD_n
 USE MODD_GRID_n
 USE MODD_LSFIELD_n
 USE MODD_PARAM_n
@@ -2154,6 +2259,17 @@ IF (CRAD /= 'NONE') THEN
 END IF
 END IF
 !
+! MODD_GR_FIELD_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_ANIS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_ANISOTROPY
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_SLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_SLOPE
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_DIR',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_DIRECTION
+CALL FIND_FIELD_ID_FROM_MNHNAME('AVG_ZS',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XAVG_ZS
+CALL FIND_FIELD_ID_FROM_MNHNAME('SIL_ZS',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSIL_ZS
+CALL FIND_FIELD_ID_FROM_MNHNAME('MAX_ZS',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XMAX_ZS
+CALL FIND_FIELD_ID_FROM_MNHNAME('MIN_ZS',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XMIN_ZS
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_STDEV
+!
 ! MODD_PRECIP_n variables
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRR
@@ -2429,6 +2545,17 @@ IF (CRAD /= 'NONE') THEN
 END IF
 END IF
 !
+! MODD_GR_FIELD_n variables
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_ANIS', IID,IRESP); XSSO_ANISOTROPY => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_SLOPE',IID,IRESP); XSSO_SLOPE      => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_DIR',  IID,IRESP); XSSO_DIRECTION  => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('AVG_ZS',   IID,IRESP); XAVG_ZS         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SIL_ZS',   IID,IRESP); XSIL_ZS         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('MAX_ZS',   IID,IRESP); XMAX_ZS         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('MIN_ZS',   IID,IRESP); XMIN_ZS         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); XSSO_STDEV      => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+!
 ! MODD_PRECIP_n variables
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); XACPRR => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90
index f9fc317c8103529869f6cda0c9aab9cb200b9a0e..d8294a83437cdc05ac1dc7874029d108a3f3bc4e 100644
--- a/src/MNH/goto_model_wrapper.f90
+++ b/src/MNH/goto_model_wrapper.f90
@@ -143,7 +143,7 @@ CALL DYNZD_GOTO_MODEL(KFROM,KTO)
 CALL FIELD_GOTO_MODEL(KFROM, KTO)
 CALL PAST_FIELD_GOTO_MODEL(KFROM, KTO)
 CALL GET_GOTO_MODEL(KFROM, KTO)
-CALL GR_FIELD_GOTO_MODEL(KFROM, KTO)
+!CALL GR_FIELD_GOTO_MODEL(KFROM, KTO)
 !$20140403 add grid_conf_proj_goto_model
 !CALL GRID_CONF_PROJ_GOTO_MODEL(KFROM,KTO)
 !$
diff --git a/src/MNH/mnhwrite_zs_dummyn.f90 b/src/MNH/mnhwrite_zs_dummyn.f90
index 7d68b018b16a9524010a0c9aaf4053e75fd32684..00e0a465f35fdba9f9a8c097417e098355ed6a5f 100644
--- a/src/MNH/mnhwrite_zs_dummyn.f90
+++ b/src/MNH/mnhwrite_zs_dummyn.f90
@@ -12,9 +12,11 @@
       MODULE MODI_MNHWRITE_ZS_DUMMY_n
 !     ##########################
 INTERFACE
-      SUBROUTINE MNHWRITE_ZS_DUMMY_n(HPROGRAM)
+      SUBROUTINE MNHWRITE_ZS_DUMMY_n(TPFILE)
 !
-CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling surf. schemes
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
 END SUBROUTINE MNHWRITE_ZS_DUMMY_n
 !
@@ -22,7 +24,7 @@ END INTERFACE
 END MODULE MODI_MNHWRITE_ZS_DUMMY_n
 !
 !     ###################################################
-      SUBROUTINE MNHWRITE_ZS_DUMMY_n(HPROGRAM)
+      SUBROUTINE MNHWRITE_ZS_DUMMY_n(TPFILE)
 !     ###################################################
 !
 !!****  *MNHWRITE_ZS_WH_DUMMY_n* - writes zs and dummy surface fields.
@@ -64,7 +66,7 @@ USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SL
 !
 USE MODD_LUNIT_n,    ONLY : CLUOUT
 USE MODD_PARAM_n,    ONLY : CSURF
-USE MODD_LUNIT,      ONLY : COUTFMFILE
+USE MODD_IO_ll,      ONLY : TFILEDATA
 !
 USE MODI_WRITE_DUMMY_GR_FIELD_n
 !
@@ -75,7 +77,7 @@ IMPLICIT NONE
 !*       0.1   Declarations of arguments
 !              -------------------------
 !
-CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling surf. schemes
+TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
@@ -103,60 +105,21 @@ IF (CSURF /='EXTE') RETURN
 !*       2.     Orographic characteristics :
 !               --------------------------
 !
-YRECFM='SSO_ANIS'
-YCOMMENT='X_Y_SSO_ANISOTROPY (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XSSO_ANISOTROPY,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SSO_SLOPE'
-YCOMMENT='X_Y_SSO_SLOPE '
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XSSO_SLOPE,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SSO_DIR'
-YCOMMENT='X_Y_SSO_DIR (degree)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XSSO_DIRECTION,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='AVG_ZS'
-YCOMMENT='X_Y_AVG_ZS (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XAVG_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SIL_ZS'
-YCOMMENT='X_Y_SIL_ZS (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XSIL_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='MAX_ZS'
-YCOMMENT='X_Y_MAX_ZS (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XMAX_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='MIN_ZS'
-YCOMMENT='X_Y_MIN_ZS (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XMIN_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='SSO_STDEV'
-YCOMMENT='X_Y_SSO_STDEV (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT,'XY',XSSO_STDEV,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'SSO_ANIS', CLUOUT,IRESP,XSSO_ANISOTROPY)
+CALL IO_WRITE_FIELD(TPFILE,'SSO_SLOPE',CLUOUT,IRESP,XSSO_SLOPE)
+CALL IO_WRITE_FIELD(TPFILE,'SSO_DIR',  CLUOUT,IRESP,XSSO_DIRECTION)
+CALL IO_WRITE_FIELD(TPFILE,'AVG_ZS',   CLUOUT,IRESP,XAVG_ZS)
+CALL IO_WRITE_FIELD(TPFILE,'SIL_ZS',   CLUOUT,IRESP,XSIL_ZS)
+CALL IO_WRITE_FIELD(TPFILE,'MAX_ZS',   CLUOUT,IRESP,XMAX_ZS)
+CALL IO_WRITE_FIELD(TPFILE,'MIN_ZS',   CLUOUT,IRESP,XMIN_ZS)
+CALL IO_WRITE_FIELD(TPFILE,'SSO_STDEV',CLUOUT,IRESP,XSSO_STDEV)
 !
 !-------------------------------------------------------------------------------
 !
 !*      3.     Dummy fields
 !              ------------
 !
-CALL WRITE_DUMMY_GR_FIELD_n(COUTFMFILE)
+CALL WRITE_DUMMY_GR_FIELD_n(TPFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_gr_fieldn.f90 b/src/MNH/modd_gr_fieldn.f90
index 9558f423eadb82f86c8da872f75306c997297641..867017137dfe361ddde771132e822192115188cc 100644
--- a/src/MNH/modd_gr_fieldn.f90
+++ b/src/MNH/modd_gr_fieldn.f90
@@ -56,33 +56,16 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
-TYPE GR_FIELD_t
-!
-! Surface fields (with 2 horizontal dimensions)
-!
-  REAL, DIMENSION(:,:), POINTER :: XSSO_STDEV=>NULL()      ! standard deviation of
-                                                     ! Subgrid Scale Orography
-  REAL, DIMENSION(:,:), POINTER :: XSSO_ANISOTROPY=>NULL() ! anisotropy of S.S.O.
-  REAL, DIMENSION(:,:), POINTER :: XSSO_DIRECTION=>NULL()  ! direction of S.S.O.
-  REAL, DIMENSION(:,:), POINTER :: XSSO_SLOPE=>NULL()      ! slope of S.S.O.
-!
-  REAL, DIMENSION(:,:), POINTER :: XAVG_ZS=>NULL()    ! averaged orography
-  REAL, DIMENSION(:,:), POINTER :: XSIL_ZS=>NULL()    ! silhouette orography
-  REAL, DIMENSION(:,:), POINTER :: XMIN_ZS=>NULL()    ! minimum orography
-  REAL, DIMENSION(:,:), POINTER :: XMAX_ZS=>NULL()    ! maximum orography
-!
-END TYPE GR_FIELD_t
-
-TYPE(GR_FIELD_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: GR_FIELD_MODEL
 
-REAL, DIMENSION(:,:), POINTER :: XSSO_STDEV=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XSSO_ANISOTROPY=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XSSO_DIRECTION=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XSSO_SLOPE=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XAVG_ZS=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XSIL_ZS=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XMIN_ZS=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XMAX_ZS=>NULL()
+REAL, DIMENSION(:,:), POINTER :: XSSO_STDEV=>NULL()      ! standard deviation of
+                                                         ! Subgrid Scale Orography
+REAL, DIMENSION(:,:), POINTER :: XSSO_ANISOTROPY=>NULL() ! anisotropy of S.S.O.
+REAL, DIMENSION(:,:), POINTER :: XSSO_DIRECTION=>NULL()  ! direction of S.S.O.
+REAL, DIMENSION(:,:), POINTER :: XSSO_SLOPE=>NULL()      ! slope of S.S.O.
+REAL, DIMENSION(:,:), POINTER :: XAVG_ZS=>NULL()         ! averaged orography
+REAL, DIMENSION(:,:), POINTER :: XSIL_ZS=>NULL()         ! silhouette orography
+REAL, DIMENSION(:,:), POINTER :: XMIN_ZS=>NULL()         ! minimum orography
+REAL, DIMENSION(:,:), POINTER :: XMAX_ZS=>NULL()         ! maximum orography
 
 CONTAINS
 
@@ -90,24 +73,24 @@ SUBROUTINE GR_FIELD_GOTO_MODEL(KFROM, KTO)
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
 ! Save current state for allocated arrays
-GR_FIELD_MODEL(KFROM)%XSSO_STDEV=>XSSO_STDEV
-GR_FIELD_MODEL(KFROM)%XSSO_ANISOTROPY=>XSSO_ANISOTROPY
-GR_FIELD_MODEL(KFROM)%XSSO_DIRECTION=>XSSO_DIRECTION
-GR_FIELD_MODEL(KFROM)%XSSO_SLOPE=>XSSO_SLOPE
-GR_FIELD_MODEL(KFROM)%XAVG_ZS=>XAVG_ZS
-GR_FIELD_MODEL(KFROM)%XSIL_ZS=>XSIL_ZS
-GR_FIELD_MODEL(KFROM)%XMIN_ZS=>XMIN_ZS
-GR_FIELD_MODEL(KFROM)%XMAX_ZS=>XMAX_ZS
+!GR_FIELD_MODEL(KFROM)%XSSO_STDEV=>XSSO_STDEV !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XSSO_ANISOTROPY=>XSSO_ANISOTROPY !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XSSO_DIRECTION=>XSSO_DIRECTION !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XSSO_SLOPE=>XSSO_SLOPE !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XAVG_ZS=>XAVG_ZS !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XSIL_ZS=>XSIL_ZS !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XMIN_ZS=>XMIN_ZS !Done in FIELDLIST_GOTO_MODEL
+!GR_FIELD_MODEL(KFROM)%XMAX_ZS=>XMAX_ZS !Done in FIELDLIST_GOTO_MODEL
 !
 ! Current model is set to model KTO
-XSSO_STDEV=>GR_FIELD_MODEL(KTO)%XSSO_STDEV
-XSSO_ANISOTROPY=>GR_FIELD_MODEL(KTO)%XSSO_ANISOTROPY
-XSSO_DIRECTION=>GR_FIELD_MODEL(KTO)%XSSO_DIRECTION
-XSSO_SLOPE=>GR_FIELD_MODEL(KTO)%XSSO_SLOPE
-XAVG_ZS=>GR_FIELD_MODEL(KTO)%XAVG_ZS
-XSIL_ZS=>GR_FIELD_MODEL(KTO)%XSIL_ZS
-XMIN_ZS=>GR_FIELD_MODEL(KTO)%XMIN_ZS
-XMAX_ZS=>GR_FIELD_MODEL(KTO)%XMAX_ZS
+!XSSO_STDEV=>GR_FIELD_MODEL(KTO)%XSSO_STDEV !Done in FIELDLIST_GOTO_MODEL
+!XSSO_ANISOTROPY=>GR_FIELD_MODEL(KTO)%XSSO_ANISOTROPY !Done in FIELDLIST_GOTO_MODEL
+!XSSO_DIRECTION=>GR_FIELD_MODEL(KTO)%XSSO_DIRECTION !Done in FIELDLIST_GOTO_MODEL
+!XSSO_SLOPE=>GR_FIELD_MODEL(KTO)%XSSO_SLOPE !Done in FIELDLIST_GOTO_MODEL
+!XAVG_ZS=>GR_FIELD_MODEL(KTO)%XAVG_ZS !Done in FIELDLIST_GOTO_MODEL
+!XSIL_ZS=>GR_FIELD_MODEL(KTO)%XSIL_ZS !Done in FIELDLIST_GOTO_MODEL
+!XMIN_ZS=>GR_FIELD_MODEL(KTO)%XMIN_ZS !Done in FIELDLIST_GOTO_MODEL
+!XMAX_ZS=>GR_FIELD_MODEL(KTO)%XMAX_ZS !Done in FIELDLIST_GOTO_MODEL
 
 END SUBROUTINE GR_FIELD_GOTO_MODEL
 
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index c8bca71dfac1ceeb60e396a8fab81d261e08ac9a..3acb6944871ccc77aabe509896e7c613ad61be77 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -926,7 +926,7 @@ IF (IBAK < NBAK_NUMB ) THEN
     CALL IO_WRITE_HEADER_NC4(TBACKUPN(IBAK)%TFILE,CLUOUT)
     CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,YDADFILE)
     COUTFMFILE = YFMFILE
-    CALL MNHWRITE_ZS_DUMMY_n(CPROGRAM)
+    CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE)
     IF (CSURF=='EXTE') THEN
       CALL GOTO_SURFEX(IMI)
       CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 1fbf2b90d48272a98752c0516a286cc3cd3608df..dc93b290bde83cb5bb364fd07bbe89539b22c121 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -1063,7 +1063,7 @@ CALL MNHREAD_ZS_DUMMY_n(YPGDFILE)
 !* writing in the output file
 !
 COUTFMFILE=CINIFILE
-CALL MNHWRITE_ZS_DUMMY_n(CPROGRAM)
+CALL MNHWRITE_ZS_DUMMY_n(TZFILE)
 !
 CALL DEALLOCATE_MODEL1(3)
 !
diff --git a/src/MNH/write_dummy_gr_fieldn.f90 b/src/MNH/write_dummy_gr_fieldn.f90
index 5ba90ee5dd09a2798c4414cebb8118655f17b8d5..dd1e0b09023cdb4bbb38cabf9fdb62d1009f67d6 100644
--- a/src/MNH/write_dummy_gr_fieldn.f90
+++ b/src/MNH/write_dummy_gr_fieldn.f90
@@ -14,9 +14,11 @@ MODULE MODI_WRITE_DUMMY_GR_FIELD_n
 !
 INTERFACE
 !
-      SUBROUTINE WRITE_DUMMY_GR_FIELD_n(HFMFILE)
+      SUBROUTINE WRITE_DUMMY_GR_FIELD_n(TPFILE)
 !
-CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
 END SUBROUTINE WRITE_DUMMY_GR_FIELD_n
 !
@@ -25,7 +27,7 @@ END INTERFACE
 END MODULE MODI_WRITE_DUMMY_GR_FIELD_n
 !
 !     ##########################################
-      SUBROUTINE WRITE_DUMMY_GR_FIELD_n(HFMFILE)
+      SUBROUTINE WRITE_DUMMY_GR_FIELD_n(TPFILE)
 !     ##########################################
 !
 !!****  *WRITE_DUMMY_GR_FIELD_n* - routine to write in LFIFM file the
@@ -66,6 +68,8 @@ END MODULE MODI_WRITE_DUMMY_GR_FIELD_n
 USE MODD_DUMMY_GR_FIELD_n, ONLY : NDUMMY_GR_NBR, CDUMMY_GR_NAME,    &
                                   CDUMMY_GR_AREA, XDUMMY_GR_FIELDS
 USE MODD_LUNIT_n,          ONLY : CLUOUT
+USE MODE_FIELD,            ONLY : TFIELDDATA,TYPEINT,TYPEREAL
+USE MODD_IO_ll,            ONLY : TFILEDATA
 !
 USE MODE_FMWRIT
 !
@@ -74,24 +78,23 @@ IMPLICIT NONE
 !*       0.1   Declarations of arguments
 !              -------------------------
 !
-CHARACTER(LEN=28), INTENT(IN) :: HFMFILE      ! Name of FM-file to write
+TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
 !*       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           :: IGRID          ! IGRID : grid indicator
-INTEGER           :: ILENCH         ! ILENCH : length of comment string
 INTEGER           :: JDUMMY         ! loop counter
 !
 CHARACTER(LEN=16) :: YRECFM         ! Name of the article to be written
-CHARACTER(LEN=100):: YCOMMENT       ! Comment string
 CHARACTER(LEN=20 ):: YSTRING20      ! string
 CHARACTER(LEN=3  ):: YSTRING03      ! string
 !
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2D
 !
+TYPE(TFIELDDATA)  :: TZFIELD
+!
 !-------------------------------------------------------------------------------
 !
 !*       1.     WRITES IN THE LFI FILE
@@ -107,23 +110,35 @@ ALLOCATE(ZWORK2D(SIZE(XDUMMY_GR_FIELDS,1),SIZE(XDUMMY_GR_FIELDS,2)))
 !*       3.     Dummy fields :
 !               ------------
 !
-YRECFM='DUMMY_GR_NBR'
-YCOMMENT='INTEGER'
-ILENCH=LEN(YCOMMENT)
-!
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'--',NDUMMY_GR_NBR,0,ILENCH,YCOMMENT,IRESP)
+TZFIELD%CMNHNAME   = 'DUMMY_GR_NBR'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: DUMMY_GR_NBR'
+TZFIELD%CUNITS     = ''
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'number of dummy pgd fields chosen by user'
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEINT
+TZFIELD%NDIMS      = 0
+CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,NDUMMY_GR_NBR)
 !
 DO JDUMMY=1,NDUMMY_GR_NBR
-  !
   WRITE(YRECFM,'(A8,I3.3,A5)') 'DUMMY_GR',JDUMMY,'     '
   YSTRING20=CDUMMY_GR_NAME(JDUMMY)
   YSTRING03=CDUMMY_GR_AREA(JDUMMY)
-  YCOMMENT='X_Y_'//YRECFM//YSTRING20//YSTRING03//  &
-           '                                                             '
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
+  !
+  TZFIELD%CMNHNAME   = TRIM(YRECFM)
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(YRECFM)
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_'//YRECFM//YSTRING20//YSTRING03
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  !
   ZWORK2D(:,:) = XDUMMY_GR_FIELDS(:,:,JDUMMY)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZWORK2D,IGRID,ILENCH,YCOMMENT,IRESP)
+  !
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D)
 END DO
 !
 !-------------------------------------------------------------------------------