diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 8a9c9577ad3a7fa0988990c2e4a37cc8ffdb726e..39b52a8096cab35056e3d7278196a4cc6863277c 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -102,6 +102,7 @@
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_CST
+USE MODD_GRID_n, ONLY : XZSMT
 USE MODD_LUNIT
 USE MODD_NESTING
 USE MODD_CONF_n
@@ -354,7 +355,7 @@ DO JPGD=1,NMODEL
   TFILE_SURFEX => TZFILENESTPGD(JPGD)
   CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   NULLIFY(TFILE_SURFEX)
-  CALL WRITE_ZSMT_n(TZFILENESTPGD(JPGD)%CNAME)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'ZSMT',CLUOUT0,IRESP,XZSMT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -364,29 +365,29 @@ END DO
 !
 !
 DO JPGD=1,NMODEL
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'MASDEV      ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'BUGFIX      ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'BIBUSER     ',CLUOUT0,'--',CBIBUSER,0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'PROGRAM     ',CLUOUT0,'--',CPROGRAM,0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'STORAGE_TYPE',CLUOUT0,'--',CSTORAGE_TYPE,0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'MY_NAME     ',CLUOUT0,'--',TZFILENESTPGD(JPGD)%CNAME,0,1,' ',IRESP)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'MASDEV',      CLUOUT0,IRESP,NMASDEV)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'BUGFIX',      CLUOUT0,IRESP,NBUGFIX)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'BIBUSER',     CLUOUT0,IRESP,CBIBUSER)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'PROGRAM',     CLUOUT0,IRESP,CPROGRAM)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'STORAGE_TYPE',CLUOUT0,IRESP,CSTORAGE_TYPE)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'MY_NAME',     CLUOUT0,IRESP,TZFILENESTPGD(JPGD)%CNAME)
   IF (NDAD(JPGD)>=1) THEN
     YDAD_NAME = TZFILENESTPGD(NDAD(JPGD))%CNAME
   ELSE
     YDAD_NAME = '                           '
   END IF
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DAD_NAME    ',CLUOUT0,'--',YDAD_NAME,0,1,' ',IRESP)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'DAD_NAME',    CLUOUT0,IRESP,YDAD_NAME)
   IF (LEN_TRIM(YDAD_NAME)>0) THEN
-    CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DXRATIO     ',CLUOUT0,'--',NDXRATIO_ALL(JPGD),0,1,' ',IRESP)
-    CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DYRATIO     ',CLUOUT0,'--',NDYRATIO_ALL(JPGD),0,1,' ',IRESP)
-    CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'XOR         ',CLUOUT0,'--',NXOR_ALL(JPGD),0,1,' ',IRESP)
-    CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'YOR         ',CLUOUT0,'--',NYOR_ALL(JPGD),0,1,' ',IRESP)
+    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'DXRATIO',CLUOUT0,IRESP,NDXRATIO_ALL(JPGD))
+    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'DYRATIO',CLUOUT0,IRESP,NDYRATIO_ALL(JPGD))
+    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'XOR',    CLUOUT0,IRESP,NXOR_ALL(JPGD))
+    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'YOR',    CLUOUT0,IRESP,NYOR_ALL(JPGD))
   END IF
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'SURF        ',CLUOUT0,'--','EXTE',0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'L1D         ',CLUOUT0,'--',L1D_ALL(JPGD),0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'L2D         ',CLUOUT0,'--',L2D_ALL(JPGD),0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'PACK        ',CLUOUT0,'--',LPACK_ALL(JPGD),0,1,' ',IRESP)
-  CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'JPHEXT      ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP)
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'SURF',  CLUOUT0,IRESP,'EXTE')
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'L1D',   CLUOUT0,IRESP,L1D_ALL(JPGD))
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'L2D',   CLUOUT0,IRESP,L2D_ALL(JPGD))
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'PACK',  CLUOUT0,IRESP,LPACK_ALL(JPGD))
+  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'JPHEXT',CLUOUT0,IRESP,JPHEXT)
 END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index b3a322d17fbc93fea8e5bbb886394b97778105df..dc5c4cda25153b56bc9390f1e3b6ea8243d62ddb 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -78,7 +78,7 @@
 USE MODD_CONF,   ONLY : CPROGRAM, NMASDEV, NBUGFIX, CBIBUSER, &
                         L1D, L2D, LPACK , LCARTESIAN
 USE MODD_CONF_n,ONLY : CSTORAGE_TYPE
-USE MODD_LUNIT,  ONLY : CLUOUT0, COUTFMFILE
+USE MODD_LUNIT,  ONLY : CLUOUT0
 USE MODD_PARAMETERS, ONLY : XUNDEF
 USE MODD_IO_ll,   ONLY : GSMONOPROC, TFILEDATA, TFILE_SURFEX
 USE MODD_IO_SURF_MNH, ONLY : NHALO
@@ -259,19 +259,17 @@ TZFILE%NLFIVERB   = 5
 !
 CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.)
 !
-COUTFMFILE = CPGDFILE
-!
-CALL FMWRIT(COUTFMFILE,'MASDEV      ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'BUGFIX      ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'BIBUSER     ',CLUOUT0,'--',CBIBUSER,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'PROGRAM     ',CLUOUT0,'--',CPROGRAM,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'STORAGE_TYPE',CLUOUT0,'--',CSTORAGE_TYPE,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'MY_NAME     ',CLUOUT0,'--',COUTFMFILE,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'DAD_NAME    ',CLUOUT0,'--',YDAD,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'SURF        ',CLUOUT0,'--','EXTE',0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'L1D         ',CLUOUT0,'--',L1D,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'L2D         ',CLUOUT0,'--',L2D,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'PACK        ',CLUOUT0,'--',LPACK,0,1,' ',IRESP)
+CALL IO_WRITE_FIELD(TZFILE,'MASDEV',      CLUOUT0,IRESP,NMASDEV)
+CALL IO_WRITE_FIELD(TZFILE,'BUGFIX',      CLUOUT0,IRESP,NBUGFIX)
+CALL IO_WRITE_FIELD(TZFILE,'BIBUSER',     CLUOUT0,IRESP,CBIBUSER)
+CALL IO_WRITE_FIELD(TZFILE,'PROGRAM',     CLUOUT0,IRESP,CPROGRAM)
+CALL IO_WRITE_FIELD(TZFILE,'STORAGE_TYPE',CLUOUT0,IRESP,CSTORAGE_TYPE)
+CALL IO_WRITE_FIELD(TZFILE,'MY_NAME',     CLUOUT0,IRESP,TZFILE%CNAME)
+CALL IO_WRITE_FIELD(TZFILE,'DAD_NAME',    CLUOUT0,IRESP,YDAD)
+CALL IO_WRITE_FIELD(TZFILE,'SURF',        CLUOUT0,IRESP,'EXTE')
+CALL IO_WRITE_FIELD(TZFILE,'L1D',         CLUOUT0,IRESP,L1D)
+CALL IO_WRITE_FIELD(TZFILE,'L2D',         CLUOUT0,IRESP,L2D)
+CALL IO_WRITE_FIELD(TZFILE,'PACK',        CLUOUT0,IRESP,LPACK)
 IF ( NDXRATIO <= 0 .AND. NDYRATIO <= 0 ) THEN
   NDXRATIO = 1
   NDYRATIO = 1
@@ -284,21 +282,22 @@ IF ( NXOR <= 0 .AND. NYOR <= 0 ) THEN
   NXOR = 1
   NYOR = 1
 ENDIF
-CALL FMWRIT(COUTFMFILE,'DXRATIO     ',CLUOUT0,'--',NDXRATIO,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'DYRATIO     ',CLUOUT0,'--',NDYRATIO,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'XSIZE       ',CLUOUT0,'--',NXSIZE,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'YSIZE       ',CLUOUT0,'--',NYSIZE,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'XOR         ',CLUOUT0,'--',NXOR,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'YOR         ',CLUOUT0,'--',NYOR,0,1,' ',IRESP)
-CALL FMWRIT(COUTFMFILE,'JPHEXT      ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP)
+CALL IO_WRITE_FIELD(TZFILE,'DXRATIO',CLUOUT0,IRESP,NDXRATIO)
+CALL IO_WRITE_FIELD(TZFILE,'DYRATIO',CLUOUT0,IRESP,NDYRATIO)
+CALL IO_WRITE_FIELD(TZFILE,'XSIZE',  CLUOUT0,IRESP,NXSIZE)
+CALL IO_WRITE_FIELD(TZFILE,'YSIZE',  CLUOUT0,IRESP,NYSIZE)
+CALL IO_WRITE_FIELD(TZFILE,'XOR',    CLUOUT0,IRESP,NXOR)
+CALL IO_WRITE_FIELD(TZFILE,'YOR',    CLUOUT0,IRESP,NYOR)
+CALL IO_WRITE_FIELD(TZFILE,'JPHEXT', CLUOUT0,IRESP,JPHEXT)
 !
 TFILE_SURFEX => TZFILE
 CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
 NULLIFY(TFILE_SURFEX) !Probably not necessary
+!
 !*    4.      Computes and writes smooth orography for SLEVE coordinate
 !             ---------------------------------------------------------
-!CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS,LHSLOP,XHSLOP)
-CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS)
+CALL ZSMT_PGD(TZFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS)
+!
 IF (.NOT.LCARTESIAN) THEN
 !!!! WRITE LAT and LON
    CALL GET_DIM_PHYS_ll('B',IIMAX,IJMAX)
@@ -325,17 +324,8 @@ IF (.NOT.LCARTESIAN) THEN
      ZWORK_LON(:,1) = ZWORK_LON(:,2)
      ZWORK_LON(:,IJMAX+2) = ZWORK_LON(:,IJMAX+1)           
    ENDIF   
-   YRECFM='LAT'
-   YCOMMENT='X_Y_latitude (degree)'
-   IGRID=1
-   ILENCH=LEN(YCOMMENT)
-   CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT0,'XY',ZWORK_LAT,IGRID,ILENCH,YCOMMENT,IRESP)
-   
-   YRECFM='LON'
-   YCOMMENT='X_Y_longitude (degree)'
-   IGRID=1
-   ILENCH=LEN(YCOMMENT)
-   CALL FMWRIT(COUTFMFILE,YRECFM,CLUOUT0,'XY',ZWORK_LON,IGRID,ILENCH,YCOMMENT,IRESP)
+   CALL IO_WRITE_FIELD(TZFILE,'LAT',CLUOUT0,IRESP,ZWORK_LAT)
+   CALL IO_WRITE_FIELD(TZFILE,'LON',CLUOUT0,IRESP,ZWORK_LON)
    !
    DEALLOCATE(ZWORK,ZWORK_LAT,ZWORK_LON)
 END IF
diff --git a/src/MNH/write_zsmt.f90 b/src/MNH/write_zsmt.f90
deleted file mode 100644
index c184d33c69d0a46953722111d1480742eefaed74..0000000000000000000000000000000000000000
--- a/src/MNH/write_zsmt.f90
+++ /dev/null
@@ -1,98 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 newsrc 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ######################
-      MODULE MODI_WRITE_ZSMT_n
-!     ######################
-!
-INTERFACE 
-!
-      SUBROUTINE WRITE_ZSMT_n(HFILE)
-!
-CHARACTER(LEN=28),   INTENT(IN)  :: HFILE ! name of the input/output file
-!
-END SUBROUTINE WRITE_ZSMT_n
-!
-END INTERFACE
-!
-END MODULE MODI_WRITE_ZSMT_n
-!
-!
-!
-!     #############################
-      SUBROUTINE WRITE_ZSMT_n(HFILE)
-!     #############################
-!
-!!****  *WRITE_ZSMT* writes smoothed orography for SLEVE coordinate
-!!
-!!    PURPOSE
-!!    -------
-!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!       
-!!    IMPLICIT ARGUMENTS
-!!    ------------------ 
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book2 of the documentation
-!!      
-!!
-!!    AUTHOR
-!!    ------
-!!	V. Masson       * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original        nov 2005
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!
-!
-USE MODD_GRID_n,  ONLY : XZSMT
-USE MODD_LUNIT_n, ONLY : CLUOUT
-!
-USE MODE_FMWRIT
-!
-IMPLICIT NONE
-!
-!*       0.1   declarations of arguments
-!
-CHARACTER(LEN=28),   INTENT(IN)  :: HFILE ! name of the input/output file
-!
-!
-!*       0.2   declarations of local variables
-!
-!
-INTEGER           :: IRESP    ! return code for I/O
-CHARACTER(LEN=16) :: YRECFM   ! name of record
-INTEGER           :: IGRID    ! grid location
-INTEGER           :: ILENCH   ! length of comment string
-CHARACTER(LEN=100):: YCOMMENT ! comment string
-!-------------------------------------------------------------------------------
-!
-!*       1.    writes smoothed orography in the file
-!              -------------------------------------
-!
-YRECFM='ZSMT'
-YCOMMENT='X_Y_ZSMT (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFILE,YRECFM,CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE WRITE_ZSMT_n
diff --git a/src/MNH/zsmt_pgd.f90 b/src/MNH/zsmt_pgd.f90
index da0fe85210b6f1944b0f813901b58ee319a717db..3ee676016b3c224b0f9f20c1e322dafe93d7a41c 100644
--- a/src/MNH/zsmt_pgd.f90
+++ b/src/MNH/zsmt_pgd.f90
@@ -8,9 +8,11 @@
 !
 INTERFACE 
 !
-      SUBROUTINE ZSMT_PGD(HFILE,KZSFILTER,KSLEVE,PSMOOTH_ZS)
+      SUBROUTINE ZSMT_PGD(TPFILE,KZSFILTER,KSLEVE,PSMOOTH_ZS)
 !
-CHARACTER(LEN=28),   INTENT(IN)  :: HFILE      ! name of the input/output file
+USE MODD_IO_ll,      ONLY : TFILEDATA
+!
+TYPE(TFILEDATA),     INTENT(IN)  :: TPFILE     ! File characteristics
 INTEGER,             INTENT(IN)  :: KZSFILTER  ! number of iterations for fine orography
 INTEGER,             INTENT(IN)  :: KSLEVE     ! number of iterations
 REAL,                INTENT(IN)  :: PSMOOTH_ZS ! optional uniform smooth orography for SLEVE coordinate
@@ -24,7 +26,7 @@ END MODULE MODI_ZSMT_PGD
 !
 !
 !     #############################
-      SUBROUTINE ZSMT_PGD(HFILE,KZSFILTER,KSLEVE,PSMOOTH_ZS)
+      SUBROUTINE ZSMT_PGD(TPFILE,KZSFILTER,KSLEVE,PSMOOTH_ZS)
 !     #############################
 !
 !!****  *ZSMT_PGD* computes smoothed orography for SLEVE coordinate
@@ -58,6 +60,7 @@ END MODULE MODI_ZSMT_PGD
 !
 !*       0.    DECLARATIONS
 !
+USE MODD_IO_ll,      ONLY : TFILEDATA
 USE MODD_LUNIT,      ONLY : CLUOUT0
 USE MODD_PARAMETERS, ONLY : JPHEXT, XUNDEF
 !
@@ -71,7 +74,7 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
 !
-CHARACTER(LEN=28),   INTENT(IN)  :: HFILE      ! name of the input/output file
+TYPE(TFILEDATA),     INTENT(IN)  :: TPFILE     ! File characteristics
 INTEGER,             INTENT(IN)  :: KZSFILTER  ! number of iterations for fine orography
 INTEGER,             INTENT(IN)  :: KSLEVE     ! number of iterations
 REAL,                INTENT(IN)  :: PSMOOTH_ZS ! optional uniform smooth orography for SLEVE coordinate
@@ -127,7 +130,7 @@ ALLOCATE(ZSLEVE_ZS(IIU,IJU))
 ALLOCATE(ZMASK(IIU,IJU))
 !
 YRECFM = 'ZS              '
-CALL FMREAD(HFILE,YRECFM,CLUOUT0,'XY',ZZS,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL FMREAD(TPFILE%CNAME,YRECFM,CLUOUT0,'XY',ZZS,IGRID,ILENCH,YCOMMENT,IRESP)
 !
 DO JI=1,JPHEXT
 ZZS(JI,:) = ZZS(IIB,:)
@@ -210,17 +213,8 @@ END IF
 !              ---------------------------------------
 !
 !
-YRECFM='ZS'
-YCOMMENT='X_Y_ZS (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFILE,YRECFM,CLUOUT0,'XY',ZFINE_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='ZSMT'
-YCOMMENT='X_Y_ZSMT (m)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFILE,YRECFM,CLUOUT0,'XY',ZSLEVE_ZS,IGRID,ILENCH,YCOMMENT,IRESP)
+CALL IO_WRITE_FIELD(TPFILE,'ZS',  CLUOUT0,IRESP,ZFINE_ZS)
+CALL IO_WRITE_FIELD(TPFILE,'ZSMT',CLUOUT0,IRESP,ZSLEVE_ZS)
 !
 DEALLOCATE(ZZS)
 DEALLOCATE(ZFINE_ZS)