diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90
index ee054b9724cbe770159ffcc7d4c8b6391c4912ca..01d0547f9252de45737bd28f2c9f1ce7cf1ab323 100644
--- a/src/MNH/ini_nsv.f90
+++ b/src/MNH/ini_nsv.f90
@@ -71,6 +71,8 @@ END MODULE MODI_INI_NSV
 !  P. Wautelet 30/03/2021: move NINDICE_CCN_IMM and NIMM initializations from init_aerosol_properties to ini_nsv
 !  B. Vie         06/2021: add prognostic supersaturation for LIMA
 !  P. Wautelet 26/11/2021: initialize TSVLIST_A
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -141,6 +143,7 @@ CHARACTER(LEN=3) :: YNUM3
 CHARACTER(LEN=NCOMMENTLGTMAX) :: YCOMMENT
 CHARACTER(LEN=NUNITLGTMAX)    :: YUNITS
 INTEGER :: ILUOUT
+INTEGER :: ICHIDX ! Index for position in CSV_CHEM_LIST_A array
 INTEGER :: ISV ! total number of scalar variables
 INTEGER :: IMODEIDX, IMOMENTS
 INTEGER :: JI, JJ, JSV
@@ -151,6 +154,9 @@ INTEGER :: JMODE, JMOM, JSV_NAME
 LINI_NSV(KMI) = .TRUE.
 
 ILUOUT = TLUOUT%NLU
+
+ICHIDX = 0
+NSV_CHEM_LIST_A(KMI) = 0
 !
 ! Users scalar variables are first considered
 !
@@ -386,6 +392,7 @@ IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN
   NSV_CHEMBEG_A(KMI)= ISV+1
   NSV_CHEMEND_A(KMI)= ISV+NSV_CHEM_A(KMI)
   ISV               = NSV_CHEMEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHEM_A(KMI)
 ELSE
   NSV_CHEM_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -409,6 +416,7 @@ IF ((LUSECHAQ .OR. LCHAQDIAG).AND.(NEQ .GT. 0)) THEN
     NSV_CHICBEG_A(KMI)= ISV+1
     NSV_CHICEND_A(KMI)= ISV+NSV_CHIC_A(KMI)
     ISV               = NSV_CHICEND_A(KMI)
+    NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHIC_A(KMI)
   ELSE
     NSV_CHIC_A(KMI) = 0
     NSV_CHICBEG_A(KMI)= 1
@@ -447,6 +455,7 @@ IF (LORILAM.AND.(NEQ .GT. 0)) THEN
   NSV_AERBEG_A(KMI)= ISV+1
   NSV_AEREND_A(KMI)= ISV+NSV_AER_A(KMI)
   ISV              = NSV_AEREND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AER_A(KMI)
 ELSE
   NSV_AER_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -459,6 +468,7 @@ IF (LORILAM .AND. LDEPOS_AER(KMI)) THEN
   NSV_AERDEPBEG_A(KMI)= ISV+1
   NSV_AERDEPEND_A(KMI)= ISV+NSV_AERDEP_A(KMI)
   ISV                  = NSV_AERDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AERDEP_A(KMI)
 ELSE
   NSV_AERDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -484,6 +494,7 @@ IF (LDUST) THEN
   NSV_DSTBEG_A(KMI)= ISV+1
   NSV_DSTEND_A(KMI)= ISV+NSV_DST_A(KMI)
   ISV              = NSV_DSTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DST_A(KMI)
 ELSE
   NSV_DST_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -496,6 +507,7 @@ IF ( LDUST .AND. LDEPOS_DST(KMI) ) THEN
   NSV_DSTDEPBEG_A(KMI)= ISV+1
   NSV_DSTDEPEND_A(KMI)= ISV+NSV_DSTDEP_A(KMI)
   ISV                  = NSV_DSTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DSTDEP_A(KMI)
 ELSE
   NSV_DSTDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -521,6 +533,7 @@ IF (LSALT) THEN
   NSV_SLTBEG_A(KMI)= ISV+1
   NSV_SLTEND_A(KMI)= ISV+NSV_SLT_A(KMI)
   ISV              = NSV_SLTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLT_A(KMI)
 ELSE
   NSV_SLT_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -533,6 +546,7 @@ IF ( LSALT .AND. LDEPOS_SLT(KMI) ) THEN
   NSV_SLTDEPBEG_A(KMI)= ISV+1
   NSV_SLTDEPEND_A(KMI)= ISV+NSV_SLTDEP_A(KMI)
   ISV                  = NSV_SLTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLTDEP_A(KMI)
 ELSE
   NSV_SLTDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -566,6 +580,7 @@ IF (.NOT.(LUSECHEM.OR.LCHEMDIAG) .AND. (LCH_CONV_LINOX.OR.LLNOX_EXPLICIT)) THEN
   NSV_LNOXBEG_A(KMI)= ISV+1
   NSV_LNOXEND_A(KMI)= ISV+NSV_LNOX_A(KMI)
   ISV               = NSV_LNOXEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_LNOX_A(KMI)
 ELSE
   NSV_LNOX_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -997,6 +1012,9 @@ END DO
 DO JSV = NSV_CHEMBEG_A(KMI), NSV_CHEMEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                    &
@@ -1015,6 +1033,9 @@ END DO
 DO JSV = NSV_CHICBEG_A(KMI), NSV_CHICEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                      &
@@ -1033,6 +1054,9 @@ END DO
 DO JSV = NSV_AERBEG_A(KMI), NSV_AEREND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
@@ -1051,6 +1075,9 @@ END DO
 DO JSV = NSV_AERDEPBEG_A(KMI), NSV_AERDEPEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
@@ -1069,6 +1096,9 @@ END DO
 DO JSV = NSV_DSTBEG_A(KMI), NSV_DSTEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
@@ -1087,6 +1117,9 @@ END DO
 DO JSV = NSV_DSTDEPBEG_A(KMI), NSV_DSTDEPEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
@@ -1105,6 +1138,9 @@ END DO
 DO JSV = NSV_SLTBEG_A(KMI), NSV_SLTEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
@@ -1123,6 +1159,9 @@ END DO
 DO JSV = NSV_SLTDEPBEG_A(KMI), NSV_SLTDEPEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) )
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) )
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
@@ -1164,6 +1203,9 @@ IF ( NSV_LNOX_A(KMI) > 1 ) &
 DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI)
   CSVNAMES_A(JSV,KMI) = 'LINOX'
 
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = 'LINOX'
+
   WRITE( YNUM3, '( I3.3 )' ) JSV
 
   TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
@@ -1179,4 +1221,7 @@ DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI)
     LTIMEDEP   = .TRUE.                      )
 END DO
 
+IF ( ICHIDX /= NSV_CHEM_LIST_A(KMI) ) &
+  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'ICHIDX /= NSV_CHEM_LIST_A(KMI)' )
+
 END SUBROUTINE INI_NSV
diff --git a/src/MNH/modd_nsv.f90 b/src/MNH/modd_nsv.f90
index 6ab654ead2f5b40e58499ca2110035c796b5150a..03631f3fe5121e9ad589dfee143899050fd5544b 100644
--- a/src/MNH/modd_nsv.f90
+++ b/src/MNH/modd_nsv.f90
@@ -31,15 +31,18 @@
 !  P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables
 !  B. Vie         06/2021: add prognostic supersaturation for LIMA
 !  P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 USE MODD_FIELD,      ONLY: tfieldmetadata
-USE MODD_PARAMETERS, ONLY: JPMODELMAX, &  ! Maximum allowed number of nested models
-                           JPSVMAX,    &  ! Maximum number of scalar variables
-                           JPSVNAMELGTMAX ! Maximum length of a scalar variable name
+USE MODD_PARAMETERS, ONLY: JPMODELMAX, &     ! Maximum allowed number of nested models
+                           JPSVMAX,    &     ! Maximum number of scalar variables
+                           JPSVNAMELGTMAX, & ! Maximum length of a scalar variable name
+                           NMNHNAMELGTMAX
 !
 IMPLICIT NONE
 SAVE
@@ -49,10 +52,12 @@ REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables
 LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called
 !
 CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A   !Names of all the scalar variables
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables
 TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables
 
 INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables
                                          ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+..
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_LIST_A = 0 ! total number of chemical variables (including dust, salt...)
 INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0  ! number of user scalar variables with 
                                                ! indices in the range : 1...NSV_USER_A
 !
@@ -154,12 +159,15 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A
 ! variables updated for the current model
 !
 CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES   !Names of all the scalar variables
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables
 TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables
 
 CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables
 
 INTEGER :: NSV         = 0 ! total number of user scalar variables
 !
+INTEGER :: NSV_CHEM_LIST = 0 ! total number of chemical variables (including dust, salt...)
+!
 INTEGER :: NSV_USER    = 0 ! number of user scalar variables with indices
                            ! in the range : 1...NSV_USER
 INTEGER :: NSV_C2R2    = 0 ! number of liq scalar used in C2R2 and in C3R5
diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90
index 58b3abc9e4eb3641918a0d30e638eeccdf92fbe0..a8bbe8e7baf547de03ad1d6a17637989da614a5a 100644
--- a/src/MNH/update_nsv.f90
+++ b/src/MNH/update_nsv.f90
@@ -28,11 +28,13 @@ END MODULE MODI_UPDATE_NSV
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables
 !  P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
 !-------------------------------------------------------------------------------
 !
-USE MODD_CONF,  ONLY: NVERB
-USE MODD_FIELD, ONLY: tfieldmetadata
+USE MODD_CONF,       ONLY: NVERB
+USE MODD_FIELD,      ONLY: tfieldmetadata
 USE MODD_NSV
+USE MODD_PARAMETERS, ONLY: JPSVNAMELGTMAX, NMNHNAMELGTMAX
 
 use mode_msg
 
@@ -41,6 +43,7 @@ IMPLICIT NONE
 INTEGER, INTENT(IN) :: KMI ! Model index
 
 CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: YSVNAMES_TMP
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: YSVCHEM_LIST_TMP
 INTEGER :: JI, JJ
 TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE :: YSVLIST_TMP
 !
@@ -68,6 +71,21 @@ END IF
 
 CSVNAMES => CSVNAMES_A(:,KMI)
 
+! Allocate/reallocate CSV_CHEM_LIST_A
+IF ( .NOT. ALLOCATED( CSV_CHEM_LIST_A ) ) ALLOCATE( CSV_CHEM_LIST_A( NSV_CHEM_LIST_A(KMI), KMI) )
+!If CSV_CHEM_LIST_A is too small, enlarge it and transfer data
+IF ( SIZE( CSV_CHEM_LIST_A, 1 ) < NSV_CHEM_LIST_A(KMI) .OR. SIZE( CSV_CHEM_LIST_A, 2 ) < KMI ) THEN
+  ALLOCATE( YSVCHEM_LIST_TMP(NSV_CHEM_LIST_A(KMI), KMI) )
+  DO JJ = 1, SIZE( CSV_CHEM_LIST_A, 2 )
+    DO JI = 1, SIZE( CSV_CHEM_LIST_A, 1 )
+      YSVCHEM_LIST_TMP(JI, JJ) = CSV_CHEM_LIST_A(JI, JJ)
+    END DO
+  END DO
+  CALL MOVE_ALLOC( FROM = YSVCHEM_LIST_TMP, TO = CSV_CHEM_LIST_A )
+END IF
+
+CSV_CHEM_LIST => CSV_CHEM_LIST_A(:,KMI)
+
 ! Allocate/reallocate TSVLIST_A
 IF ( .NOT. ALLOCATED( TSVLIST_A ) ) ALLOCATE( TSVLIST_A( NSV_A(KMI), KMI) )
 !If TSVLIST_A is too small, enlarge it and transfer data