diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 4eabb17f7e86fde4068a3210b4458528a88435e6..40fad9cf9a2d3f646f3af1b1fcc070d64d44005b 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -1689,7 +1689,7 @@ IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'CLDFR'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: CLDFR'
-TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CUNITS     = '1'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_CLouD FRaction'
 TFIELDLIST(IDX)%NGRID      = 1
@@ -2017,6 +2017,19 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'CAPE'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: CAPE'
+TFIELDLIST(IDX)%CUNITS     = 'J kg-1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Convective Available Potentiel Energy'
+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   = 'IC_RATE'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'MesoNH: IC_RATE'
@@ -2848,6 +2861,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',     IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRCONV
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',    IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPACCONV
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',    IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRSCONV
+  CALL FIND_FIELD_ID_FROM_MNHNAME('CAPE',       IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XCAPE
   CALL FIND_FIELD_ID_FROM_MNHNAME('IC_RATE',    IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XIC_RATE
   CALL FIND_FIELD_ID_FROM_MNHNAME('CG_RATE',    IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XCG_RATE
   CALL FIND_FIELD_ID_FROM_MNHNAME('IC_TOTAL_NB',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XIC_TOTAL_NUMBER
@@ -3190,6 +3204,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',     IID,IRESP); XPRCONV          => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',    IID,IRESP); XPACCONV         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',    IID,IRESP); XPRSCONV         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('CAPE',       IID,IRESP); XCAPE            => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('IC_RATE',    IID,IRESP); XIC_RATE         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('CG_RATE',    IID,IRESP); XCG_RATE         => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('IC_TOTAL_NB',IID,IRESP); XIC_TOTAL_NUMBER => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
diff --git a/src/MNH/free_atm_profile.f90 b/src/MNH/free_atm_profile.f90
index c6a133dab692bbca98153a00e548fe26e77faf4f..a7b8c05927d66767f3f570710e8932788ea5dc82 100644
--- a/src/MNH/free_atm_profile.f90
+++ b/src/MNH/free_atm_profile.f90
@@ -101,7 +101,7 @@ USE MODI_COEF_VER_INTERP_LIN
 USE MODI_VER_INTERP_LIN
 USE MODI_VERT_COORD
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD, ONLY: TFIELDDATA, TYPEINT, TYPEREAL
 USE MODE_FMWRIT
 USE MODE_FM
 !
@@ -482,21 +482,31 @@ IF (CPROGRAM == 'DIAG  ' ) THEN
       Z2D(JI,JJ) = PZMASS_MX(JI,JJ,IK_BL_TOP(JI,JJ)) - PZS_LS(JI,JJ)
     END DO
   END DO
-  YRECFM='HBLTOP'
-  YCOMMENT='Height of Boundary Layer TOP (M)'
-  ILENCH=LEN(YCOMMENT)
-  IGRID=4
-  CALL FMWRIT(TPFILE%CNAME,YRECFM,CLUOUT0,'XY',Z2D,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'HBLTOP'
+  TZFIELD%CSTDNAME   = 'atmosphere_boundary_layer_thickness'
+  TZFIELD%CLONGNAME  = 'MesoNH: HBLTOP'
+  TZFIELD%CUNITS     = 'm'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'Height of Boundary Layer TOP'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT0,IRESP,Z2D)
 !
 !*      11.2  Writing of level of boundary layer top
 !             --------------------------------------
 !
   Z2D(:,:) = IK_BL_TOP(:,:)
-  YRECFM='KBLTOP'
-  YCOMMENT='Index of Boundary Layer TOP ( )'
-  ILENCH=LEN(YCOMMENT)
-  IGRID=4
-  CALL FMWRIT(TPFILE%CNAME,YRECFM,CLUOUT0,'XY',Z2D,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'KBLTOP'
+  TZFIELD%CSTDNAME   = 'model_level_number_at_top_of_atmosphere_boundary_layer'
+  TZFIELD%CLONGNAME  = 'MesoNH: KBLTOP'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'Index of Boundary Layer TOP'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEINT
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT0,IRESP,IK_BL_TOP)
 END IF
 !
 IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
diff --git a/src/MNH/modd_deep_convectionn.f90 b/src/MNH/modd_deep_convectionn.f90
index 7b19db8a81a73083610da0f3873451af6b539053..b86efd55f98b984f37a75b6e1baa8b61afca203e 100644
--- a/src/MNH/modd_deep_convectionn.f90
+++ b/src/MNH/modd_deep_convectionn.f90
@@ -63,7 +63,7 @@ TYPE DEEP_CONVECTION_t
   REAL, DIMENSION(:,:,:) ,POINTER :: XMFCONV=>NULL()   ! convective mass flux (kg/s m2)
   REAL, DIMENSION(:,:,:) ,POINTER ::XPRLFLXCONV=>NULL()! liquid precip flux (m/s)
   REAL, DIMENSION(:,:,:) ,POINTER ::XPRSFLXCONV=>NULL()! solid  precip flux (m/s)
-  REAL, DIMENSION(:,:)   ,POINTER :: XCAPE=>NULL()     ! CAPE (J/kg)
+!  REAL, DIMENSION(:,:)   ,POINTER :: XCAPE=>NULL()     ! CAPE (J/kg)
   INTEGER,DIMENSION(:,:), POINTER :: NCLTOPCONV=>NULL()! convective cloud top level
   INTEGER,DIMENSION(:,:), POINTER :: NCLBASCONV=>NULL()! convective cloud base level
 !
@@ -118,7 +118,7 @@ DEEP_CONVECTION_MODEL(KFROM)%XDMFCONV=>XDMFCONV
 DEEP_CONVECTION_MODEL(KFROM)%XMFCONV=>XMFCONV
 DEEP_CONVECTION_MODEL(KFROM)%XPRLFLXCONV=>XPRLFLXCONV
 DEEP_CONVECTION_MODEL(KFROM)%XPRSFLXCONV=>XPRSFLXCONV
-DEEP_CONVECTION_MODEL(KFROM)%XCAPE=>XCAPE
+!DEEP_CONVECTION_MODEL(KFROM)%XCAPE=>XCAPE !Done in FIELDLIST_GOTO_MODEL
 DEEP_CONVECTION_MODEL(KFROM)%NCLTOPCONV=>NCLTOPCONV
 DEEP_CONVECTION_MODEL(KFROM)%NCLBASCONV=>NCLBASCONV
 !DEEP_CONVECTION_MODEL(KFROM)%XIC_RATE=>XIC_RATE !Done in FIELDLIST_GOTO_MODEL
@@ -141,7 +141,7 @@ XDMFCONV=>DEEP_CONVECTION_MODEL(KTO)%XDMFCONV
 XMFCONV=>DEEP_CONVECTION_MODEL(KTO)%XMFCONV
 XPRLFLXCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRLFLXCONV
 XPRSFLXCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRSFLXCONV
-XCAPE=>DEEP_CONVECTION_MODEL(KTO)%XCAPE
+!XCAPE=>DEEP_CONVECTION_MODEL(KTO)%XCAPE !Done in FIELDLIST_GOTO_MODEL
 NCLTOPCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLTOPCONV
 NCLBASCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLBASCONV
 !XIC_RATE=>DEEP_CONVECTION_MODEL(KTO)%XIC_RATE !Done in FIELDLIST_GOTO_MODEL
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index c86eb04355b60b469ae6b4a5e1f31283dc0ee998..e596e458b7d261cde981d2d6a49d3d882bc90435 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -323,7 +323,7 @@ REAL, DIMENSION(SIZE(XZZ,1),SIZE(XZZ,2),SIZE(XZZ,3)) :: ZDELTAZ ! interval (m) b
 INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 !
 CHARACTER(LEN=2)  :: INDICE
-INTEGER           :: I
+INTEGER           :: I,IID
 TYPE(TFIELDDATA)              :: TZFIELD
 TYPE(TFIELDDATA),DIMENSION(2) :: TZFIELD2
 !
@@ -1945,27 +1945,26 @@ END IF
 IF (LTPZH .OR. LCOREF) THEN
 !
 !* Temperature in celsius
-  YRECFM='TEMP'
-  YCOMMENT='X_Y_Z_TEMPerature (C)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
+  TZFIELD%CMNHNAME   = 'TEMP'
+  TZFIELD%CSTDNAME   = 'air_temperature'
+  TZFIELD%CLONGNAME  = 'MesoNH: TEMP'
+  TZFIELD%CUNITS     = 'celsius'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_TEMPerature'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
   ZWORK31(:,:,:)=ZTEMP(:,:,:) - XTT
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31)
 !
 !* Pressure in hPa        
-  YRECFM='PRES'
-  YCOMMENT='X_Y_Z_PRESsure (hPa)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  ZWORK31(:,:,:)=XPABST(:,:,:)*1E-2
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)
+  TZFIELD = TFIELDLIST(IID)
+  TZFIELD%CUNITS = 'hPa'
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XPABST(:,:,:)*1E-2)
 !
 !* Geopotential in meters
-  YRECFM='ALT'
-  YCOMMENT='X_Y_Z_ALTitude (M)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XZZ,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'ALT',CLUOUT,IRESP,XZZ)
 !
 !* Relative humidity in percent
   IF (LUSERV) THEN
@@ -1982,18 +1981,29 @@ IF (LTPZH .OR. LCOREF) THEN
         ZWORK32(:,:,:)=100.*XRT(:,:,:,1)/ZWORK31(:,:,:)
       END WHERE
     END IF
-    YRECFM='REHU'
-    YCOMMENT='X_Y_Z_RElative HUmidity (%)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP)
     !
+    TZFIELD%CMNHNAME   = 'REHU'
+    TZFIELD%CSTDNAME   = 'relative_humidity'
+    TZFIELD%CLONGNAME  = 'MesoNH: REHU'
+    TZFIELD%CUNITS     = 'percent'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_RElative HUmidity'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK32)
+    !
+    TZFIELD%CMNHNAME   = 'VPRES'
+    TZFIELD%CSTDNAME   = 'water_vapor_partial_pressure_in_air'
+    TZFIELD%CLONGNAME  = 'MesoNH: VPRES'
+    TZFIELD%CUNITS     = 'hPa'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor PRESsure'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
     ZWORK33(:,:,:)=ZWORK33(:,:,:)*ZWORK32(:,:,:)*1E-4
-    YRECFM='VPRES'
-    YCOMMENT='X_Y_Z_Vapor PRESsure (hPa)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK33,IGRID,ILENCH,YCOMMENT,IRESP)
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK33)
     !
     IF (LCOREF) THEN
       ZWORK33(:,:,:)=(77.6*( XPABST(:,:,:)*1E-2                &
@@ -2012,7 +2022,7 @@ IF (LTPZH .OR. LCOREF) THEN
       ILENCH=LEN(YCOMMENT)
       CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK33,IGRID,ILENCH,YCOMMENT,IRESP)
     END IF
-ELSE
+  ELSE
     PRINT*, 'NO WATER VAPOR IN ',YFMFILE2,' RELATIVE HUMIDITY IS NOT COMPUTED'
   END IF
 !
@@ -2432,18 +2442,29 @@ IF (LGEO .OR. LAGEO) THEN
 !
   IF (LAGEO) THEN
     ZWORK31(:,:,:)=XUT(:,:,:)-ZWORK31(:,:,:)
-    YRECFM='UM89'
-    YCOMMENT='X_Y_Z_U component of AGEOstrophic wind (m/s)'
-    IGRID=2
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
-!
     ZWORK32(:,:,:)=XVT(:,:,:)-ZWORK32(:,:,:)
-    YRECFM='VM89'
-    YCOMMENT='X_Y_Z_V component of AGEOstrophic wind (m/s)'
-    IGRID=3
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP)
+    !
+    TZFIELD%CMNHNAME   = 'UM89'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: UM89'
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_U component of AGEOstrophic wind'
+    TZFIELD%NGRID      = 2
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31)
+    !
+    TZFIELD%CMNHNAME   = 'VM89'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: VM89'
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_V component of AGEOstrophic wind'
+    TZFIELD%NGRID      = 3
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK32)
     !
     IF (LWIND_ZM) THEN
       TZFIELD2(1)%CMNHNAME   = 'UM89_ZM'
@@ -2470,11 +2491,11 @@ IF (LGEO .OR. LAGEO) THEN
     ENDIF
 !
 ! wm necessary to plot vertical cross sections of wind vectors
-    YRECFM='WM89'
-    YCOMMENT='X_Y_Z_vertical wind (m/s)'
-    IGRID=4
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XWT,IGRID,ILENCH,YCOMMENT,IRESP)
+    CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)
+    TZFIELD = TFIELDLIST(IID)
+    TZFIELD%CMNHNAME  = 'WM89'
+    TZFIELD%CLONGNAME = 'MesoNH: WM89'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XWT)
   END IF
 !
 END IF
@@ -2500,11 +2521,16 @@ IF (LMSLP) THEN
 !  sea level pressure (hPa)
   ZWORK22(:,:) = 1.E-2*ZWORK21(:,:)*EXP(XG*XZS(:,:)/(XRD*ZWORK22(:,:)))
 !
-  YRECFM='MSLP'
-  YCOMMENT='X_Y_Mean Sea Level Pressure (hPa)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK22,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'MSLP'
+  TZFIELD%CSTDNAME   = 'air_pressure_at_sea_level'
+  TZFIELD%CLONGNAME  = 'MesoNH: MSLP'
+  TZFIELD%CUNITS     = 'hPa'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Mean Sea Level Pressure'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK22)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -2519,11 +2545,16 @@ IF (LTHW) THEN
                      (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit
-    YRECFM      ='THVW'
-    YCOMMENT    ='X_Y_THickness of Vapor Water (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THVW'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THVW'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of Vapor Water'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -2533,11 +2564,16 @@ IF (LTHW) THEN
                      (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000. ! cloud water in mm unit
-    YRECFM      ='THCW'
-    YCOMMENT    ='X_Y_THickness of Cloud Water (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THCW'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THCW'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of Cloud Water'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -2547,11 +2583,16 @@ IF (LTHW) THEN
                      (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000. ! rain water in mm unit
-    YRECFM      ='THRW'
-    YCOMMENT    ='X_Y_THickness of Rain Water (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THRW'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THRW'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of Rain Water'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -2561,11 +2602,16 @@ IF (LTHW) THEN
                    (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000.   ! ice thickness in mm unit
-    YRECFM      ='THIC'
-    YCOMMENT    ='X_Y_THickness of ICe (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THIC'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THIC'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of ICe'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -2575,11 +2621,16 @@ IF (LTHW) THEN
                    (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000.   ! snow thickness in mm unit
-    YRECFM      ='THSN'
-    YCOMMENT    ='X_Y_THickness of SNow (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THSN'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THSN'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of SNow'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -2589,11 +2640,16 @@ IF (LTHW) THEN
                    (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000.   ! graupel thickness in mm unit
-    YRECFM      ='THGR'
-    YCOMMENT    ='X_Y_THickness of GRaupel (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THGR'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THGR'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of GRaupel'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -2603,11 +2659,15 @@ IF (LTHW) THEN
                    (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
     END DO
     ZWORK21(:,:) = ZWORK21(:,:)*1000.   ! hail thickness in mm unit
-    YRECFM      ='THHA'
-    YCOMMENT    ='X_Y_THickness of HAil (MM)'
-    IGRID       =1
-    ILENCH      =LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'THHA'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: THHA'
+    TZFIELD%CUNITS     = 'mm'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_THickness of HAil'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
   END IF
 END IF
 !
@@ -2727,36 +2787,61 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
                    ZWORK32(:,:,IKB:IKE),ZWORK33(:,:,IKB:IKE),          &
                    ZWORK34(:,:,IKB:IKE),ZWORK21,ZWORK22                )
   !
-  YRECFM='CAPEMAX'
-  YCOMMENT='X_Y_MAX of Convective Available Potential Energy (J/kg)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'CAPEMAX'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: CAPEMAX'
+  TZFIELD%CUNITS     = 'J kg-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_MAX of Convective Available Potential Energy'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   !
-  YRECFM='CINMAX'
-  YCOMMENT='X_Y_MAX of Convective INhibition energy (J/kg)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK22,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'CINMAX'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: CINMAX'
+  TZFIELD%CUNITS     = 'J kg-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_MAX of Convective INhibition energy'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK22)
   !
   IF (NCAPE >=1) THEN
-    YRECFM='CAPE3D'
-    YCOMMENT='X_Y_Z_Convective Available Potential Energy (J/kg)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'CAPE3D'
+    TZFIELD%CSTDNAME   = 'atmosphere_convective_available_potential_energy'
+    TZFIELD%CLONGNAME  = 'MesoNH: CAPE3D'
+    TZFIELD%CUNITS     = 'J kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_Convective Available Potential Energy'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK32)
     !
-    YRECFM='CIN3D'
-    YCOMMENT='X_Y_Z_Convective INhibition energy (J/kg)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK33,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'CIN3D'
+    TZFIELD%CSTDNAME   = 'atmosphere_convective_inhibition'
+    TZFIELD%CLONGNAME  = 'MesoNH: CIN3D'
+    TZFIELD%CUNITS     = 'J kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_Convective INhibition energy'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK33)
     !
-    YRECFM='DCAPE3D'
-    YCOMMENT='X_Y_Z_ (J/kg)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK34,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'DCAPE3D'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: DCAPE3D'
+    TZFIELD%CUNITS     = 'J kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK34)
   END IF
   !
   IF (NCAPE >=2) THEN
@@ -2764,11 +2849,16 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     ZWORK31(:,:,IKU)    = 0.
     ZWORK31=0.5*ZWORK31**2
     !
-    YRECFM='VKE'
-    YCOMMENT='X_Y_Z_Vertical Kinetic Energy (J/kg)'
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'VKE'
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: VKE'
+    TZFIELD%CUNITS     = 'J kg-1'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Z_Vertical Kinetic Energy'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31)
   END IF
 ENDIF
 !
@@ -2884,29 +2974,49 @@ IF(LRADAR .AND. LUSERR) THEN
                                                          ZWORK33, ZWORK34 )
   ENDIF 
 !
-  YRECFM       ='RARE'
-  YCOMMENT     ='X_Y_Z_RAdar REflectivity (dBZ)'
-  IGRID        =1
-  ILENCH       =LEN(YCOMMENT)
-  CALL FMWRIT (YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'RARE'
+  TZFIELD%CSTDNAME   = 'equivalent_reflectivity_factor'
+  TZFIELD%CLONGNAME  = 'MesoNH: RARE'
+  TZFIELD%CUNITS     = 'dBZ'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_RAdar REflectivity'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31)
 !
-  YRECFM       ='VDOP'
-  YCOMMENT     ='X_Y_Z_radar DOPpler fall speed (M/S)'
-  IGRID        =1
-  ILENCH       =LEN(YCOMMENT)
-  CALL FMWRIT (YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'VDOP'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: VDOP'
+  TZFIELD%CUNITS     = 'm s-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_radar DOPpler fall speed'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK32)
 !
-  YRECFM       ='ZDR'
-  YCOMMENT     ='X_Y_Z_Differential polar Reflectivity (dBZ)'
-  IGRID        =1
-  ILENCH       =LEN(YCOMMENT)
-  CALL FMWRIT (YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK33,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'ZDR'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: ZDR'
+  TZFIELD%CUNITS     = 'dBZ'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_Differential polar Reflectivity'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK33)
 !
-  YRECFM       ='KDP'
-  YCOMMENT     ='X_Y_Z_Differential Phase Reflectivity (degree/km)'
-  IGRID        =1
-  ILENCH       =LEN(YCOMMENT)
-  CALL FMWRIT (YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK34,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'KDP'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: KDP'
+  TZFIELD%CUNITS     = 'degree km-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_Differential Phase Reflectivity'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK34)
 !
    ELSE 
     !
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 1d083e16e46aae0eecb98fc1369f74a48c876d04..de48f33f55cb990c7a3b5546a6b2c96788947251 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -253,62 +253,50 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !
 IF (NCONV_KF >= 0) THEN
 !
-  YRECFM      = 'CAPE'
-  YCOMMENT    = 'X_Y_Convective Available Potentiel Energy (J/kg)'
-  IGRID       = 4
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCAPE,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'CAPE',CLUOUT,IRESP,XCAPE)
 !
-  YRECFM      = 'CLTOPCONV'                              ! top height (km) of
-  ZWORK21(:,:)= 0.                                       ! convective clouds
+  ! top height (km) of convective clouds
+  ZWORK21(:,:)= 0.
   DO JJ=IJB,IJE
     DO JI=IIB,IIE
       IF (NCLTOPCONV(JI,JJ)/=0) ZWORK21(JI,JJ)= XZZ(JI,JJ,NCLTOPCONV(JI,JJ))/1.E3
     END DO
   END DO
-  YCOMMENT    = 'X_Y_Top of Convective Cloud (km)'
-  IGRID       = 4
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'CLTOPCONV'
+  TZFIELD%CSTDNAME   = 'convective_cloud_top_altitude'
+  TZFIELD%CLONGNAME  = 'MesoNH: CLTOPCONV'
+  TZFIELD%CUNITS     = 'km'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Top of Convective Cloud'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
 !
-  YRECFM      = 'CLBASCONV'                              ! base height (km) of
-  ZWORK21(:,:)= 0.                                       ! convective clouds
+  ! base height (km) of convective clouds
+  ZWORK21(:,:)= 0.
   DO JJ=IJB,IJE
     DO JI=IIB,IIE
       IF (NCLBASCONV(JI,JJ)/=0) ZWORK21(JI,JJ)= XZZ(JI,JJ,NCLBASCONV(JI,JJ))/1.E3
     END DO
   END DO
-  YCOMMENT    = 'X_Y_Base of Convective Cloud (km)'
-  IGRID       = 4
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'CLBASCONV'
+  TZFIELD%CSTDNAME   = 'convective_cloud_base_altitude'
+  TZFIELD%CLONGNAME  = 'MesoNH: CLBASCONV'
+  TZFIELD%CUNITS     = 'km'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Base of Convective Cloud'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
 !
 END IF
 IF (NCONV_KF >= 1) THEN
 !
-  YRECFM      = 'DTHCONV'
-  YCOMMENT    = 'X_Y_Z_CONVective heating/cooling rate (K/s)'
-  IGRID       = 1
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDTHCONV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM      = 'DRVCONV'
-  YCOMMENT    = 'X_Y_Z_CONVective R_v tendency (1/s)'
-  IGRID       = 1
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDRVCONV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM      = 'DRCCONV'
-  YCOMMENT    = 'X_Y_Z_CONVective R_c tendency (1/s)'
-  IGRID       = 1
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDRCCONV,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-  YRECFM      = 'DRICONV'
-  YCOMMENT    = 'X_Y_Z_CONVective R_i tendency (1/s)'
-  IGRID       = 1
-  ILENCH      = LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDRICONV,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'DTHCONV',CLUOUT,IRESP,XDTHCONV)
+  CALL IO_WRITE_FIELD(TPFILE,'DRVCONV',CLUOUT,IRESP,XDRVCONV)
+  CALL IO_WRITE_FIELD(TPFILE,'DRCCONV',CLUOUT,IRESP,XDRCCONV)
+  CALL IO_WRITE_FIELD(TPFILE,'DRICONV',CLUOUT,IRESP,XDRICONV)
 !  
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
     IGRID=1                                    
@@ -444,11 +432,16 @@ IF (LCLD_COV .AND. LUSERC) THEN
                                                   ! 0 if there is no cloud
   ZWORK21(:,:)=ZWORK21(:,:)/1.E3            ! height (km) of explicit clouds
 !
-  YRECFM='HECL'
-  YCOMMENT='X_Y_Height of Explicit CLoud top (km)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'HECL'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: HECL'
+  TZFIELD%CUNITS     = 'km'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Height of Explicit CLoud top'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
 !
 !  Higher top of the different species of clouds
 !
@@ -475,24 +468,30 @@ IF (LCLD_COV .AND. LUSERC) THEN
                                                          ! 0 if there is no cloud
     ZWORK21(:,:)=ZWORK21(:,:)/1.E3                 ! max. cloud height (km)
 !
-    YRECFM='HCL'
-    YCOMMENT='X_Y_Height of CLoud top (km)'
-    IGRID=4
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'HCL'
+    TZFIELD%CSTDNAME   = 'cloud_top_altitude'
+    TZFIELD%CLONGNAME  = 'MesoNH: HCL'
+    TZFIELD%CUNITS     = 'km'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = 'X_Y_Height of CLoud top'
+    TZFIELD%NGRID      = 4
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 2
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21)
   ENDIF
 !
-  YRECFM='TCL'
-  YCOMMENT='X_Y_Temperature of CLoud top (C)'
-  IGRID=4
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK22,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'TCL'
+  TZFIELD%CSTDNAME   = 'air_temperature_at_cloud_top'
+  TZFIELD%CLONGNAME  = 'MesoNH: TCL'
+  TZFIELD%CUNITS     = 'celsius'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Height of CLoud top'
+  TZFIELD%NGRID      = 4
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK22)
 !
-  YRECFM='CLDFR'
-  YCOMMENT='X_Y_Z_Cloud Fraction (0)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT) 
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCLDFR,IGRID,ILENCH,YCOMMENT,IRESP)
+  CALL IO_WRITE_FIELD(TPFILE,'CLDFR',CLUOUT,IRESP,XCLDFR)
 !
 !  Visibility                                    
 !
@@ -501,12 +500,17 @@ IF (LCLD_COV .AND. LUSERC) THEN
     ZWORK31(:,:,:)=3.9E3/(144.7*(XRHODREF(:,:,:)*1.E3*XRT(:,:,:,2)/(1.+XRT(:,:,:,2)))**0.88)
   END WHERE
 !
-  YRECFM  ='VISI_HOR'
-  YCOMMENT='X_Y_Z_VISI_HOR (m)'
-  IGRID   = 1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP)
-
+  TZFIELD%CMNHNAME   = 'VISI_HOR'
+  TZFIELD%CSTDNAME   = 'visibility_in_air'
+  TZFIELD%CLONGNAME  = 'MesoNH: VISI_HOR'
+  TZFIELD%CUNITS     = 'm'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_VISI_HOR'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31)
+!
   DEALLOCATE(IWORK1,IWORK2,ICL_HE_ST,GMASK2,ZWORK22)
 END IF
 !