diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 119491566289ecbbd42c208f42590b3f467a8a95..6362da54eed2f2a43a6d473b02807a9f99114558 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -139,7 +139,8 @@ 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
+!  P. Wautelet + Benoît Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
+!  P. Wautelet + Benoît Vié 23/06/2020: improve removal of negative scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -694,39 +695,47 @@ END DO
 !
 SELECT CASE ( HCLOUD )
   CASE('KESS')
-    WHERE (PRRS(:,:,:,2) < 0.)
+    ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+    DO JR=2,SIZE(PRRS,4)
+      WHERE (PRRS(:,:,:,JR) < 0.)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JR)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JR) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRRS(:,:,:,JR) = 0.0
+      END WHERE
+    END DO
+    WHERE ((PRRS(:,:,:,1) <0.) .AND. (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
+      PRRS(:,:,:,2) = 0.
     END WHERE
-!
-    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
 !
   CASE('ICE3','ICE4')
-     ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-     ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
-    WHERE (PRRS(:,:,:,4) < 0.)
-      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
-      PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
+    ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+    DO JR=4,SIZE(PRRS,4)
+      WHERE (PRRS(:,:,:,JR) < 0.)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JR)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JR) * ZLS(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRRS(:,:,:,4) = 0.
-    END WHERE
-!
-!   cloud
-    WHERE (PRRS(:,:,:,2) < 0.)
-      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
-      PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+        PRRS(:,:,:,JR) = 0.
+      END WHERE
+    END DO
+    DO JR=2,3
+      WHERE (PRRS(:,:,:,JR) < 0.)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JR)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JR) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRRS(:,:,:,2) = 0.
-    END WHERE
+        PRRS(:,:,:,JR) = 0.
+      END WHERE
+    END DO
 !
 ! if rc or ri are positive, we can correct negative rv
 !   cloud
@@ -747,68 +756,96 @@ SELECT CASE ( HCLOUD )
       END WHERE
     END IF
 !
-    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
 !
   CASE('C2R2','KHKO')
-     ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-     ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
-     WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
-        PRSVS(:,:,:,NSV_C2R2BEG) = 0.0
-     END WHERE
-     DO JSV = 2, 3
-        WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
-           PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV)
-           PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) /  &
+    ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+    WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PRSVS(:,:,:,NSV_C2R2BEG) = 0.0
+    END WHERE
+    DO JSV = 2, 3
+      WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) /  &
                 ZCPH(:,:,:) / ZEXN(:,:,:)
-           PRRS(:,:,:,JSV)  = 0.0
-           PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
-        END WHERE
-     END DO
+        PRRS(:,:,:,JSV)  = 0.0
+        PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
+      END WHERE
+    END DO
+    WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) )
+      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+      PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+      PRRS(:,:,:,2) = 0.
+      PRSVS(:,:,:,NSV_C2R2BEG+1) = 0.
+    END WHERE
 !
-    PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
 !
-   CASE('LIMA')
-     ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-     ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+  CASE('LIMA')
+    ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
 ! Correction where rc<0 or Nc<0
-      IF (LWARM) THEN
-         WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
-            PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+    IF (LWARM) THEN
+      WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRRS(:,:,:,2)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
-         END WHERE
-      END IF
+        PRRS(:,:,:,2)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+      WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) )
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRRS(:,:,:,2) = 0.
+        PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+    END IF
 ! Correction where rr<0 or Nr<0
-      IF (LWARM .AND. LRAIN) THEN
-         WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3)
-            PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) /  &
+    IF (LWARM .AND. LRAIN) THEN
+      WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRRS(:,:,:,3)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NR) = 0.0
-         END WHERE
-      END IF
+        PRRS(:,:,:,3)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NR) = 0.0
+      END WHERE
+    END IF
 ! Correction where ri<0 or Ni<0
-      IF (LCOLD) THEN
-         WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
-            PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
+    IF (LCOLD) THEN
+      WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
+        PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRRS(:,:,:,4)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NI) = 0.0
-         END WHERE
+        PRRS(:,:,:,4)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NI) = 0.0
+      END WHERE
+      DO JR=5,SIZE(PRRS,4)
+        WHERE (PRRS(:,:,:,JR) < 0.)
+          PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JR)
+          PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JR) * ZLS(:,:,:) /  &
+                    ZCPH(:,:,:) / ZEXN(:,:,:)
+          PRRS(:,:,:,JR) = 0.
+        END WHERE
+      END DO
+      IF(KRR > 3) THEN
+        WHERE ((PRRS(:,:,:,1) < 0.).AND.(PRRS(:,:,:,4) > 0.))
+          ZCOR(:,:,:)=MIN(-PRRS(:,:,:,1),PRRS(:,:,:,4))
+          PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZCOR(:,:,:)
+          PRTHS(:,:,:) = PRTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) /  &
+             ZCPH(:,:,:) / ZEXN(:,:,:)
+          PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:)
+        END WHERE
       END IF
+    END IF
 !
-      PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0, PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
-      PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+    PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0, PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
 !
 END SELECT
 !
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 34e7b5c6b8ffd328d5b14d22ed35213a5e311915..8ae441ee030b99ec771f5cac69d440ad9fdb5bbb 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -275,6 +275,7 @@ END MODULE MODI_RESOLVED_CLOUD
 !  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !  P. Wautelet + Benoit Vié 18/06/2020: improve removal of negative scalar variables: use ZEXN instead of PEXNREF
 !  P. Wautelet 23/06/2020: remove ZSVS and ZSVT to improve code readability
+!  P. Wautelet + Benoît Vié 23/06/2020: improve removal of negative scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -629,13 +630,18 @@ SELECT CASE ( HCLOUD )
            ZCPH(:,:,:) / ZEXN(:,:,:)
       PRS(:,:,:,2) = 0.0
     END WHERE
+    WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
+      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+      PRS(:,:,:,2) = 0.
+    END WHERE
 !
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
 !
   CASE('C2R2','KHKO')
     WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
-      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
+      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.0
     END WHERE
     DO JSV = 2, 3
       WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
@@ -646,8 +652,14 @@ SELECT CASE ( HCLOUD )
         PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
+    WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
+      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+      PRS(:,:,:,2) = 0.
+      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.
+    END WHERE
 !
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
 !
   CASE('ICE3','ICE4')
@@ -684,76 +696,59 @@ SELECT CASE ( HCLOUD )
         PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:)
       END WHERE
     END IF
-!
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
-!
-   CASE('C3R5')
-    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
-      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
-    END WHERE
-    DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
-        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
-        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
-             ZCPH(:,:,:) / ZEXN(:,:,:)
-        PRS(:,:,:,JSV)  = 0.0
-        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
-      END WHERE
-    ENDDO
-!   ice
-    WHERE (PRS(:,:,:,4) < 0.)
-      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
-           ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,4)  = 0.0
-      PSVS(:,:,:,NSV_C2R2BEG+3) = 0.0
-    END WHERE
-!   cloud
-    WHERE (PRS(:,:,:,2) < 0.)
-      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
-      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
-           ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,2)  = 0.0
-      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.0
-    END WHERE
-!
-    PSVS(:,:,:,ISVBEG:ISVEND) = MAX( 0.0,PSVS(:,:,:,ISVBEG:ISVEND) )
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('LIMA')
 ! Correction where rc<0 or Nc<0
-      IF (OWARM) THEN
-         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+    IF (OWARM) THEN
+      WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,2)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NC) = 0.0
-         END WHERE
-      END IF
+        PRS(:,:,:,2)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+      WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRS(:,:,:,2) = 0.
+        PSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+    END IF
 ! Correction where rr<0 or Nr<0
-      IF (OWARM .AND. ORAIN) THEN
-         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
+    IF (OWARM .AND. ORAIN) THEN
+      WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,3)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NR) = 0.0
-         END WHERE
-      END IF
+        PRS(:,:,:,3)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NR) = 0.0
+      END WHERE
+    END IF
 ! Correction where ri<0 or Ni<0
-      IF (LCOLD) THEN
-         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
+    IF (LCOLD) THEN
+      WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,4)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NI) = 0.0
-         END WHERE
+        PRS(:,:,:,4)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NI) = 0.0
+      END WHERE
+      IF(KRR > 3) THEN
+        WHERE ((PRS(:,:,:,1) < 0.).AND.(PRS(:,:,:,4) > 0.))
+          ZCOR(:,:,:)=MIN(-PRS(:,:,:,1),PRS(:,:,:,4))
+          PRS(:,:,:,1) = PRS(:,:,:,1) + ZCOR(:,:,:)
+          PTHS(:,:,:) = PTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) /  &
+             ZCPH(:,:,:) / ZEXN(:,:,:)
+          PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:)
+        END WHERE
       END IF
+    END IF
+! if rc or ri are positive, we can correct negative rv
+!   cloud
+!   ice
 !
-     PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
-     PRS(:,:,:,:)  = MAX( 0.0,PRS(:,:,:,:) )
+    PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
 !
 END SELECT
 !
@@ -1138,30 +1133,41 @@ ENDIF
 !
 SELECT CASE ( HCLOUD )
   CASE('KESS')
-    WHERE (PRS(:,:,:,2) < 0.)
+    DO JRR=2,SIZE(PRS,4)
+      WHERE (PRS(:,:,:,JRR) < 0.)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JRR)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JRR) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRS(:,:,:,JRR) = 0.0
+      END WHERE
+    END DO
+    WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,2) = 0.0
+      PRS(:,:,:,2) = 0.
     END WHERE
 !
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
   CASE('ICE3','ICE4')
-    WHERE (PRS(:,:,:,4) < 0.)
-      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
+    DO JRR=4,SIZE(PRS,4)
+      WHERE (PRS(:,:,:,JRR) < 0.)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JRR)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JRR) * ZLS(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,4) = 0.
-    END WHERE
+        PRS(:,:,:,JRR) = 0.
+      END WHERE
+    END DO
 !
 !   cloud
-    WHERE (PRS(:,:,:,2) < 0.)
-      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
-      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+    DO JRR=2,3
+      WHERE (PRS(:,:,:,JRR) < 0.)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JRR)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JRR) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,2) = 0.
-    END WHERE
+        PRS(:,:,:,JRR) = 0.
+      END WHERE
+    END DO
 !
 ! if rc or ri are positive, we can correct negative rv
 !   cloud
@@ -1182,25 +1188,8 @@ SELECT CASE ( HCLOUD )
       END WHERE
     END IF
 !
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
-!
-   CASE('C2R2','KHKO')
-    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
-      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
-    END WHERE
-    DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
-        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
-        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
-             ZCPH(:,:,:) / ZEXN(:,:,:)
-        PRS(:,:,:,JSV)  = 0.0
-        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
-      END WHERE
-    ENDDO
-!
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
-   CASE('C3R5')
+  CASE('C2R2','KHKO')
     WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
       PSVS(:,:,:,NSV_C2R2BEG) = 0.0
     END WHERE
@@ -1213,59 +1202,71 @@ SELECT CASE ( HCLOUD )
         PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
-!   ice
-    WHERE (PRS(:,:,:,4) < 0.)
-      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
-           ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,4)  = 0.0
-      PSVS(:,:,:,NSV_C2R2BEG+3) = 0.0
-    END WHERE
-!   cloud
-    WHERE (PRS(:,:,:,2) < 0.)
+    WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
       PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
-      PRS(:,:,:,2)  = 0.0
-      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.0
+      PRS(:,:,:,2) = 0.
+      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.
     END WHERE
 !
-    PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
-!
-   CASE('LIMA')   
+  CASE('LIMA')
 ! Correction where rc<0 or Nc<0
-      IF (OWARM) THEN
-         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+    IF (OWARM) THEN
+      WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,2)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NC) = 0.0
-         END WHERE
-      END IF
+        PRS(:,:,:,2)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+      WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) )
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXN(:,:,:)
+        PRS(:,:,:,2) = 0.
+        PSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+    END IF
 ! Correction where rr<0 or Nr<0
-      IF (OWARM .AND. ORAIN) THEN
-         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
+    IF (OWARM .AND. ORAIN) THEN
+      WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,3)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NR) = 0.0
-         END WHERE
-      END IF
+        PRS(:,:,:,3)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NR) = 0.0
+      END WHERE
+    END IF
 ! Correction where ri<0 or Ni<0
-      IF (LCOLD) THEN
-         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
-            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
+    IF (LCOLD) THEN
+      WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
+        PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
+        PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
-            PRS(:,:,:,4)  = 0.0
-            PSVS(:,:,:,NSV_LIMA_NI) = 0.0
-         END WHERE
+        PRS(:,:,:,4)  = 0.0
+        PSVS(:,:,:,NSV_LIMA_NI) = 0.0
+      END WHERE
+      DO JRR=5,SIZE(PRS,4)
+        WHERE (PRS(:,:,:,JRR) < 0.)
+          PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JRR)
+          PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JRR) * ZLS(:,:,:) /  &
+                    ZCPH(:,:,:) / ZEXN(:,:,:)
+          PRS(:,:,:,JRR) = 0.
+        END WHERE
+      END DO
+      IF(KRR > 3) THEN
+        WHERE ((PRS(:,:,:,1) < 0.).AND.(PRS(:,:,:,4) > 0.))
+          ZCOR(:,:,:)=MIN(-PRS(:,:,:,1),PRS(:,:,:,4))
+          PRS(:,:,:,1) = PRS(:,:,:,1) + ZCOR(:,:,:)
+          PTHS(:,:,:) = PTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) /  &
+              ZCPH(:,:,:) / ZEXN(:,:,:)
+          PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:)
+        END WHERE
       END IF
+    END IF
 !
-     PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
-     PRS(:,:,:,:)  = MAX( 0.0,PRS (:,:,:,:) )
+    PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
 !
 END SELECT
 !
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index b249ece8932469fe68004dab31ce9a5e81f56636..500878f86c86fa96a0a8986386daac57e7eff318 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -343,6 +343,7 @@ END MODULE MODI_TURB
 !!                  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
+!  P. Wautelet + Benoît Vié 23/06/2020: improve removal of negative scalar variables
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -1122,27 +1123,33 @@ END IF
 !
 SELECT CASE ( HCLOUD )
   CASE('KESS')
+    ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
     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
+    WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) )
+      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+      PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXNE(:,:,:)
+      PRRS(:,:,:,2) = 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(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+    ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
     WHERE (PRRS(:,:,:,4) < 0.)
       PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
       PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
@@ -1183,23 +1190,30 @@ SELECT CASE ( HCLOUD )
     IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NETUR_BU_RRI')
 !
   CASE('C2R2','KHKO')
-     ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-     ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
-     WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
-        PRSVS(:,:,:,NSV_C2R2BEG) = 0.0
-     END WHERE
-     DO JSV = 2, 3
-        WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
-           PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV)
-           PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) /  &
+    ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+    WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PRSVS(:,:,:,NSV_C2R2BEG) = 0.0
+    END WHERE
+    DO JSV = 2, 3
+      WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV)
+        PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) /  &
                 ZCPH(:,:,:) / ZEXNE(:,:,:)
-           PRRS(:,:,:,JSV)  = 0.0
-           PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
-        END WHERE
-     END DO
+        PRRS(:,:,:,JSV)  = 0.0
+        PRSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
+      END WHERE
+    END DO
+    WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) )
+      PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+      PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / ZEXNE(:,:,:)
+      PRRS(:,:,:,2) = 0.
+      PRSVS(:,:,:,NSV_C2R2BEG+1) = 0.
+    END WHERE
 !
     IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
     IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
@@ -1211,45 +1225,60 @@ SELECT CASE ( HCLOUD )
       END DO
     END IF
 !
-   CASE('LIMA')
-     ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-     ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
-     ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
-     ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
-     ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+  CASE('LIMA')
+    ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+    ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
+    ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
+    ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
+    ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
 ! Correction where rc<0 or Nc<0
-      IF (LWARM) THEN
-         WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
-            PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+    IF (LWARM) THEN
+      WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+        PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXNE(:,:,:)
-            PRRS(:,:,:,2)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
-         END WHERE
-      END IF
+        PRRS(:,:,:,2)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+      WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) )
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
+        PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) /  &
+            ZCPH(:,:,:) / ZEXNE(:,:,:)
+        PRRS(:,:,:,2) = 0.
+        PRSVS(:,:,:,NSV_LIMA_NC) = 0.0
+      END WHERE
+    END IF
 ! Correction where rr<0 or Nr<0
-      IF (LWARM .AND. LRAIN) THEN
-         WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3)
-            PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) /  &
+    IF (LWARM .AND. LRAIN) THEN
+      WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3)
+        PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXNE(:,:,:)
-            PRRS(:,:,:,3)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NR) = 0.0
-         END WHERE
-      END IF
+        PRRS(:,:,:,3)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NR) = 0.0
+      END WHERE
+    END IF
 ! Correction where ri<0 or Ni<0
-      IF (LCOLD) THEN
-         WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP)
-            PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
-            PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
+    IF (LCOLD) THEN
+      WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP)
+        PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4)
+        PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXNE(:,:,:)
-            PRRS(:,:,:,4)  = 0.0
-            PRSVS(:,:,:,NSV_LIMA_NI) = 0.0
-         END WHERE
+        PRRS(:,:,:,4)  = 0.0
+        PRSVS(:,:,:,NSV_LIMA_NI) = 0.0
+      END WHERE
+      IF(KRR > 3) THEN
+        WHERE ((PRRS(:,:,:,1) < 0.).AND.(PRRS(:,:,:,4) > 0.))
+          ZCOR(:,:,:)=MIN(-PRRS(:,:,:,1),PRRS(:,:,:,4))
+          PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZCOR(:,:,:)
+          PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) /  &
+              ZCPH(:,:,:) / ZEXNE(:,:,:)
+          PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:)
+        END WHERE
       END IF
+    END IF
 !
-      PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0, PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
-      !Commented out for B. Vie 15/05/2020 PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) )
+    PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0, PRSVS(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
 !
     IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
     IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')