diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 8b686161c35bdc1be00f6d506e7c8e77e95ae62f..1b26369bdcac73d5369a950f7245bea1bc0a6dc0 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -307,36 +307,45 @@ IF(PRESENT(HCHEMFILE)) THEN
 
   IF (LORILAM) THEN
     CALL CH_AER_INIT_SOA(ILUOUT,NVERB)
+    !
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
     DO JSV = NSV_AERBEG,NSV_AEREND
-      YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T'
-      YDIR='XY'
-      CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
+      TZFIELD%CMNHNAME   = TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T'
+      TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
-      WRITE(ILUOUT,FMT=9000) 
-      WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
-!callabortstop
-!CALL ABORT
-!      STOP
+        WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
         LORILAM=.FALSE.
       END IF !IRESP
-    END DO ! JSV    
+    END DO ! JSV
+    !
     IF (LDEPOS_AER(IMI)) THEN   
       IF(.NOT.ALLOCATED(CDEAERNAMES)) THEN
         ALLOCATE(CDEAERNAMES(JPMODE*2))
         CDEAERNAMES(:) = YPDEAER_INI(:)
       ENDIF    
+      !
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        YDIR='XY'
-        CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
-          WRITE(ILUOUT,FMT=9000) 
-          WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
-!callabortstop
-!CALL ABORT
-!      STOP
+          WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_AER(IMI)=.FALSE.
         END IF !IRESP
       END DO ! JSV
@@ -393,18 +402,22 @@ IF(PRESENT(HCHEMFILE)) THEN
           CDEDSTNAMES(JMODE) = YPDEDST_INI(IMODEIDX)
           CDEDSTNAMES(NMODE_DST+JMODE) = YPDEDST_INI(NMODE_DST+IMODEIDX)
         ENDDO
-      ENDIF    
-    DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        YDIR='XY'
-        CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
+      ENDIF
+      !
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
+      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
+        TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
-          WRITE(ILUOUT,FMT=9000) 
-          WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
-!callabortstop
-!CALL ABORT
-!      STOP
+          WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_DST(IMI)=.FALSE.
         END IF !IRESP
       END DO ! JSV
@@ -451,7 +464,8 @@ IF(PRESENT(HCHEMFILE)) THEN
           END IF !IRESP
         END DO ! JMOM
       END DO !JMOD
-    END IF !if IMOMENTS  
+    END IF !if IMOMENTS
+    !
     IF (LDEPOS_SLT(IMI)) THEN
       IF(.NOT.ALLOCATED(CDESLTNAMES)) THEN
         ALLOCATE(CDESLTNAMES(NMODE_SLT*2))
@@ -461,17 +475,21 @@ IF(PRESENT(HCHEMFILE)) THEN
           CDESLTNAMES(NMODE_SLT+JMODE) = YPDESLT_INI(NMODE_SLT+IMODEIDX)
         ENDDO
       ENDIF
+      !
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CUNITS     = 'ppp'
+      TZFIELD%CDIR       = 'XY'
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 3
+      !
       DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        YDIR='XY'
-        CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
-          WRITE(ILUOUT,FMT=9000) 
-          WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
-!callabortstop
-!CALL ABORT
-!      STOP
+          WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_SLT(IMI)=.FALSE.
         END IF !IRESP
       END DO ! JSV      
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index b8a7d9c8875dda68bd1093575148c2c97ef00b8f..23e4ed695f1d364747b83cd969a8acb3cc2716f8 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -90,7 +90,10 @@ CALL POSNAM(IFNML,'NAM_CONFIO',GFOUND)
 IF (GFOUND) THEN
   READ(UNIT=IFNML,NML=NAM_CONFIO)
 END IF
-CALL SET_CONFIO_ll(.FALSE., .FALSE., .FALSE.)
+LCDF4 = .FALSE.
+LLFIOUT  = .FALSE.
+LLFIREAD = .FALSE.
+CALL SET_CONFIO_ll()
 CALL CLOSE_LL(YFNML,IREP,'KEEP')
 !
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index eda9a8424f70c40bf668fdfafda7e69c848f51b7..d145a5c27f4abdb75d762b5f01c7cc75138be897 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -518,6 +518,7 @@ LOGICAL  :: LUSECHAQ
 LOGICAL  :: LUSECHIC
 LOGICAL  :: LUSECHEM
 !
+TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL()
 !
 !
@@ -752,7 +753,7 @@ IF(LEN_TRIM(YCHEMFILE)>0)THEN
   IF(YCHEMFILETYPE=='GRIBEX') &
   CALL READ_ALL_DATA_GRIB_CASE('CHEM',YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
   IF (YCHEMFILETYPE=='NETCDF') &
-  CALL READ_CHEM_DATA_NETCDF_CASE(YPRE_REAL1,YCHEMFILE,YPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
+  CALL READ_CHEM_DATA_NETCDF_CASE(YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
 END IF
 !
 CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP)
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index b17c1531fb4706f26f3fed57de6352f5f666589b..82efabd72f190e3a12655999ab19b855c27eded0 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -88,6 +88,7 @@ CHARACTER (LEN=100)   :: HCOMMENT
 INTEGER               :: II, IJ, IGRID, ILENGTH
 !
 TYPE(TFILEDATA),POINTER :: TZFILE    => NULL()
+TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL()
 TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL()
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index f8294a62fcb212641ee5b9a083393ad47231762f..a16f39cfdddbbd477e33f8f40803347a1f17096d 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -2,23 +2,25 @@
       MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !     #################################
 INTERFACE
-SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,HPGDFILE,      &
-                    PTIME_HORI,KVERB,ODUMMY_REAL                         ) 
-!
-CHARACTER(LEN=28),  INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file
-CHARACTER(LEN=28),  INTENT(IN) :: HFILE    ! name of the NETCDF file
-CHARACTER(LEN=28),  INTENT(IN) :: HPGDFILE ! name of the physiographic data file
-INTEGER,           INTENT(IN)  :: KVERB    ! verbosity level
-LOGICAL,           INTENT(IN)  :: ODUMMY_REAL! flag to interpolate dummy fields
-REAL,           INTENT(INOUT)  :: PTIME_HORI ! time spent in hor. interpolations
+SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE,  &
+                                      PTIME_HORI,KVERB,ODUMMY_REAL ) 
+!
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
+CHARACTER(LEN=28),  INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
+TYPE(TFILEDATA),    INTENT(IN)    :: TPPGDFILE  ! physiographic data file
+REAL,               INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations
+INTEGER,            INTENT(IN)    :: KVERB      ! verbosity level
+LOGICAL,            INTENT(IN)    :: ODUMMY_REAL! flag to interpolate dummy fields
 END SUBROUTINE READ_CHEM_DATA_NETCDF_CASE
 !
 END INTERFACE
 END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
-!     ##########################################################################
-      SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,HPGDFILE,      &
-                       PTIME_HORI,KVERB,ODUMMY_REAL                            )
-!     ##########################################################################
+!     ####################################################################
+      SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE,  &
+                                            PTIME_HORI,KVERB,ODUMMY_REAL ) 
+!     ####################################################################
 !
 !!****  *READ_CHEM_DATA_NETCDF_CASE* - reads data for the initialization of real cases.
 !!
@@ -96,6 +98,7 @@ USE MODI_CH_AER_INIT_SOA
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
+USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_GRID
@@ -126,12 +129,12 @@ include 'netcdf.inc'
 !* 0.1. Declaration of arguments
 !       ------------------------
 !
-CHARACTER(LEN=28),      INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file
-CHARACTER(LEN=28),      INTENT(IN) :: HFILE      ! name of the GRIB file
-CHARACTER(LEN=28),      INTENT(IN) :: HPGDFILE   ! name of the physiographic data file
-INTEGER,               INTENT(IN)  :: KVERB    ! verbosity level
-LOGICAL,               INTENT(IN)  :: ODUMMY_REAL! flag to interpolate dummy fields
-REAL,                INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations
+CHARACTER(LEN=28),  INTENT(IN)    :: HPRE_REAL1 ! name of the PRE_REAL1 file
+CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
+TYPE(TFILEDATA),    INTENT(IN)    :: TPPGDFILE  ! physiographic data file
+REAL,               INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations
+INTEGER,            INTENT(IN)    :: KVERB      ! verbosity level
+LOGICAL,            INTENT(IN)    :: ODUMMY_REAL! flag to interpolate dummy fields
 !
 !* 0.2 Declaration of local variables
 !      ------------------------------
@@ -212,7 +215,7 @@ IMI = GET_CURRENT_MODEL_INDEX()
 !     -------------
 !
 CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
-CALL READ_HGRID_n(HPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE)
+CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE)
 !
 ! 1.1 Domain restriction
 !
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index bc4029673d605f2d17976bf370a249ef5c767ead..184fea2c23d6925eaee3b5069f7c829fa20b6ab6 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -1353,15 +1353,27 @@ IF ( LFORCING ) THEN
     TZFIELD%NDIMS      = 0
     CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPGROUNDFRC(JT))
 !
-    YRECFM='TENDUFRC'//YFRC
-    YDIR='--'
-    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP)
-    PTENDUFRC(:,JT)=Z1D(:)
-!
-    YRECFM='TENDVFRC'//YFRC
-    YDIR='--'
-    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP)
-    PTENDVFRC(:,JT)=Z1D(:)
+    TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale U tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDUFRC(:,JT))
+!
+    TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale V tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDVFRC(:,JT))
   END DO
 END IF
 !
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index c1c3d75a86dc1850efe3ac2b325a68d5f2bcd0bd..8be8a3272cda800f1dc0c1db5110a5e1ef773e91 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -3564,13 +3564,19 @@ IF (CBLTOP == 'THETA') THEN
   END DO
   ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:)
   ZSHMIX(:,:)=MAX(ZSHMIX(:,:),50.0)
-  YRECFM='HBLTOP'
-  YCOMMENT='Height of Boundary Layer TOP (M)'
-  ILENCH=LEN(YCOMMENT)
-  IGRID=1
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,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      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  !
   DEALLOCATE(ZSHMIX)
-
 ELSEIF (CBLTOP == 'RICHA') THEN
   !
   ! méthode du "bulk Richardson number"
@@ -3601,11 +3607,18 @@ ELSEIF (CBLTOP == 'RICHA') THEN
     END DO
   END DO
   ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:)
-  YRECFM='HBLTOP'
-  YCOMMENT='Height of Boundary Layer TOP (M)'
-  ILENCH=LEN(YCOMMENT)
-  IGRID=1
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,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      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  !
   DEALLOCATE(ZRIB,ZSHMIX)
 ENDIF
   ! used before 5-3-1 version
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 6ebc210d654333df31de62ec2557bced2190b636..bb96e67bd6f1b30559c418ecf9f3624725dac341 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -710,15 +710,19 @@ END IF
 !LCHEMDIAG, NSV_CHEMBEG, NSV_CHEMEND
 
 IF (LCHEMDIAG) THEN
-    DO JSV = NSV_CHEMBEG, NSV_CHEMEND
-      YRECFM = 'FLX_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
-      WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)), &
-                                  ' Net chemical flux ppb.m/s'
-      ILENCH = LEN(YCOMMENT)
-      ZWORK21(:,:) = XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY', ZWORK21(:,:),           &
-                  IGRID,ILENCH,YCOMMENT,IRESP)
-    END DO
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CUNITS     = 'ppb m s-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 2
+  !
+  DO JSV = NSV_CHEMBEG, NSV_CHEMEND
+    TZFIELD%CMNHNAME   = 'FLX_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    WRITE(TZFIELD%CCOMMENT,'(A6,A,A)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)),' Net chemical flux'
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
+  END DO
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 3b3e802034ca8585a9d0447031cce5ce021d79df..aec6fa674f9b973869b8387ee8e3569a0a15a32a 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -1856,19 +1856,27 @@ IF (LFORCING) THEN
     TZFIELD%NDIMS      = 0
     CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPGROUNDFRC(JT))
 !
-    YRECFM='TENDUFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTENDUFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
-
-    YRECFM='TENDVFRC'//YFRC
-    YCOMMENT=' '
-    IGRID=1
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTENDVFRC(:,JT),IGRID,ILENCH,  &
-                                                            YCOMMENT,IRESP)
+    TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale U tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDUFRC(:,JT))
+!
+    TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'm s-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%CCOMMENT   = 'Large-scale V tendency for forcing'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 1
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDVFRC(:,JT))
 !
   END DO
 !