diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90
index c7b2ab442d6ce8d3074eb48e5a83043e3da23ce3..2ee163edd3db1383dc70331ce0b00b4e22d31a5a 100644
--- a/src/MNH/lima_adjust.f90
+++ b/src/MNH/lima_adjust.f90
@@ -151,6 +151,7 @@ USE MODI_CONDENS
 USE MODI_BUDGET
 USE MODI_LIMA_FUNCTIONS
 !
+USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
 USE MODE_FM
 USE MODE_FMWRIT
 !
@@ -257,18 +258,12 @@ REAL, DIMENSION(:), ALLOCATABLE &
                             ZDELTI, ZDELT1, ZDELT2, ZCND, ZDEP
 !
 INTEGER                  :: IRESP      ! Return code of FM routines
-INTEGER                  :: ILENG      ! Length of comment string in LFIFM file
-INTEGER                  :: IGRID      ! C-grid indicator in LFIFM file
-INTEGER                  :: ILENCH     ! Length of comment string in LFIFM file
 INTEGER                  :: IKB        ! K index value of the first inner mass point
 INTEGER                  :: IKE        ! K index value of the last inner mass point
 INTEGER                  :: IIB,IJB    ! Horz index values of the first inner mass points
 INTEGER                  :: IIE,IJE    ! Horz index values of the last inner mass points
 INTEGER                  :: JITER,ITERMAX  ! iterative loop for first order adjustment
 INTEGER                  :: ILUOUT     ! Logical unit of output listing 
-CHARACTER (LEN=28)       :: YFMFILE      ! Name of FM-file to write
-CHARACTER (LEN=100)      :: YCOMMENT   ! Comment string in LFIFM file
-CHARACTER (LEN=16)       :: YRECFM     ! Name of the desired field in LFIFM file
 !
 INTEGER                           :: ISIZE
 REAL, DIMENSION(:), ALLOCATABLE   :: ZRTMIN
@@ -279,14 +274,13 @@ INTEGER                           :: JL       ! and PACK intrinsics
 INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
 INTEGER , DIMENSION(3) :: BV
+TYPE(TFIELDDATA)  :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
 !*       1.     PRELIMINARIES
 !               -------------
 !
-YFMFILE = TPFILE%CNAME
-!
 CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP)
 !
 IIB = 1 + JPHEXT
@@ -1126,12 +1120,16 @@ IF ( HRAD /= 'NONE' ) THEN
 END IF
 !
 IF ( OCLOSE_OUT ) THEN
-  ILENCH=LEN(YCOMMENT)
-  YRECFM  ='NEB'
-  YCOMMENT='X_Y_Z_NEB (0)'
-  IGRID   = 1
-  ILENG = SIZE(ZW,1)*SIZE(ZW,2)*SIZE(ZW,3)
-  CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZW,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'NEB'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: NEB'
+  TZFIELD%CUNITS     = '1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_NEB'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZW)
 END IF
 !
 !
@@ -1171,17 +1169,21 @@ END IF
 ! write SSI in LFI
 !
 IF ( OCLOSE_OUT ) THEN
-   ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
-   ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-   ZW1(:,:,:)= 2.0*PPABST(:,:,:)-PPABSM(:,:,:)
-   ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
+  ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
+  ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
+  ZW1(:,:,:)= 2.0*PPABST(:,:,:)-PPABSM(:,:,:)
+  ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
 
-   ILENCH=LEN(YCOMMENT)
-   YRECFM  ='SSI'
-   YCOMMENT='X_Y_Z_SSI'
-   IGRID   = 1
-   ILENG = SIZE(ZW,1)*SIZE(ZW,2)*SIZE(ZW,3)
-   CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZW,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'SSI'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: SSI'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_SSI'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZW)
 END IF
 !
 !
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index 21300126c4fe239e8af0d0efdb89b0b995cb1fd2..6d3a9a38a6b7d5d862ac3283d13e8251b42238d6 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -137,12 +137,14 @@ END MODULE MODI_WRITE_BUDGET
 !*       0.    
 !              ------------
 USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_TIME
 USE MODD_BUDGET
 !
+USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
+USE MODE_FMWRIT
+USE MODE_TIME
+!
 USE MODI_TEMPORAL_DIST
 USE MODI_WRITE_DIACHRO
-USE MODE_FMWRIT
 USE MODI_MENU_DIACHRO
 USE MODI_END_CART_COMPRESS
 USE MODI_END_MASK_COMPRESS
@@ -191,6 +193,7 @@ INTEGER                                           :: JSV           ! loop index
                                                                    ! over the 
                                                                    ! KSV  SVx
 INTEGER :: IP
+TYPE(TFIELDDATA) :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
@@ -199,16 +202,27 @@ YFILEDIA = TPDIAFILE%CNAME
 !*	 1.     write TSTEP and BULEN
 !	        ---------------------
 !
-YRECFM='TSTEP'
-YCOMMENT=' '
-IGRID=0
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'--',PTSTEP,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='BULEN'
-YCOMMENT=' '
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'--',XBULEN,IGRID,ILENCH,YCOMMENT,IRESP)
+TZFIELD%CMNHNAME   = 'TSTEP'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: TSTEP'
+TZFIELD%CUNITS     = 's'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'Time step'
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 0
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUT,IRESP,PTSTEP)
+!
+TZFIELD%CMNHNAME   = 'BULEN'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'MesoNH: BULEN'
+TZFIELD%CUNITS     = 's'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'Time step'
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 0
+CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUT,IRESP,XBULEN)
 !
 !*   1.1   initialize NBUTSHIFT
 !           ---------------------
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 27df2eec38307d5b564d60b45f4294b6e7f0fe14..7beb7069c1319cb7c52ecb7de35fb5bffcd14be2 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -380,12 +380,20 @@ DO J = 1,IP
   ELSE IF(J >= 100 .AND. J < 1000) THEN 
           WRITE(YJ,'(I3)')J
   ENDIF
-  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
 ! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
 IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
   IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN
-    CALL FMWRITBOX(TPDIAFILE%CNAME,TZFIELD%CMNHNAME,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J),KGRID(J), &
-                   HTITRE(J),KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT,IRESPDIA)
+    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(HGROUP)//'.PROC'//YJ
+    TZFIELD%CUNITS     = ''
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%CCOMMENT   = TRIM(HTITRE(J))
+    TZFIELD%NGRID      = KGRID(J)
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 5
+    CALL IO_WRITE_FIELD_BOX(TPDIAFILE,TZFIELD,HLUOUTDIA,'BUDGET',PVAR(:,:,:,:,:,J), &
+                            KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT,IRESPDIA)
   ELSE
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
     TZFIELD%CSTDNAME   = ''
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 650ddcc6fdad4e8e5329b423f4f73885c56f7cd8..f5a76edcfb87862cc4c9e6a70b9e5b163452fc4a 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -340,41 +340,48 @@ IF (NSV >=1) THEN
 ! LIMA: CCN and IFN scalar variables
 !
   IF (CCLOUD=='LIMA' ) THEN
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'kg-1'
+    TZFIELD%CDIR       = '--'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    !
     DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
       IF(NSIZELBXSV_ll /= 0) THEN
-        YRECFM='LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-        WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (/KG)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV))
       END IF
 !
       IF(NSIZELBYSV_ll /= 0) THEN
-        YRECFM='LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-        WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (/KG)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBYSV_ll,IRESP,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
 !
     DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
       IF(NSIZELBXSV_ll /= 0) THEN
-        YRECFM='LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-        WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (/KG)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV))
       END IF
 !
       IF(NSIZELBYSV_ll /= 0) THEN
-        YRECFM='LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-        WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (/KG)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
+        TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBYSV_ll,IRESP,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 7cbe3df74c64632a8efac318b8896fbb27fe9d43..38e101917eb4a944e4e4e1356d8e85a487964d04 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -699,70 +699,71 @@ IF (NSV >=1) THEN
 !
 ! microphysical LIMA variables
 !
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CUNITS     = 'kg-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  !
   DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
+    !
+    TZFIELD%CUNITS     = 'kg-1'
+    WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT'
+    !
 ! Nc
-     IF (JSV .EQ. NSV_LIMA_NC) THEN
-        YRECFM=TRIM(CLIMA_WARM_NAMES(1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .EQ. NSV_LIMA_NC) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(1))//'T'
+    END IF
 ! Nr
-     IF (JSV .EQ. NSV_LIMA_NR) THEN
-        YRECFM=TRIM(CLIMA_WARM_NAMES(2))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .EQ. NSV_LIMA_NR) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(2))//'T'
+    END IF
 ! N CCN free
-     IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
-        YRECFM=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN
+      WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T'
+    END IF
 ! N CCN acti
-     IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1)
-        YRECFM=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN
+      WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1)
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
+    END IF
 ! Scavenging
-     IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN
-        YRECFM=TRIM(CAERO_MASS(1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (kg/kg)'
-     END IF
+    IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN
+      TZFIELD%CMNHNAME   = TRIM(CAERO_MASS(1))//'T'
+      TZFIELD%CUNITS     = 'kg kg-1'
+    END IF
 ! Ni
-     IF (JSV .EQ. NSV_LIMA_NI) THEN
-        YRECFM=TRIM(CLIMA_COLD_NAMES(1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .EQ. NSV_LIMA_NI) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(1))//'T'
+    END IF
 ! N IFN free
-     IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
-        YRECFM=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
+      WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
+    END IF
 ! N IFN nucl
-     IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
-        YRECFM=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
+      WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
+    END IF
 ! N IMM nucl
-     I = 0
-     IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-        I = I + 1
-        WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I))
-        YRECFM=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
+    I = 0
+    IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
+      I = I + 1
+      WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I))
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
+    END IF
 ! Hom. freez. of CCN
-     IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-        YRECFM=TRIM(CLIMA_COLD_NAMES(5))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/kg)'
-     END IF
-!
+    IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
+    END IF
+    !
+    TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
+    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV))
 !
-     ILENCH=LEN(YCOMMENT)
-     CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-          YCOMMENT,IRESP)
-     JSA=JSA+1
+    JSA=JSA+1
   END DO
 !
   IF (LSCAV .AND. LAERO_MASS) THEN