diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index e5cf670a1f8f6f833611bfec13e175d84ce20f65..119491566289ecbbd42c208f42590b3f467a8a95 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -139,6 +139,7 @@ END MODULE MODI_ADVECTION_METSV
 !!                  03/2020 (B.Vie) : LIMA negativity checks after turbulence, advection and 
 !!                                    microphysics budgets 
 !  P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices
+!  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -692,6 +693,20 @@ DO JSV=1,KSV
 END DO
 !
 SELECT CASE ( HCLOUD )
+  CASE('KESS')
+    WHERE (PRRS(:,:,:,2) < 0.)
+      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+      ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+      ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+      ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+      ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+      PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+      PRRS(:,:,:,2) = 0.0
+    END WHERE
+!
+    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+!
   CASE('ICE3','ICE4')
      ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
      ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
@@ -731,6 +746,8 @@ SELECT CASE ( HCLOUD )
         PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:)
       END WHERE
     END IF
+!
+    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
 !
   CASE('C2R2','KHKO')
      ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
@@ -750,8 +767,10 @@ SELECT CASE ( HCLOUD )
            PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
         END WHERE
      END DO
-     !
-   CASE('LIMA')   
+!
+    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+!
+   CASE('LIMA')
      ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
      ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
      ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
@@ -793,7 +812,8 @@ SELECT CASE ( HCLOUD )
 !
 END SELECT
 !
-IF ((HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'LIMA') ) THEN
+IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. &
+     HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'LIMA' ) THEN
   IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , 4,'NEADV_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NEADV_BU_RRV')
   IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NEADV_BU_RRC')
@@ -803,22 +823,17 @@ IF ((HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'KHKO') .OR. (HCL
   IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'NEADV_BU_RRG')
   IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'NEADV_BU_RRH')
 END IF
-IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (LWARM) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NC),12+NSV_LIMA_NC,'NEADV_BU_RSV')
-   IF (LWARM.AND.LRAIN) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NR),12+NSV_LIMA_NR,'NEADV_BU_RSV')
-   IF (LCOLD) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NI),12+NSV_LIMA_NI,'NEADV_BU_RSV')
-   IF (NMOD_CCN.GE.1) THEN
-      DO JI=1, NMOD_CCN
-         CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JI-1),12+NSV_LIMA_CCN_FREE+JI-1,'NEADV_BU_RSV') 
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JI=1, NMOD_IFN
-         CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JI-1),12+NSV_LIMA_IFN_FREE+JI-1,'NEADV_BU_RSV') 
-      END DO
-   END IF
-END IF
 
+IF (LBUDGET_SV .AND. (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO')) THEN
+  DO JI = 1, 3
+    CALL BUDGET ( PRSVS(:,:,:,NSV_C2R2BEG-1+JI),12+NSV_C2R2BEG-1+JI,'NEADV_BU_RSV')
+  END DO
+END IF
+IF (LBUDGET_SV .AND. HCLOUD == 'LIMA') THEN
+  DO JI = NSV_LIMA_BEG, NSV_LIMA_END
+    CALL BUDGET ( PRSVS(:,:,:,JI),12+JI,'NEADV_BU_RSV')
+  END DO
+END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE ADVECTION_METSV
diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 911ab2fe08e7e703de3b74a2a1ee0b1129e89d9f..616205e3fd06901bbf6532ac2f902269095ccb96 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -152,16 +152,17 @@ END MODULE MODI_INI_BUDGET
 !!      C.Lac           29/01/15  Correction for NSV_USER
 !!      J.Escobar       02/10/2015 modif for JPHEXT(JPVEXT) variable  
 !!      C.Lac           04/12/15  Correction for LSUPSAT 
-!!                   04/2016 (C.LAC) negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2
-!!      C. Barthe       01/2016   Add budget for LIMA
-!!      C.Lac          10/2016   Add budget for droplet deposition
-!!      S. Riette        11/2016  New budgets for ICE3/ICE4
+!  C. Lac         04/2016: negative contribution to the budget split between advection, turbulence and microphysics for KHKO/C2R2
+!  C. Barthe      01/2016: add budget for LIMA
+!  C. Lac         10/2016: add budget for droplet deposition
+!  S. Riette      11/2016: new budgets for ICE3/ICE4
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 24/02/2020: bugfix: corrected condition for budget NCDEPITH
 !  P. Wautelet 26/02/2020: bugfix: rename CEVA->REVA for budget for raindrop evaporation in C2R2 (necessary after commit 4ed805fc)
 !  P. Wautelet 26/02/2020: bugfix: add missing condition on OCOLD for NSEDIRH budget in LIMA case
 !  B. Vie      02/03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets
 !  P. Wautelet 25/03/2020: add missing ove_relax_grd
+!  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -183,6 +184,7 @@ USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI,   &
                             OHAIL=>LHAIL, OSCAV=>LSCAV, OMEYERS=>LMEYERS,&
                             ODEPOC=>LDEPOC, OPTSPLIT=>LPTSPLIT,          &
                             NMOD_CCN
+USE MODD_PARAM_n,    only: CELEC
 !
 USE MODE_ll
 USE MODE_IO_ll
@@ -787,19 +789,19 @@ IF (LBU_RTH) THEN
   IPROC=IPROC+1
   IF (HTURB /= 'NONE')     IPROACTV(4,IPROC) = NDISSHTH
   IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
-          IPROACTV(4,IPROC) = NNETURTH
+  IF ( HTURB /= 'NONE' .AND. (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'     &
+                               .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) &
+    IPROACTV(4,IPROC) = NNETURTH
   IPROC=IPROC+1
   IF ( HSCONV == 'EDKF' ) IPROACTV(4,IPROC) = NMAFLTH
   IPROC=IPROC+1
   IPROACTV(4,IPROC) = NADVTH
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(4,IPROC) = NNEADVTH
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(4,IPROC) = NNEADVTH
   IPROC=IPROC+1
-  IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') &
-          IPROACTV(4,IPROC) = NNEGATH
+  IF (HCLOUD /= 'NONE') IPROACTV(4,IPROC) = NNEGATH
   IPROC=IPROC+1
   IF (HCLOUD == 'LIMA') THEN
      IF (OPTSPLIT)                                           IPROACTV(4,IPROC) = NSEDITH 
@@ -900,9 +902,7 @@ IF (LBU_RTH) THEN
       HCLOUD == 'REVE')   IPROACTV(4,IPROC) = NCONDTH                     
       IPROC=IPROC+1
    END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2').OR.  (HCLOUD == 'KESS')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(4,IPROC) = NNECONTH
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(4,IPROC) = NNECONTH
 !
   YWORK2(4,1) = 'INIF_'
   YWORK2(4,2) = 'ENDF_'
@@ -1171,19 +1171,19 @@ IF (LBU_RRV) THEN
     END IF
   END IF 
   IPROC=IPROC+1 
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))) &
+  IF ( HTURB /= 'NONE' .AND. (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'     &
+                               .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) &
    IPROACTV(6,IPROC) = NNETURRV
   IPROC=IPROC+1 
   IF ( HSCONV == 'EDKF' ) IPROACTV(6,IPROC) = NMAFLRV
   IPROC=IPROC+1 
   IPROACTV(6,IPROC) = NADVRV
   IPROC=IPROC+1   
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(6,IPROC) = NNEADVRV
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(6,IPROC) = NNEADVRV
   IPROC=IPROC+1 
-  IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') &
-     IPROACTV(6,IPROC) = NNEGARV
+  IF (HCLOUD /= 'NONE') IPROACTV(6,IPROC) = NNEGARV
   IPROC=IPROC+1   
 
   IF (HCLOUD == 'LIMA') THEN
@@ -1233,9 +1233,7 @@ IF (LBU_RRV) THEN
           IPROACTV(6,IPROC) = NCDEPIRV 
   IPROC=IPROC+1
 END IF
-  IF ( (HCLOUD == 'KHKO' )  .OR.  (HCLOUD == 'C2R2') .OR.  (HCLOUD == 'KESS')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) &
-          IPROACTV(6,IPROC) = NNECONRV
+  IF ( HCLOUD /= 'NONE' .AND. CELEC == 'NONE' ) IPROACTV(6,IPROC) = NNECONRV
   IPROC=IPROC+1   
 
 !
@@ -1368,18 +1366,17 @@ IF (LBU_RRC) THEN
     END IF
   END IF 
   IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))) &
-      IPROACTV(7,IPROC) = NNETURRC
+  IF ( HTURB /= 'NONE' .AND. (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'     &
+                               .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) &
+    IPROACTV(7,IPROC) = NNETURRC
   IPROC=IPROC+1
   IPROACTV(7,IPROC) = NADVRC
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  &
-      IPROACTV(7,IPROC) = NNEADVRC
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(7,IPROC) = NNEADVRC
   IPROC=IPROC+1
-  IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') &
-     IPROACTV(7,IPROC)  = NNEGARC
+  IF (HCLOUD /= 'NONE') IPROACTV(7,IPROC)  = NNEGARC
   IPROC=IPROC+1
 
   IF (HCLOUD == 'LIMA') THEN
@@ -1483,9 +1480,7 @@ IF (LBU_RRC) THEN
       HCLOUD(1:3) == 'KES'.OR. HCLOUD == 'REVE') IPROACTV(7,IPROC) = NCONDRC
   IPROC=IPROC+1
 END IF
-  IF ( (HCLOUD == 'KHKO' )  .OR.  (HCLOUD == 'C2R2') .OR.  (HCLOUD == 'KESS')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) &
-     IPROACTV(7,IPROC) = NNECONRC
+  IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(7,IPROC) = NNECONRC
   IPROC=IPROC+1
 
 !
@@ -1645,13 +1640,14 @@ IF (LBU_RRR) THEN
     END IF
   END IF
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(8,IPROC) = NNETURRR
+  IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'LIMA' ) ) &
+    IPROACTV(8,IPROC) = NNETURRR
   IPROC=IPROC+1
   IPROACTV(8,IPROC) = NADVRR
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(8,IPROC) = NNEADVRR
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(8,IPROC) = NNEADVRR
   IPROC=IPROC+1
   IF ( HCLOUD /= 'NONE' ) IPROACTV(8,IPROC) = NNEGARR
   IPROC=IPROC+1
@@ -1743,9 +1739,7 @@ IF (LBU_RRR) THEN
        IPROACTV(8,IPROC) = NSEDIRR
      IPROC=IPROC+1
   END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(8,IPROC) = NNECONRR
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(8,IPROC) = NNECONRR
 !
   YWORK2(8,1) = 'INIF_'
   YWORK2(8,2) = 'ENDF_'
@@ -1901,14 +1895,14 @@ IF (LBU_RRI) THEN
     END IF
   END IF 
   IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
-          IPROACTV(9,IPROC) = NNETURRI
+  IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) &
+    IPROACTV(9,IPROC) = NNETURRI
   IPROC=IPROC+1
   IPROACTV(9,IPROC) = NADVRI
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(9,IPROC) = NNEADVRI
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(9,IPROC) = NNEADVRI
   IPROC=IPROC+1
   IF( HCLOUD /= 'NONE' ) IPROACTV(9,IPROC) = NNEGARI
   IPROC=IPROC+1
@@ -1988,9 +1982,7 @@ IF (LBU_RRI) THEN
              IPROACTV(9,IPROC) = NCDEPIRI
      IPROC=IPROC+1
   END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(9,IPROC) = NNECONRI
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(9,IPROC) = NNECONRI
 !
   YWORK2(9,1) = 'INIF_'
   YWORK2(9,2) = 'ENDF_'
@@ -2128,15 +2120,16 @@ IF (LBU_RRS) THEN
       IPROACTV(10,IPROC) = 3
     END IF
   END IF
-  IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
-          IPROACTV(10,IPROC) = NNETURRS
+!   IPROC=IPROC+1
+!   IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
+!        .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
+!           IPROACTV(10,IPROC) = NNETURRS
   IPROC=  IPROC+1
   IPROACTV(10,IPROC) = NADVRS
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(10,IPROC) = NNEADVRS
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(10,IPROC) = NNEADVRS
   IPROC=  IPROC+1
   IF( HCLOUD /= 'NONE' ) IPROACTV(10,IPROC) = NNEGARS
   IPROC=IPROC+1
@@ -2199,9 +2192,7 @@ IF (HCLOUD=='LIMA') THEN
           IPROACTV(10,IPROC) = NSEDIRS
   IPROC=IPROC+1
 END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(10,IPROC) = NNECONRS
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(10,IPROC) = NNECONRS
 !
   YWORK2(10,1) = 'INIF_'
   YWORK2(10,2) = 'ENDF_'
@@ -2216,8 +2207,8 @@ END IF
   YWORK2(10,IPROC) = 'DIF_'
   IPROC=  IPROC+1
   YWORK2(10,IPROC) = 'REL_'
-  IPROC=IPROC+1
-  YWORK2(10,IPROC) = 'NETUR_'
+!   IPROC=IPROC+1
+!   YWORK2(10,IPROC) = 'NETUR_'
   IPROC=  IPROC+1
   YWORK2(10,IPROC) = 'ADV_'
   IPROC=IPROC+1
@@ -2317,15 +2308,16 @@ IF (LBU_RRG) THEN
       IPROACTV(11,IPROC) = 3
     END IF
   END IF
-  IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
-          IPROACTV(11,IPROC) = NNETURRG
+!   IPROC=IPROC+1
+!   IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
+!        .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
+!           IPROACTV(11,IPROC) = NNETURRG
   IPROC=IPROC+1
   IPROACTV(11,IPROC) = NADVRG
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(11,IPROC) = NNEADVRG
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(11,IPROC) = NNEADVRG
   IPROC=IPROC+1
   IF( HCLOUD /= 'NONE'  ) IPROACTV(11,IPROC) = NNEGARG
   IPROC=IPROC+1
@@ -2393,9 +2385,7 @@ ELSE
           IPROACTV(11,IPROC) = NSEDIRG
   IPROC=IPROC+1
 END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(11,IPROC) = NNECONRG
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NNECONRG
 !
   YWORK2(11,1) = 'INIF_'
   YWORK2(11,2) = 'ENDF_'
@@ -2410,8 +2400,8 @@ END IF
   YWORK2(11,IPROC) = 'DIF_'
   IPROC=IPROC+1
   YWORK2(11,IPROC) = 'REL_'
-  IPROC=IPROC+1
-  YWORK2(11,IPROC) = 'NETUR_'
+!   IPROC=IPROC+1
+!   YWORK2(11,IPROC) = 'NETUR_'
   IPROC=IPROC+1
   YWORK2(11,IPROC) = 'ADV_'
   IPROC=IPROC+1
@@ -2529,15 +2519,16 @@ IF (LBU_RRH) THEN
       IPROACTV(12,IPROC) = 3
     END IF
   END IF
-  IPROC=IPROC+1
-  IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
-          IPROACTV(12,IPROC) = NNETURRH
+!   IPROC=IPROC+1
+!   IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') &
+!        .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) &
+!           IPROACTV(12,IPROC) = NNETURRH
   IPROC=IPROC+1
   IPROACTV(12,IPROC) = NADVRH
   IPROC=IPROC+1
-  IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))  IPROACTV(12,IPROC) = NNEADVRH
+  IF (      HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2'   &
+       .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) &
+    IPROACTV(12,IPROC) = NNEADVRH
   IPROC=IPROC+1
   IF( HCLOUD /= 'NONE' ) THEN
     IPROACTV(12,IPROC) = NNEGARH 
@@ -2578,9 +2569,7 @@ IF (LBU_RRH) THEN
      (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
           IPROACTV(12,IPROC) = NSEDIRH
   END IF
-      IF ((HCLOUD == 'KHKO')  .OR.  (HCLOUD == 'C2R2')&
-       .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))&
-          IPROACTV(12,IPROC) = NNECONRH
+      IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(12,IPROC) = NNECONRH
 !
   YWORK2(12,1) = 'INIF_'
   YWORK2(12,2) = 'ENDF_'
@@ -2595,8 +2584,8 @@ IF (LBU_RRH) THEN
   YWORK2(12,IPROC) = 'DIF_'
   IPROC=IPROC+1
   YWORK2(12,IPROC) = 'REL_'
-  IPROC=IPROC+1
-  YWORK2(12,IPROC) = 'NETUR_'
+!   IPROC=IPROC+1
+!   YWORK2(12,IPROC) = 'NETUR_'
   IPROC=IPROC+1
   YWORK2(12,IPROC) = 'ADV_'
   IPROC=IPROC+1
@@ -2697,7 +2686,7 @@ IF (LBU_RSV) THEN
     IPROC=IPROC+1
     IF ( HSCONV == 'EDKF' ) IPROACTV(12+JSV,IPROC)= NMAFLSV
     IPROC=IPROC+1
-    IF ( HCLOUD /= 'LIMA' ) IPROACTV(12+JSV,IPROC)= NADVSV
+    IF ( HCLOUD /= 'LIMA' .AND. HCLOUD /= 'C2R2' .AND. HCLOUD /= 'KHKO' ) IPROACTV(12+JSV,IPROC)= NADVSV
     IPROC=IPROC+1
 !
     YWORK2(12+JSV,1) = 'INIF_'
@@ -3014,6 +3003,15 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM
     ! C2R2 or KHKO Case
     SELECT CASE(JSV-NSV_C2R2BEG+1)
     CASE (1)                               ! Concentration of activated nuclei
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
      IF (.NOT. LSUPSAT) THEN
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_'
@@ -3022,7 +3020,19 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEVA_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
     CASE (2)                               ! Concentration of cloud droplets
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
      IF (.NOT. LSUPSAT) THEN
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_'
@@ -3047,7 +3057,19 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEVA_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
     CASE (3)                               ! Concentration of raindrops
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'AUTO_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
@@ -3065,6 +3087,9 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'SEDI_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
     END SELECT
     !
 ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN  
@@ -3082,7 +3107,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (OPTSPLIT .AND. OWARM .AND. ORAIN) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_'
@@ -3193,7 +3218,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (OPTSPLIT .AND. OWARM .AND. ORAIN) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_'
@@ -3291,7 +3316,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (OWARM .AND. OACTI .AND. NMOD_CCN.GE.1) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_'
@@ -3315,10 +3340,39 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       END IF
       !
    ELSE IF (JSV.GE.NSV_LIMA_CCN_ACTI .AND. JSV.LT.(NSV_LIMA_CCN_ACTI+NMOD_CCN)) THEN
+      ! Activated CCN conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
-      ! Activated CCN conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+
+   ELSE IF (JSV == NSV_LIMA_SCAVMASS) THEN
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
 
    ELSE IF (JSV == NSV_LIMA_NI) THEN
       ! Pristine ice crystals conc.
@@ -3333,7 +3387,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (OPTSPLIT .AND. OCOLD .AND. OSNOW) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_'
@@ -3434,7 +3488,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (OCOLD .AND. ONUCL .AND. (.NOT.OMEYERS)) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'HIND_'
@@ -3453,27 +3507,63 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
       END IF
       !
    ELSE IF (JSV.GE.NSV_LIMA_IFN_NUCL .AND. JSV.LT.(NSV_LIMA_IFN_NUCL+NMOD_IFN)) THEN
+      ! Nucleated IFN conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
-      ! Nucleated IFN conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
 
    ELSE IF (JSV.GE.NSV_LIMA_IMM_NUCL .AND. JSV.LT.(NSV_LIMA_IMM_NUCL+NMOD_IMM)) THEN
+      ! Nucleated IMM conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
-      ! Nucleated IMM conc.
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
 
    ELSE IF (JSV == NSV_LIMA_HOM_HAZE) THEN
       ! Homogeneous freezing of CCN
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (.NOT.OPTSPLIT .AND. OCOLD .AND. ONUCL .AND. OWARM .AND. OHHONI) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONH_'
          IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
       END IF
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = 1
 
    END IF
 
@@ -3483,6 +3573,9 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN
 ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
    SELECT CASE(JSV-NSV_ELECBEG+1)
    CASE(1)  ! volumetric charge of water vapor
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSQV
@@ -3501,6 +3594,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQV
    CASE(2)  ! volumetric charge of cloud droplets
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (LWARM) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR) = 'AUTO_'
@@ -3536,6 +3632,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQC
    CASE(3)  ! volumetric charge of rain drops
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       IF (LWARM) THEN
          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
          YWORK2(12+JSV,ILAST_PROC_NBR) = 'AUTO_'
@@ -3569,6 +3668,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQR
    CASE(4)  ! volumetric charge of ice crystals
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'AGGS_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NAGGSQI
@@ -3603,6 +3705,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQI
    CASE(5)  ! volumetric charge of snow
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSQS
@@ -3637,6 +3742,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQS
    CASE(6)  ! volumetric charge of graupel
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPG_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPGQG
@@ -3669,6 +3777,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQG
     CASE(7)  ! volumetric charge of hail
 ! add budget for hail volumetric charge
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
     END SELECT
 !
 ELSE IF (JSV >= NSV_CHEMBEG .AND. JSV <= NSV_CHEMEND) THEN
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 9ec614a5705c121d223dbdb23d7c49a45d0b3fe4..04789477baa173cb01094441b3218579d291e7ff 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -272,6 +272,7 @@ END MODULE MODI_RESOLVED_CLOUD
 !!      B.Vié 03/03/2020 : use DTHRAD instead of dT/dt in Smax diagnostic computation
 !  P. Wautelet 11/06/2020: bugfix: correct ZSVS array indices
 !  P. Wautelet 11/06/2020: bugfix: add "Non local correction for precipitating species" for ICE4
+!  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -635,25 +636,24 @@ SELECT CASE ( HCLOUD )
       PRS(:,:,:,2) = 0.0
     END WHERE
 !
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
-! CASE('C2R2','KHKO')                                 
-!   CALL GET_HALO(PRS(:,:,:,2))
-!   CALL GET_HALO(ZSVS(:,:,:,2))
-!   WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-!     ZSVS(:,:,:,1) = 0.0
-!   END WHERE
-!   DO JSV = 2, 3
-!     WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
-!       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
-!       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
-!            ZCPH(:,:,:) / ZEXN(:,:,:)
-!       PRS(:,:,:,JSV)  = 0.0
-!       ZSVS(:,:,:,JSV) = 0.0
-!     END WHERE
-!   ENDDO
-! Commented 03/2013 O.Thouron 
-! (at least necessary to be commented for supersaturation variable)
-!  ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
+!
+  CASE('C2R2','KHKO')
+    WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
+      ZSVS(:,:,:,1) = 0.0
+    END WHERE
+    DO JSV = 2, 3
+      WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
+            ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRS(:,:,:,JSV)  = 0.0
+        ZSVS(:,:,:,JSV) = 0.0
+      END WHERE
+    ENDDO
+!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
 !
   CASE('ICE3','ICE4')
@@ -690,6 +690,8 @@ SELECT CASE ( HCLOUD )
         PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:)
       END WHERE
     END IF
+!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('C3R5')
     WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
@@ -704,14 +706,13 @@ SELECT CASE ( HCLOUD )
         ZSVS(:,:,:,JSV) = 0.0
       END WHERE
     ENDDO
-    ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
 !   ice
     WHERE (PRS(:,:,:,4) < 0.)
       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / PEXNREF(:,:,:)
       PRS(:,:,:,4)  = 0.0
-      PSVS(:,:,:,4) = 0.0
+      ZSVS(:,:,:,4) = 0.0
     END WHERE
 !   cloud
     WHERE (PRS(:,:,:,2) < 0.)
@@ -719,11 +720,13 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / PEXNREF(:,:,:)
       PRS(:,:,:,2)  = 0.0
-      PSVS(:,:,:,2) = 0.0
+      ZSVS(:,:,:,2) = 0.0
     END WHERE
-    PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) )
 !
-   CASE('LIMA')   
+    ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
+!
+   CASE('LIMA')
 ! Correction where rc<0 or Nc<0
       IF (OWARM) THEN
          WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) < YCTMIN(2)/PTSTEP)
@@ -756,7 +759,7 @@ SELECT CASE ( HCLOUD )
       END IF
 !
      ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
-     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
+     PRS(:,:,:,:)  = MAX( 0.0,PRS(:,:,:,:) )
 !
 END SELECT
 !
@@ -764,35 +767,31 @@ END SELECT
 !*       3.3  STORE THE BUDGET TERMS
 !            ----------------------
 !
-IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
- IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
-END IF
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
 IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR')
 IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI')
 IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS')
 IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG')
 IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
-IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV')
-   IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV')
-   IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV')
-   IF (NMOD_CCN.GE.1) THEN
-      DO JL=1, NMOD_CCN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-NSV_LIMA_BEG)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV')
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JL=1, NMOD_IFN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-NSV_LIMA_BEG)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV')
-      END DO
-   END IF
+
+IF (LBUDGET_SV .AND. (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO')) THEN
+  DO JSV = 1, 3
+    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
+  END DO
+END IF
+IF (LBUDGET_SV .AND. HCLOUD == 'C3R5') THEN
+  DO JSV = 1, 4
+    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
+  END DO
+END IF
+IF (LBUDGET_SV .AND. HCLOUD == 'LIMA') THEN
+  DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
+    CALL BUDGET ( ZSVS(:,:,:,JSV-NSV_LIMA_BEG+1),12+JSV,'NEGA_BU_RSV')
+  END DO
 END IF
 !
-
 !*       3.4    Limitations of Na and Nc to the CCN max number concentration
 !
 ! Commented by O.Thouron 03/2013
@@ -1148,26 +1147,7 @@ SELECT CASE ( HCLOUD )
       PRS(:,:,:,2) = 0.0
     END WHERE
 !
-!
-! CASE('C2R2','KHKO')                                 
-!   CALL GET_HALO(PRS(:,:,:,2))
-!   CALL GET_HALO(ZSVS(:,:,:,2))
-!   WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-!     ZSVS(:,:,:,1) = 0.0
-!   END WHERE
-!   DO JSV = 2, 3
-!     WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
-!       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
-!       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
-!            ZCPH(:,:,:) / ZEXN(:,:,:)
-!       PRS(:,:,:,JSV)  = 0.0
-!       ZSVS(:,:,:,JSV) = 0.0
-!     END WHERE
-!   ENDDO
-! Commented 03/2013 O.Thouron 
-! (at least necessary to be commented for supersaturation variable)
-!  ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
-!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
   CASE('ICE3','ICE4')
     WHERE (PRS(:,:,:,4) < 0.)
@@ -1203,6 +1183,8 @@ SELECT CASE ( HCLOUD )
         PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:)
       END WHERE
     END IF
+!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('C2R2','KHKO')
     WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
@@ -1217,7 +1199,9 @@ SELECT CASE ( HCLOUD )
         ZSVS(:,:,:,JSV) = 0.0
       END WHERE
     ENDDO
-!      
+!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
+!
    CASE('C3R5')
     WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
       ZSVS(:,:,:,1) = 0.0
@@ -1231,14 +1215,13 @@ SELECT CASE ( HCLOUD )
         ZSVS(:,:,:,JSV) = 0.0
       END WHERE
     ENDDO
-    ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
 !   ice
     WHERE (PRS(:,:,:,4) < 0.)
       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / PEXNREF(:,:,:)
       PRS(:,:,:,4)  = 0.0
-      PSVS(:,:,:,4) = 0.0
+      ZSVS(:,:,:,4) = 0.0
     END WHERE
 !   cloud
     WHERE (PRS(:,:,:,2) < 0.)
@@ -1246,9 +1229,10 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / PEXNREF(:,:,:)
       PRS(:,:,:,2)  = 0.0
-      PSVS(:,:,:,2) = 0.0
+      ZSVS(:,:,:,2) = 0.0
     END WHERE
-    PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) )
+!
+    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('LIMA')   
 ! Correction where rc<0 or Nc<0
@@ -1283,7 +1267,7 @@ SELECT CASE ( HCLOUD )
       END IF
 !
      ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
-     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
+     PRS(:,:,:,:)  = MAX( 0.0,PRS (:,:,:,:) )
 !
 END SELECT
 !
@@ -1299,22 +1283,21 @@ IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NECON_BU_RRI')
 IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NECON_BU_RRS')
 IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NECON_BU_RRG')
 IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NECON_BU_RRH')
-IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NECON_BU_RSV')
-   IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NECON_BU_RSV')
-   IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NECON_BU_RSV')
-   IF (NMOD_CCN.GE.1) THEN
-      DO JL=1, NMOD_CCN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-NSV_LIMA_BEG)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NECON_BU_RSV')
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JL=1, NMOD_IFN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-NSV_LIMA_BEG)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NECON_BU_RSV')
-      END DO
-   END IF
+
+IF (LBUDGET_SV .AND. (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO')) THEN
+  DO JSV = 1, 3
+    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
+  END DO
+END IF
+IF (LBUDGET_SV .AND. HCLOUD == 'C3R5') THEN
+  DO JSV = 1, 4
+    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
+  END DO
+END IF
+IF (LBUDGET_SV .AND. HCLOUD == 'LIMA') THEN
+  DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
+    CALL BUDGET ( ZSVS(:,:,:,JSV-NSV_LIMA_BEG+1),12+JSV,'NECON_BU_RSV')
+  END DO
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index ac6bbfa3460d261f147d7d87ea8d352ab293cb55..b249ece8932469fe68004dab31ce9a5e81f56636 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -342,6 +342,7 @@ END MODULE MODI_TURB
 !!                     01/2018 (Q.Rodier) Introduction of RM17
 !!                  03/2020 (B.Vie) : LIMA negativity checks after turbulence, advection and microphysics budgets 
 !  P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices
+!  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -1120,6 +1121,22 @@ IF ( KRRL >= 1 ) THEN
 END IF
 !
 SELECT CASE ( HCLOUD )
+  CASE('KESS')
+    WHERE (PRRS(:,:,:,2) < 0.)
+      ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+      ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
+      ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
+      ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+      PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXNE(:,:,:)
+      PRRS(:,:,:,2) = 0.0
+    END WHERE
+!
+    IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
+    IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
+
   CASE('ICE3','ICE4')
      ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
      ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
@@ -1159,6 +1176,11 @@ SELECT CASE ( HCLOUD )
         PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:)
       END WHERE
     END IF
+!
+    IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
+    IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
+    IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NETUR_BU_RRI')
 !
   CASE('C2R2','KHKO')
      ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
@@ -1178,8 +1200,18 @@ SELECT CASE ( HCLOUD )
            PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
         END WHERE
      END DO
-     !
-   CASE('LIMA')   
+!
+    IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
+    IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), 8,'NETUR_BU_RRR')
+    IF (LBUDGET_SV) THEN
+      DO JSV = 1, 3
+        CALL BUDGET (PRSVS(:,:,:,NSV_C2R2BEG-1+JSV),12+NSV_C2R2BEG-1+JSV,'NETUR_BU_RSV')
+      END DO
+    END IF
+!
+   CASE('LIMA')
      ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
      ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
      ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
@@ -1217,36 +1249,20 @@ SELECT CASE ( HCLOUD )
       END IF
 !
       PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0, PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
-      PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+      !Commented out for B. Vie 15/05/2020 PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+!
+    IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
+    IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), 8,'NETUR_BU_RRR')
+    IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NETUR_BU_RRI')
+    IF (LBUDGET_SV) THEN
+      DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
+        CALL BUDGET (PRSVS(:,:,:,JSV),12+JSV,'NETUR_BU_RSV')
+      END DO
+    END IF
 !
 END SELECT
-!
-IF ((HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'LIMA') ) THEN
-  IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), 8,'NETUR_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NETUR_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'NETUR_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'NETUR_BU_RRG')
-  IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'NETUR_BU_RRH')
-END IF
-IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (LWARM) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NC),12+NSV_LIMA_NC,'NETUR_BU_RSV')
-   IF (LWARM.AND.LRAIN) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NR),12+NSV_LIMA_NR,'NETUR_BU_RSV')
-   IF (LCOLD) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NI),12+NSV_LIMA_NI,'NETUR_BU_RSV')
-   IF (NMOD_CCN.GE.1) THEN
-      DO JI=1, NMOD_CCN
-         CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JI-1),12+NSV_LIMA_CCN_FREE+JI-1,'NETUR_BU_RSV') 
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JI=1, NMOD_IFN
-         CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JI-1),12+NSV_LIMA_IFN_FREE+JI-1,'NETUR_BU_RSV') 
-      END DO
-   END IF
-END IF
-
 !
 !----------------------------------------------------------------------------
 !