diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index 3c610aa2dc2a886f685abefa9cc48220ec04099e..710de1454964a505ade0a3a53b6829ce23474ee2 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1998-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2021 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.
@@ -151,10 +151,8 @@ USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV
-USE MODD_PARAMETERS,      ONLY: JPHEXT,NMNHNAMELGTMAX
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES
+USE MODD_PARAMETERS,      ONLY: JPHEXT, NMNHNAMELGTMAX
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN
 USE MODD_PARAM_n
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_SALT
@@ -224,14 +222,14 @@ INTEGER             :: JSV,JRR                    ! Loop index for MOIST AND
 INTEGER             :: IRR                        !  counter for moist variables
 INTEGER             :: IRESP
 INTEGER             :: ILUOUT   !  Logical unit number associated with TLUOUT
-LOGICAL :: GHORELAX_UVWTH  ! switch for the horizontal relaxation for U,V,W,TH in the FM file 
+LOGICAL :: GHORELAX_UVWTH  ! switch for the horizontal relaxation for U,V,W,TH in the FM file
 LOGICAL :: GHORELAX_TKE    ! switch for the horizontal relaxation for tke in the FM file
 LOGICAL :: GHORELAX_R, GHORELAX_SV ! switch for the horizontal relaxation 
                                    ! for moist and scalar variables
 CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with  the get indicators 
                                                         !  for the moist variables
 CHARACTER (LEN=1), DIMENSION (7) :: YC    ! array with the prefix of the moist variables
-CHARACTER(LEN=2)     :: INDICE ! to index CCN and IFN fields of LIMA scheme
+CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME_BASE
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
@@ -676,120 +674,131 @@ END IF
 ! LIMA: CCN and IFN scalar variables
 !
 IF (CCLOUD=='LIMA' ) THEN
-  IF (NSV_LIMA_CCN_FREE+NMOD_CCN-1 >= NSV_LIMA_CCN_FREE) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1
-      SELECT CASE(HGETSVM(JSV))
-        CASE ('READ')
-          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
-          IF ( KSIZELBXSV_ll /= 0 ) THEN
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-            IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-              IF (IRESP/=0) THEN
-                IF (PRESENT(PLBXSVMM)) THEN
-                  PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                  WRITE(ILUOUT,*) 'CCN PLBXSVM   will be initialized to 0'
-                ELSE
+  DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_FREE + NMOD_CCN - 1
+    SELECT CASE(HGETSVM(JSV))
+      CASE ('READ')
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CDIR = ''
+        YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
+
+        IF ( KSIZELBXSV_ll /= 0 .AND. SIZE(PLBXSVM,1) /= 0 ) THEN
+          TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
+
+          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
+          END IF
+
+          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+          TZFIELD%CLBTYPE    = 'LBX'
+
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+
+          IF (IRESP/=0) THEN
+            IF (PRESENT(PLBXSVMM)) THEN
+              PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
+              WRITE(ILUOUT,*) 'CCN PLBXSVM   will be initialized to 0'
+            ELSE
 !callabortstop
-                  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBXSVM')
-                ENDIF
-              END IF
-            END IF
+              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBXSVM')
+            ENDIF
           END IF
-          !
-          IF (KSIZELBYSV_ll  /= 0 ) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-            IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-              IF (IRESP/=0) THEN
-                IF (PRESENT(PLBYSVMM)) THEN
-                  PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                  WRITE(ILUOUT,*) 'CCN PLBYSVM   will be initialized to 0'
-                ELSE
+        END IF
+        !
+        IF (KSIZELBYSV_ll  /= 0 .AND. SIZE(PLBYSVM,1) /= 0 ) THEN
+          TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
+
+          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
+          END IF
+
+          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+          TZFIELD%CLBTYPE    = 'LBY'
+
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          IF (IRESP/=0) THEN
+            IF (PRESENT(PLBYSVMM)) THEN
+              PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
+              WRITE(ILUOUT,*) 'CCN PLBYSVM   will be initialized to 0'
+            ELSE
 !callabortstop
-                  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBYSVM')
-                ENDIF
-              END IF
-            END IF
+              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBYSVM')
+            ENDIF
           END IF
-        CASE('INIT')
-          IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-          IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-      END SELECT
-    END DO
-  END IF
+        END IF
+      CASE('INIT')
+        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
+        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
+    END SELECT
+  END DO
   !
-  IF (NSV_LIMA_IFN_FREE+NMOD_IFN-1 >= NSV_LIMA_IFN_FREE) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
-      SELECT CASE(HGETSVM(JSV))
-        CASE ('READ')
-          WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
-          IF ( KSIZELBXSV_ll /= 0 ) THEN
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-            IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-              IF (IRESP/=0) THEN
-                IF (PRESENT(PLBXSVMM)) THEN
-                  PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                  WRITE(ILUOUT,*) 'IFN PLBXSVM   will be initialized to 0'
-                ELSE
+  DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
+    SELECT CASE(HGETSVM(JSV))
+      CASE ('READ')
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CDIR = ''
+        YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
+
+        IF ( KSIZELBXSV_ll /= 0 .AND. SIZE(PLBXSVM,1) /= 0 ) THEN
+          TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
+
+          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
+          END IF
+
+          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+          TZFIELD%CLBTYPE    = 'LBX'
+
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          IF (IRESP/=0) THEN
+            IF (PRESENT(PLBXSVMM)) THEN
+              PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
+              WRITE(ILUOUT,*) 'IFN PLBXSVM   will be initialized to 0'
+            ELSE
 !callabortstop
-                  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
-                ENDIF
-              END IF
-            END IF
+              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
+            ENDIF
           END IF
-          !
-          IF (KSIZELBYSV_ll  /= 0 ) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-            IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-              IF (IRESP/=0) THEN
-                IF (PRESENT(PLBYSVMM)) THEN
-                  PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                  WRITE(ILUOUT,*) 'IFN PLBYSVM   will be initialized to 0'
-                ELSE
+        END IF
+        !
+        IF (KSIZELBYSV_ll  /= 0 .AND. SIZE(PLBYSVM,1) /= 0 ) THEN
+          TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
+
+          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
+          END IF
+
+          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+          TZFIELD%CLBTYPE    = 'LBY'
+
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          IF (IRESP/=0) THEN
+            IF (PRESENT(PLBYSVMM)) THEN
+              PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
+              WRITE(ILUOUT,*) 'IFN PLBYSVM   will be initialized to 0'
+            ELSE
 !callabortstop
-                  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
-                ENDIF
-              END IF
-            END IF
+              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
+            ENDIF
           END IF
-        CASE('INIT')
-          IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-          IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-      END SELECT
-    END DO
-  END IF
-ENDIF
+        END IF
+      CASE('INIT')
+        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
+        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
+    END SELECT
+  END DO
+END IF
 ! ELEC scalar variables
 IF (NSV_ELECEND>=NSV_ELECBEG) THEN
   TZFIELD%CSTDNAME   = ''
@@ -1634,4 +1643,29 @@ IF (OLSOURCE) THEN
 !
 ENDIF
 !
+CONTAINS
+
+  SUBROUTINE OLD_CMNHNAME_GENERATE_INTERN( YMNHNAME )
+
+    CHARACTER(LEN=*), INTENT(INOUT) :: YMNHNAME
+
+    INTEGER :: IPOS
+    INTEGER :: JI
+
+    !Try to generate CMNHNAME with old format
+    !In the old format, an indice of 2 numbers was written after the name but without trimming it
+    IPOS = SCAN( YMNHNAME, '0123456789' )
+
+    !Unmodified part YMNHNAME(1:IPOS-1) = YMNHNAME(1:IPOS-1)
+
+    !Move number part at the new end
+    IF ( 4+JPSVNAMELGTMAX+2 > LEN( YMNHNAME ) ) &
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','OLD_CMNHNAME_GENERATE_INTERN','CMNHNAME too small')
+    YMNHNAME(4+JPSVNAMELGTMAX+1 : 4+JPSVNAMELGTMAX+2) = YMNHNAME(IPOS : IPOS+1)
+    DO JI = IPOS, 4+JPSVNAMELGTMAX
+      YMNHNAME(JI:JI) = ' '
+    END DO
+
+  END SUBROUTINE OLD_CMNHNAME_GENERATE_INTERN
+
 END SUBROUTINE INI_LB
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 90b6c3552c829da0b0a3390bd3f0604241f2998e..12df351b513d4d821214585e9e073541d3dc385f 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -289,10 +289,6 @@ USE MODD_NSV
 USE MODD_OCEANH
 USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
 !
-USE MODD_PARAM_LIMA     , ONLY: NMOD_CCN, LSCAV, LAERO_MASS,                &
-                                NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_PARAM_n,         ONLY: CSCONV
 USE MODD_PASPOL
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
@@ -420,7 +416,6 @@ INTEGER                      :: IIUP,IJUP    ! size  of working window arrays
 INTEGER                      :: JT           ! loop index
 LOGICAL                      :: GLSOURCE     ! switch for the source term (for ini_ls and ini_lb)
 LOGICAL                      :: ZLRECYCL     ! switch if turbulence recycling is activated
-CHARACTER(LEN=2)             :: INDICE
 CHARACTER(LEN=3)             :: YFRC         ! To mark the different forcing dates
 CHARACTER(LEN=15)            :: YVAL
 REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK        ! to compute supersaturation
@@ -891,70 +886,12 @@ END IF
 !
 ! LIMA variables
 !
-DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
+DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
   SELECT CASE(HGETSVT(JSV))
   CASE ('READ')
-    TZFIELD%CSTDNAME   = ''
-    WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CUNITS     = 'kg-1'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-! Nc
-    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
-      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)
-      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)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-    END IF
-! Scavenging
-    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
-      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)
-      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)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-    END IF
-! N IMM nucl
-    IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-      WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-    END IF
-! Hom. freez. of CCN
-    IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
-    END IF
-!
-! Super saturation      
-    IF (JSV .EQ. NSV_LIMA_SPRO) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(5))//'T'
-    END IF
-!
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
     CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
   CASE ('INIT')
     PSVT(:,:,:,JSV) = 0.
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index 360cb0e0ef851b75f9e4ccb6affb4050f17ff07a..e774f4c61864e960c916a893ff34226bad0a95b8 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -182,10 +182,6 @@ USE MODD_LUNIT_n,         ONLY: LUNIT_MODEL,TLUOUT
 USE MODD_NSV
 USE MODD_REF_n,           ONLY: REF_MODEL
 USE MODD_PARAMETERS
-USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
-                                LSCAV, LAERO_MASS, LHHONI
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_RELFRC_n 
 USE MODD_SALT,            ONLY: CSALTNAMES
@@ -278,7 +274,6 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRT1
 LOGICAL :: GUSERV
 !
 CHARACTER(LEN=15) :: YVAL
-CHARACTER(LEN=2)  :: INDICE
 TYPE(TFIELDMETADATA) :: TZFIELD
 !
 !-------------------------------------------------------------------------------
@@ -880,69 +875,12 @@ IF (PRESENT(TPSONFILE)) THEN
     !
     ! LIMA variables
     !
-    DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
-      TZFIELD%CSTDNAME   = ''
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CUNITS     = 'kg-1'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      ! Nc
-      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
-        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)
-        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)
-        TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-      END IF
-      ! Scavenging
-      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
-        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)
-        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)
-        TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-      END IF
-      ! N IMM nucl
-      IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-        WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-        TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-      END IF
-      ! Hom. freez. of CCN
-      IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-        TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
-      END IF
-      ! Supersaturation    
-      IF (JSV .EQ. NSV_LIMA_SPRO) THEN
-        TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(5))//'T'
-      END IF
-      ! time t
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
       CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-      IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
+      IF ( IRESP == 0 ) PSVT(KIB2:KIE2, KJB2:KJE2, :, JSV) = ZWORK3D(KIB1:KIE1, KJB1:KJE1, :)
     END DO
     !
     ! ELEC Scalar Variables
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index cd693d89c60852c4af091a60c56add3aabd12771..a8dc25cb4964fa80b436fbc16c173c260fe86a99 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -98,9 +98,6 @@ USE MODD_DUST,            ONLY: CDUSTNAMES, LDUST, NMODE_DST
 USE MODD_SALT,            ONLY: CSALTNAMES
 USE MODD_NSV
 USE MODD_DIAG_IN_RUN
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA     , ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM
 !
 USE MODE_MODELN_HANDLER
 USE MODE_DUST_PSD
@@ -214,7 +211,6 @@ INTEGER :: JRR      ! loop counter
 INTEGER :: JSV      ! loop counter
 INTEGER :: JPT      ! loop counter
 INTEGER :: IKU, IK
-CHARACTER(LEN=2)  :: INDICE
 INTEGER :: JLOOP
 type(tbudiachrometadata) :: tzbudiachro
 type(tfieldmetadata_base), dimension(:), allocatable :: tzfields
@@ -435,39 +431,13 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
 ! LIMA variables
   DO JSV=NSV_LIMA_BEG,NSV_LIMA_END
     JPROC = JPROC+1
-    YUNIT    (JPROC) = 'kg-1'
-    YCOMMENT (JPROC) = ' '
-    IF (JSV==NSV_LIMA_NC) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(1))//'T' 
-    IF (JSV==NSV_LIMA_NR) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(2))//'T' 
-    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)
-        YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T'
-    ENDIF
-    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)
-        YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-    ENDIF
-    IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN
-      YTITLE(JPROC)=TRIM(CAERO_MASS(1))//'T'
-      YUNIT    (JPROC) = 'kg kg-1'
-    ENDIF
-    IF (JSV==NSV_LIMA_NI) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(1))//'T' 
-    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)
-        YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
-    ENDIF
-    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)
-        YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-    ENDIF
-    IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-        WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-        YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-    ENDIF
-    IF (JSV .EQ. NSV_LIMA_HOM_HAZE) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(5))//'T'
-    IF (JSV .EQ. NSV_LIMA_SPRO)     YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(5))//'T'
+
+    YTITLE(JPROC)   = TRIM( TSVLIST(JSV)%CMNHNAME )
+    YUNIT(JPROC)    = TRIM( TSVLIST(JSV)%CUNITS )
+    YCOMMENT(JPROC) = ' '
+
     ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV)
-  END DO 
+  END DO
   ! electrical scalar variables
   DO JSV = NSV_ELECBEG,NSV_ELECEND
     JPROC = JPROC+1
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 001d85f1d874f645bc10f208aed0dfd6fe6ed42c..4b612a21e7ab6b1956fbfbf15030283fdd636f40 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -91,7 +91,7 @@ USE MODD_LUNIT_n
 USE MODD_PARAM_n
 USE MODD_TURB_n
 USE MODD_NSV
-USE MODD_PARAM_LIMA
+USE MODD_PARAM_LIMA,     ONLY: NMOD_CCN, NMOD_IFN
 USE MODD_PARAM_n
 !
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_lb
@@ -105,8 +105,6 @@ USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
 USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
 USE MODD_CH_AEROSOL
 USE MODD_CH_AERO_n
 USE MODI_CH_AER_REALLFI_n
@@ -119,9 +117,9 @@ USE MODD_DUST
 USE MODD_SALT
 USE MODI_DUSTLFI_n
 USE MODI_SALTLFI_n
-USE MODD_PARAMETERS,      ONLY: JPHEXT
+USE MODD_PARAMETERS,      ONLY: JPHEXT, NMNHNAMELGTMAX
 USE MODD_IO, ONLY: TFILEDATA
-use modd_field, only: tfieldmetadata, TYPELOG, TYPEREAL
+use modd_field, only: tfieldmetadata, NMNHDIM_UNKNOWN, TYPELOG, TYPEREAL
 !
 !
 IMPLICIT NONE
@@ -145,14 +143,13 @@ REAL,    DIMENSION(SIZE(XLBXSVM, 1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZRHODR
 REAL,    DIMENSION(SIZE(XLBYSVM, 1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZRHODREFY
 INTEGER            :: JK
 INTEGER            :: IMI    ! Current model index
-CHARACTER(LEN=2)   :: INDICE ! to index CCN and IFN fields of LIMA scheme
 INTEGER           :: I
 INTEGER           :: ILBX,ILBY
 INTEGER           :: IIB, IIE, IJB, IJE, IKB, IKE
 INTEGER           :: IIU, IJU, IKU
 REAL, DIMENSION(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZLBXZZ
 REAL, DIMENSION(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZLBYZZ
-CHARACTER(LEN=100)   :: YMSG
+CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME_BASE
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
@@ -372,48 +369,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
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
     DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1
-      WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CDIR = ''
+      TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
+      YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
+      !
       IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
+        TZFIELD%CLONGNAME  = 'LBX_' // TRIM( YMNHNAME_BASE )
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) '2_Y_Z_', 'LBXSVM', JSV
         TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
         CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
+        TZFIELD%CLONGNAME  = 'LBY_' // TRIM( YMNHNAME_BASE )
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) 'X_2_Z_', 'LBYSVM', JSV
         TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
         CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,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)
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CDIR = ''
+      TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
+      YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
+      !
       IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
+        TZFIELD%CLONGNAME  = 'LBX_' // TRIM( YMNHNAME_BASE )
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) '2_Y_Z_', 'LBXSVM', JSV
         TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
         CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
+        TZFIELD%CLONGNAME  = 'LBY_' // TRIM( YMNHNAME_BASE )
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) 'X_2_Z_', 'LBYSVM', JSV
         TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
         CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 6b1823d8c1db42bcae9b04371e35a3811c66edee..2fdcafd4435bf4a12d4c7d9d395c7b2fb8507aa9 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -244,10 +244,7 @@ USE MODD_PAST_FIELD_n
 USE MODD_ADV_n, ONLY: CUVW_ADV_SCHEME,XRTKEMS,CTEMP_SCHEME,LSPLIT_CFL
 USE MODD_ELEC_FLASH
 !
-USE MODD_PARAM_LIMA     , ONLY: NMOD_CCN, LSCAV, LAERO_MASS,                &
-                                NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
+USE MODD_PARAM_LIMA,     ONLY: LSCAV, LAERO_MASS
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 !
 USE MODE_IO_FILE,        only: IO_File_close
@@ -332,7 +329,6 @@ INTEGER :: IKRAD
 INTEGER           :: JI,JJ,JK   ! loop index
 INTEGER           :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds
 !
-CHARACTER(LEN=2)     :: INDICE
 INTEGER              :: IID
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
@@ -965,73 +961,11 @@ IF (NSV >=1) THEN
 !
 ! microphysical LIMA variables
 !
-  IF (NSV_LIMA_END>=NSV_LIMA_BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-  END IF
-  !
-  DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
-    !
-    TZFIELD%CUNITS     = 'kg-1'
-    WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-    !
-! Nc
-    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
-      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)
-      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)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-    END IF
-! Scavenging
-    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
-      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)
-      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)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-    END IF
-! N IMM nucl
-    IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-      WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-    END IF
-! Hom. freez. of CCN
-    IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
-    END IF
-    !
-! Supersaturation     
-    IF (JSV .EQ. NSV_LIMA_SPRO) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_NAMES(5))//'T'
-    END IF
-    !
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+  DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
+
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
     CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
 !
     JSA=JSA+1
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index 13d9e1a8e69c53c793ad68cb07f01c1c795a2189..482a677130e2b5165b7d982b4abd74215d731834 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -21,16 +21,18 @@
 !      ###########################
 MODULE MODE_WRITE_PROFILER_n
 !      ###########################
-!
+
+use modd_parameters, only: NCOMMENTLGTMAX, NMNHNAMELGTMAX, NUNITLGTMAX
+
 implicit none
 
 private
 
 public :: WRITE_PROFILER_n
 
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CCOMMENT ! comment string
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CTITLE   ! title
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CUNIT    ! physical unit
+CHARACTER(LEN=NCOMMENTLGTMAX), DIMENSION(:), ALLOCATABLE :: CCOMMENT ! comment string
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: CTITLE   ! title
+CHARACTER(LEN=NUNITLGTMAX),    DIMENSION(:), ALLOCATABLE :: CUNIT    ! physical unit
 
 REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: XWORK6   ! contains temporal serie
 
@@ -92,9 +94,6 @@ USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_NSV
 USE MODD_PARAMETERS,      ONLY: XUNDEF
-USE MODD_PARAM_LIMA,      ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_PARAM_n,         ONLY: CRAD
 USE MODD_PROFILER_n
 USE MODD_RADIATIONS_n,    ONLY: NAER
@@ -111,9 +110,9 @@ INTEGER,          INTENT(IN) :: KI
 !
 !*      0.2  declaration of local variables for diachro
 !
-character(len=2)                                     :: yidx
-character(len=100)                                   :: ycomment
-character(len=100)                                   :: yname
+character(len=NCOMMENTLGTMAX)                        :: ycomment
+character(len=NMNHNAMELGTMAX)                        :: yname
+character(len=NUNITLGTMAX)                           :: yunits
 CHARACTER(LEN=:),                        allocatable :: YGROUP   ! group title
 INTEGER                                              :: IKU
 INTEGER                                              :: IPROC    ! number of variables records
@@ -207,35 +206,10 @@ if ( Size( tprofiler%sv, 4 ) > 0  ) then
   end do
   ! LIMA variables
   do jsv = nsv_lima_beg, nsv_lima_end
-    if ( jsv == nsv_lima_nc ) then
-      yname = Trim( clima_warm_names(1) ) // 'T'
-    else if ( jsv == nsv_lima_nr ) then
-      yname = Trim( clima_warm_names(2) ) // 'T'
-    else if ( jsv >= nsv_lima_ccn_free .and. jsv < nsv_lima_ccn_free + nmod_ccn ) then
-      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ccn_free + 1
-      yname = Trim( clima_warm_names(3) ) // yidx // 'T'
-    else if ( jsv >= nsv_lima_ccn_acti .and. jsv < nsv_lima_ccn_acti + nmod_ccn ) then
-      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ccn_acti + 1
-      yname = Trim( clima_warm_names(4) ) // yidx // 'T'
-    else if ( jsv == nsv_lima_scavmass ) then
-      yname = Trim( caero_mass(1) ) // 'T'
-    else if ( jsv == nsv_lima_ni ) then
-      yname = Trim( clima_cold_names(1) ) // 'T'
-    else if ( jsv >= nsv_lima_ifn_free .and. jsv < nsv_lima_ifn_free + nmod_ifn ) then
-      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ifn_free + 1
-      yname = Trim( clima_cold_names(2) ) // yidx // 'T'
-    else if ( jsv >= nsv_lima_ifn_nucl .and. jsv < nsv_lima_ifn_nucl + nmod_ifn ) then
-      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ifn_nucl + 1
-      yname = Trim( clima_cold_names(3) ) // yidx // 'T'
-    else if ( jsv >= nsv_lima_imm_nucl .and. jsv < nsv_lima_imm_nucl + nmod_imm ) then
-      write( yidx, '( i2.2 )' ) nindice_ccn_imm(jsv - nsv_lima_imm_nucl + 1)
-      yname = Trim( clima_cold_names(4) ) // yidx // 'T'
-    else if ( jsv == nsv_lima_hom_haze ) then
-      yname = Trim( clima_cold_names(5) ) // 'T'
-    else if ( jsv == nsv_lima_spro ) then
-      yname = Trim( clima_warm_names(5) ) // 'T'
-    end if
-    call Add_profile( yname, '', 'kg-1', tprofiler%sv(:,:,:,jsv) )
+    yname  = Trim( tsvlist(jsv)%cmnhname )
+    yunits = Trim( tsvlist(jsv)%cunits )
+    ycomment = ''
+    call Add_profile( yname, ycomment, yunits, tprofiler%sv(:,:,:,jsv) )
   end do
   ! electrical scalar variables
   do jsv = nsv_elecbeg, nsv_elecend