diff --git a/src/common/micro/modd_fields_address.F90 b/src/common/micro/modd_fields_address.F90
index 322b9957ea830dde6c34b2108f5a385d036deb16..45786b5a345ddb2ad6ccc02514a1d9cc1fde73dd 100644
--- a/src/common/micro/modd_fields_address.F90
+++ b/src/common/micro/modd_fields_address.F90
@@ -44,4 +44,50 @@ INTEGER, PARAMETER :: & ! pointer of fields in microphysic species arrays :
       & IRG=6,     & ! Graupel
       & IRH=7        ! Hail
 !
+! Pointers for tendency arrays
+! Tendencies are computed either directly as a tendency or as a mixing ratio change that is transformed, afterwards, in a tendency
+! The second type is suffixed by _MR
+! Some final tendencies can have two contributions (one from a tendency, one from a mixing ratio change).
+! In the following list, order matters:
+! - first are the normal tendencies directly computed as tendencies
+! - second are the tendencies computed only from a mixing ratio change
+! - third are the indexes used to designate the mising ratio change part of double-contribution tendencies
+INTEGER, PARAMETER :: IBUNUM=47,    & ! Total number
+                      IBUNUM_MR=3,  & ! Number of tendencies computed only from a mixing ratio change
+                      IBUNUM_EXTRA=2  ! Extra terms
+INTEGER, PARAMETER :: &
+                    !normal tendencies directly computed as tendencies
+                    & IRCHONI=1,     & ! Homogeneous nucleation
+                    & IRVDEPS=2,     & ! Deposition on r_s,
+                    & IRIAGGS=3,     & ! Aggregation on r_s
+                    & IRIAUTS=4,     & ! Autoconversion of r_i for r_s production
+                    & IRVDEPG=5,     & ! Deposition on r_g
+                    & IRCAUTR=6,     & ! Autoconversion of r_c for r_r production
+                    & IRCACCR=7,     & ! Accretion of r_c for r_r production
+                    & IRREVAV=8,     & ! Evaporation of r_r
+                    & IRCBERI=9,     & ! Bergeron-Findeisen effect
+                    & IRHMLTR=10,    & ! Melting of the hailstones
+                    & IRSMLTG=11,    & ! Conversion-Melting of the aggregates
+                    & IRCMLTSR=12,   & ! Cloud droplet collection onto aggregates by positive temperature
+                    & IRRACCSS=13, IRRACCSG=14, IRSACCRG=15, & ! Rain accretion onto the aggregates
+                    & IRCRIMSS=16, IRCRIMSG=17, IRSRIMCG=18, & ! Cloud droplet riming of the aggregates
+                    & IRICFRRG=19, IRRCFRIG=20, IRICFRR=21,  & ! Rain contact freezing
+                    & IRCWETG=22,  IRIWETG=23,  IRRWETG=24,  IRSWETG=25, &  ! Graupel wet growth
+                    & IRCDRYG=26,  IRIDRYG=27,  IRRDRYG=28,  IRSDRYG=29, &  ! Graupel dry growth
+                    & IRWETGH=30,    & ! Conversion of graupel into hail
+                    & IRGMLTR=31,    & ! Melting of the graupel
+                    & IRCWETH=32,  IRIWETH=33,  IRSWETH=34,  IRGWETH=35,  IRRWETH=36, & ! Dry growth of hailstone
+                    & IRCDRYH=37,  IRIDRYH=38,  IRSDRYH=39,  IRRDRYH=40,  IRGDRYH=41, & ! Wet growth of hailstone
+                    & IRDRYHG=42,    &
+
+                    !tendencies computed only with a mixing ratio change
+                    & IRVHENI_MR=43, & ! heterogeneous nucleation mixing ratio change
+                    & IRRHONG_MR=44, & ! Spontaneous freezing mixing ratio change
+                    & IRIMLTC_MR=45, & ! Cloud ice melting mixing ratio change
+
+                    !Extra term computed as a mixing ratio change, to be added to other term
+                    & IRSRIMCG_MR=46,& ! Cloud droplet riming of the aggregates
+                    & IRWETGH_MR=47    ! Conversion of graupel into hail
+INTEGER, PARAMETER, DIMENSION(IBUNUM-IBUNUM_EXTRA+1:IBUNUM) :: IBUEXTRAIND=(/18, 30/)
+!
 END MODULE MODD_FIELDS_ADDRESS
diff --git a/src/common/micro/mode_ice4_budgets.F90 b/src/common/micro/mode_ice4_budgets.F90
new file mode 100644
index 0000000000000000000000000000000000000000..851e9e7d54ab5bf3c70d3c06db5fea23743e1e54
--- /dev/null
+++ b/src/common/micro/mode_ice4_budgets.F90
@@ -0,0 +1,434 @@
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     ######spl
+MODULE MODE_ICE4_BUDGETS
+IMPLICIT NONE
+CONTAINS
+SUBROUTINE ICE4_BUDGETS(D, PARAMI, BUCONF, KSIZE, KPROMA, PTSTEP, KRR, K1, K2, &
+                        PLVFACT, PLSFACT, PRHODJ, &
+                        PRVHENI, PBU_PACK, &
+                        TBUDGETS, KBUDGETS)
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+USE MODD_BUDGET,     ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, &
+                           NBUDGET_RI, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
+USE MODD_PARAM_ICE,  ONLY: PARAM_ICE_t
+!
+USE MODD_FIELDS_ADDRESS ! index number for prognostic (theta and mixing ratios) and budgets
+!
+USE MODE_BUDGET,     ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
+!
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+!
+!
+TYPE(DIMPHYEX_t),                            INTENT(IN)    :: D
+TYPE(PARAM_ICE_t),                           INTENT(IN)    :: PARAMI
+TYPE(TBUDGETCONF_t),                         INTENT(IN)    :: BUCONF
+INTEGER,                                     INTENT(IN)    :: KSIZE
+INTEGER,                                     INTENT(IN)    :: KPROMA
+REAL,                                        INTENT(IN)    :: PTSTEP
+INTEGER,                                     INTENT(IN)    :: KRR
+INTEGER, DIMENSION(KPROMA),                  INTENT(IN)    :: K1
+INTEGER, DIMENSION(KPROMA),                  INTENT(IN)    :: K2
+REAL, DIMENSION(D%NIJT, D%NKT),              INTENT(IN)    :: PLVFACT
+REAL, DIMENSION(D%NIJT, D%NKT),              INTENT(IN)    :: PLSFACT
+REAL, DIMENSION(D%NIJT, D%NKT),              INTENT(IN)    :: PRHODJ
+REAL, DIMENSION(D%NIJT, D%NKT),              INTENT(IN)    :: PRVHENI
+REAL, DIMENSION(KSIZE, IBUNUM-IBUNUM_EXTRA), INTENT(IN)    :: PBU_PACK
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS),      INTENT(INOUT) :: TBUDGETS
+INTEGER,                                     INTENT(IN)    :: KBUDGETS
+!
+!
+!*       0.2   Declarations of local variables :
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+INTEGER :: JIJ, JK, JL
+INTEGER :: IKTB, IKTE, IKB, IIJB, IIJE
+REAL,    DIMENSION(D%NIJT, D%NKT) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 ! work array
+REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_DIFF
+REAL :: ZINV_TSTEP
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('ICE4_BUDGETS', 0, ZHOOK_HANDLE)
+!
+IKTB=D%NKTB
+IKTE=D%NKTE
+IKB=D%NKB
+IIJB=D%NIJB
+IIJE=D%NIJE
+ZINV_TSTEP=1./PTSTEP
+!
+IF (BUCONF%LBUDGET_TH) THEN
+  ZZ_DIFF(:,:)=0.
+  DO JK = IKTB, IKTE
+    DO JIJ = IIJB, IIJE
+      ZZ_DIFF(JIJ, JK) = PLSFACT(JIJ, JK) - PLVFACT(JIJ, JK)
+    ENDDO
+  ENDDO
+END IF
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVHENI_MR) * ZINV_TSTEP
+END DO
+DO JK = IKTB, IKTE
+  DO JIJ = IIJB, IIJE
+    ZW1(JIJ,JK)=ZW1(JIJ,JK)+PRVHENI(JIJ,JK)
+  ENDDO
+ENDDO
+#ifdef REPRO48
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU',  ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HENU',  ZW1(:, :)              *PRHODJ(:, :))
+#else
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIN',  ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIN', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIN',  ZW1(:, :)              *PRHODJ(:, :))
+#endif
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCHONI) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HON',  ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HON', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HON',  ZW1(:, :)              *PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRRHONG_MR) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'SFR',  ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'SFR', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'SFR',  ZW1(:, :)              *PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVDEPS) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS',  ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS',  ZW1(:, :)              *PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIAGGS) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS', -ZW1(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS',  ZW1(:, :)*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIAUTS) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AUTS', -ZW1(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AUTS',  ZW1(:, :)*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVDEPG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG',  ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG',  ZW1(:, :)              *PRHODJ(:, :))
+
+IF(PARAMI%LWARM) THEN
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCAUTR) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO', -ZW1(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO',  ZW1(:, :)*PRHODJ(:, :))
+
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCACCR) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR', -ZW1(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR',  ZW1(:, :)*PRHODJ(:, :))
+
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRREVAV) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA', -ZW1(:, :)*PLVFACT(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA',  ZW1(:, :)              *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA', -ZW1(:, :)              *PRHODJ(:, :))
+ENDIF
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCRIMSS) * ZINV_TSTEP
+END DO
+ZW2(:,:) = 0.
+DO JL=1, KSIZE
+  ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRCRIMSG) * ZINV_TSTEP
+END DO
+ZW3(:,:) = 0.
+DO JL=1, KSIZE
+  ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRSRIMCG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) &
+  CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRRACCSS) * ZINV_TSTEP
+END DO
+ZW2(:,:) = 0.
+DO JL=1, KSIZE
+  ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRACCSG) * ZINV_TSTEP
+END DO
+ZW3(:,:) = 0.
+DO JL=1, KSIZE
+  ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRSACCRG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) &
+  CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRSMLTG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL', -ZW1(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL',  ZW1(:, :)*PRHODJ(:, :))
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCMLTSR) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CMEL', -ZW1(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CMEL',  ZW1(:, :)*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRICFRRG) * ZINV_TSTEP
+END DO
+ZW2(:,:) = 0.
+DO JL=1, KSIZE
+  ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRCFRIG) * ZINV_TSTEP
+END DO
+ZW3(:,:) = 0.
+DO JL=1, KSIZE
+  ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRICFRR) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) &
+  CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :)+ZW2(:, :))*PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCWETG) * ZINV_TSTEP
+END DO
+ZW2(:,:) = 0.
+DO JL=1, KSIZE
+  ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRWETG) * ZINV_TSTEP
+END DO
+ZW3(:,:) = 0.
+DO JL=1, KSIZE
+  ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIWETG) * ZINV_TSTEP
+END DO
+ZW4(:,:) = 0.
+DO JL=1, KSIZE
+  ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSWETG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) &
+  CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG', -ZW1(:, :)    *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG', -ZW2(:, :)    *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG', -ZW3(:, :)    *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG', -ZW4(:, :)    *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) &
+                                                                    &                             *PRHODJ(:, :))
+
+IF(KRR==7) THEN
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRWETGH) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GHCV', -ZW1(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'GHCV',  ZW1(:, :)*PRHODJ(:, :))
+END IF
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCDRYG) * ZINV_TSTEP
+END DO
+ZW2(:,:) = 0.
+DO JL=1, KSIZE
+  ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRDRYG) * ZINV_TSTEP
+END DO
+ZW3(:,:) = 0.
+DO JL=1, KSIZE
+  ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIDRYG) * ZINV_TSTEP
+END DO
+ZW4(:,:) = 0.
+DO JL=1, KSIZE
+  ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSDRYG) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) &
+  CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG', -ZW1(:, :)     *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG', -ZW2(:, :)     *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG', -ZW3(:, :)     *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG', -ZW4(:, :)     *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) &
+                                                                    &                            *PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRGMLTR) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT',  ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ZW1(:, :)              *PRHODJ(:, :))
+
+IF(KRR==7) THEN
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCWETH) * ZINV_TSTEP
+  END DO
+  ZW2(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRWETH) * ZINV_TSTEP
+  END DO
+  ZW3(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIWETH) * ZINV_TSTEP
+  END DO
+  ZW4(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSWETH) * ZINV_TSTEP
+  END DO
+  ZW5(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW5(K1(JL), K2(JL)) = PBU_PACK(JL, IRGWETH) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_TH) &
+    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :)    *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :)    *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :)    *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :)    *PRHODJ(:, :))
+#ifdef REPRO48
+#else
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :)    *PRHODJ(:, :))
+#endif
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ &
+                                                                        &ZW4(:, :)+ZW5(:, : ))  *PRHODJ(:, :))
+
+#if defined(REPRO48) || defined(REPRO55)
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRGWETH) * ZINV_TSTEP
+  END DO
+#endif 
+#ifdef REPRO48
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :)-ZW1(:, :))*PRHODJ(:, :))
+#endif
+#ifdef REPRO55
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW1(:, :)*PRHODJ(:, :))
+#endif
+#if defined(REPRO48) || defined(REPRO55)
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV',  ZW1(:, :)*PRHODJ(:, :))
+#endif
+
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCDRYH) * ZINV_TSTEP
+  END DO
+  ZW2(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRDRYH) * ZINV_TSTEP
+  END DO
+  ZW3(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIDRYH) * ZINV_TSTEP
+  END DO
+  ZW4(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSDRYH) * ZINV_TSTEP
+  END DO
+  ZW5(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW5(K1(JL), K2(JL)) = PBU_PACK(JL, IRGDRYH) * ZINV_TSTEP
+  END DO
+  ZW6(:,:) = 0.
+#if defined(REPRO48) || defined(REPRO55)
+  !ZW6 must be removed when REPRO* will be suppressed
+  DO JL=1, KSIZE
+    ZW6(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP
+  END DO
+#endif
+  IF (BUCONF%LBUDGET_TH) &
+    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :)                 *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :)                 *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :)                 *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :)                 *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :)+ZW6(:, :))     *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+   &
+                                                                      &ZW4(:, :)+ZW5(:, :)-ZW6(:, :)) &
+                                                                      &                             *PRHODJ(:, :))
+
+#if defined(REPRO48) || defined(REPRO55)
+#else
+  !When REPRO48 will be suppressed, ZW6 must be removed
+  ZW(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW1(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV',  ZW1(:, :)*PRHODJ(:, :))
+#endif
+
+  ZW1(:,:) = 0.
+  DO JL=1, KSIZE
+    ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRHMLTR) * ZINV_TSTEP
+  END DO
+  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT',  ZW1(:, :)              *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ZW1(:, :)              *PRHODJ(:, :))
+ENDIF
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIMLTC_MR) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT',  ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT', -ZW1(:, :)              *PRHODJ(:, :))
+
+ZW1(:,:) = 0.
+DO JL=1, KSIZE
+  ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCBERI) * ZINV_TSTEP
+END DO
+IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI',  ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', -ZW1(:, :)              *PRHODJ(:, :))
+IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI',  ZW1(:, :)              *PRHODJ(:, :))
+!
+IF (LHOOK) CALL DR_HOOK('ICE4_BUDGETS', 1, ZHOOK_HANDLE)
+!
+END SUBROUTINE ICE4_BUDGETS
+!
+END MODULE MODE_ICE4_BUDGETS
diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90
index fd722114c661d755f28eb062e2075deac77b44c0..6be883b1972b34e168459523d40532c110cd6193 100644
--- a/src/common/micro/mode_ice4_tendencies.F90
+++ b/src/common/micro/mode_ice4_tendencies.F90
@@ -13,15 +13,7 @@ SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, BUCONF, KPROMA, KSIZE, &
                           &PPRES, PCF, PSIGMA_RC, &
                           &PCIT, &
                           &PT, PVART, &
-                          &PRVHENI_MR, PRRHONG_MR, PRIMLTC_MR, PRSRIMCG_MR, &
-                          &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, &
-                          &PRCAUTR, PRCACCR, PRREVAV, &
-                          &PRCRIMSS, PRCRIMSG, PRSRIMCG, PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, PRCMLTSR, &
-                          &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, &
-                          &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, &
-                          &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, &
-                          &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, &
-                          &PRCBERI, &
+                          &PBU_INST, &
                           &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, &
                           &PA, PB, &
                           &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, &
@@ -54,16 +46,7 @@ USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
 USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
 USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 !
-USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress
-      & ITH,     & ! Potential temperature
-      & IRV,     & ! Water vapor
-      & IRC,     & ! Cloud water
-      & IRR,     & ! Rain water
-      & IRI,     & ! Pristine ice
-      & IRS,     & ! Snow/aggregate
-      & IRG,     & ! Graupel
-      & IRH        ! Hail
-!
+USE MODD_FIELDS_ADDRESS
 USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG
 USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC
 USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD
@@ -108,53 +91,7 @@ REAL, DIMENSION(KPROMA),       INTENT(IN)    :: PSIGMA_RC
 REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PCIT
 REAL, DIMENSION(KPROMA),       INTENT(IN)    :: PT
 REAL, DIMENSION(KPROMA,0:KRR), INTENT(IN)    :: PVART
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRVHENI_MR
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRHONG_MR
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRIMLTC_MR
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSRIMCG_MR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRCHONI
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRVDEPS
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRIAGGS
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRIAUTS
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRVDEPG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRCAUTR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRCACCR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRREVAV
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCRIMSS
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCRIMSG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSRIMCG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRACCSS
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRACCSG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSACCRG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRSMLTG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRCMLTSR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRICFRRG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRRCFRIG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRICFRR
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCWETG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRIWETG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRWETG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSWETG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCDRYG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRIDRYG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRDRYG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSDRYG
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRWETGH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRWETGH_MR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRGMLTR
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCWETH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRIWETH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSWETH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRGWETH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRWETH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRCDRYH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRIDRYH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRSDRYH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRRDRYH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRGDRYH
-REAL, DIMENSION(KPROMA),       INTENT(OUT)   :: PRDRYHG
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRHMLTR
-REAL, DIMENSION(KPROMA),       INTENT(INOUT) :: PRCBERI
+REAL, DIMENSION(KPROMA, IBUNUM),INTENT(INOUT):: PBU_INST
 REAL, DIMENSION(KPROMA, 8),    INTENT(INOUT) :: PRS_TEND
 REAL, DIMENSION(KPROMA, 8),    INTENT(INOUT) :: PRG_TEND
 REAL, DIMENSION(KPROMA, 10),   INTENT(INOUT) :: PRH_TEND
@@ -198,10 +135,10 @@ DO JV=0,KRR
 ENDDO
 !
 IF(ODSOFT) THEN
-  PRVHENI_MR(:)=0.
-  PRRHONG_MR(:)=0.
-  PRIMLTC_MR(:)=0.
-  PRSRIMCG_MR(:)=0.
+  PBU_INST(:, IRVHENI_MR)=0.
+  PBU_INST(:, IRRHONG_MR)=0.
+  PBU_INST(:, IRIMLTC_MR)=0.
+  PBU_INST(:, IRSRIMCG_MR)=0.
 ELSE
   !
   !*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
@@ -209,12 +146,12 @@ ELSE
   CALL ICE4_NUCLEATION(CST, PARAMI, ICEP, ICED, KSIZE, LDCOMPUTE(:), &
                    ZVART(:,ITH), PPRES(:), PRHODREF(:), PEXN(:), PLSFACT(:), ZT(:), &
                    ZVART(:,IRV), &
-                   PCIT(:), PRVHENI_MR(:))
+                   PCIT(:), PBU_INST(:, IRVHENI_MR))
   DO JL=1, KSIZE
-    ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
+    ZVART(JL,ITH)=ZVART(JL,ITH) + PBU_INST(JL, IRVHENI_MR)*PLSFACT(JL)
     ZT(JL) = ZVART(JL,ITH) * PEXN(JL)
-    ZVART(JL,IRV)=ZVART(JL,IRV) - PRVHENI_MR(JL)
-    ZVART(JL,IRI)=ZVART(JL,IRI) + PRVHENI_MR(JL)
+    ZVART(JL,IRV)=ZVART(JL,IRV) - PBU_INST(JL, IRVHENI_MR)
+    ZVART(JL,IRI)=ZVART(JL,IRI) + PBU_INST(JL, IRVHENI_MR)
   ENDDO
   !
   !*       3.3     compute the spontaneous freezing source: RRHONG
@@ -223,12 +160,12 @@ ELSE
                   &PEXN, PLVFACT, PLSFACT, &
                   &ZT, ZVART(:,IRR), &
                   &ZVART(:,ITH), &
-                  &PRRHONG_MR)
+                  &PBU_INST(:, IRRHONG_MR))
   DO JL=1, KSIZE
-    ZVART(JL,ITH) = ZVART(JL,ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG))
+    ZVART(JL,ITH) = ZVART(JL,ITH) + PBU_INST(JL, IRRHONG_MR)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG))
     ZT(JL) = ZVART(JL,ITH) * PEXN(JL)
-    ZVART(JL,IRR) = ZVART(JL,IRR) - PRRHONG_MR(JL)
-    ZVART(JL,IRG) = ZVART(JL,IRG) + PRRHONG_MR(JL)
+    ZVART(JL,IRR) = ZVART(JL,IRR) - PBU_INST(JL, IRRHONG_MR)
+    ZVART(JL,IRG) = ZVART(JL,IRG) + PBU_INST(JL, IRRHONG_MR)
   ENDDO
   !
   !*       7.1    cloud ice melting
@@ -237,12 +174,12 @@ ELSE
                   &PEXN, PLVFACT, PLSFACT, &
                   &ZT, &
                   &ZVART(:,ITH), ZVART(:,IRI), &
-                  &PRIMLTC_MR)
+                  &PBU_INST(:, IRIMLTC_MR))
   DO JL=1, KSIZE
-    ZVART(JL,ITH) = ZVART(JL,ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC))
+    ZVART(JL,ITH) = ZVART(JL,ITH) - PBU_INST(JL, IRIMLTC_MR)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC))
     ZT(JL) = ZVART(JL,ITH) * PEXN(JL)
-    ZVART(JL,IRC) = ZVART(JL,IRC) + PRIMLTC_MR(JL)
-    ZVART(JL,IRI) = ZVART(JL,IRI) - PRIMLTC_MR(JL)
+    ZVART(JL,IRC) = ZVART(JL,IRC) + PBU_INST(JL, IRIMLTC_MR)
+    ZVART(JL,IRI) = ZVART(JL,IRI) - PBU_INST(JL, IRIMLTC_MR)
   ENDDO
   !
   !        5.1.6  riming-conversion of the large sized aggregates into graupel (old parametrisation)
@@ -259,33 +196,33 @@ ELSE
                          &PRHODREF, &
                          &ZLBDAS, &
                          &ZT, ZVART(:,IRC), ZVART(:,IRS), &
-                         &PRSRIMCG_MR)
+                         &PBU_INST(:, IRSRIMCG_MR))
     DO JL=1, KSIZE
-      ZVART(JL,IRS) = ZVART(JL,IRS) - PRSRIMCG_MR(JL)
-      ZVART(JL,IRG) = ZVART(JL,IRG) + PRSRIMCG_MR(JL)
+      ZVART(JL,IRS) = ZVART(JL,IRS) - PBU_INST(JL, IRSRIMCG_MR)
+      ZVART(JL,IRG) = ZVART(JL,IRG) + PBU_INST(JL, IRSRIMCG_MR)
     ENDDO
   ELSE
-    PRSRIMCG_MR(:) = 0.
+    PBU_INST(:, IRSRIMCG_MR) = 0.
   ENDIF
  
   DO JL=1, KSIZE
-    PB(JL, ITH)=PB(JL, ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
-    PB(JL, ITH)=PB(JL, ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
-    PB(JL, ITH)=PB(JL, ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
+    PB(JL, ITH)=PB(JL, ITH) + PBU_INST(JL, IRVHENI_MR)*PLSFACT(JL)
+    PB(JL, ITH)=PB(JL, ITH) + PBU_INST(JL, IRRHONG_MR)*(PLSFACT(JL)-PLVFACT(JL))
+    PB(JL, ITH)=PB(JL, ITH) - PBU_INST(JL, IRIMLTC_MR)*(PLSFACT(JL)-PLVFACT(JL))
 
-    PB(JL, IRV)=PB(JL, IRV) - PRVHENI_MR(JL)
+    PB(JL, IRV)=PB(JL, IRV) - PBU_INST(JL, IRVHENI_MR)
 
-    PB(JL, IRC)=PB(JL, IRC) + PRIMLTC_MR(JL)
+    PB(JL, IRC)=PB(JL, IRC) + PBU_INST(JL, IRIMLTC_MR)
 
-    PB(JL, IRR)=PB(JL, IRR) - PRRHONG_MR(JL)
+    PB(JL, IRR)=PB(JL, IRR) - PBU_INST(JL, IRRHONG_MR)
 
-    PB(JL, IRI)=PB(JL, IRI) + PRVHENI_MR(JL)
-    PB(JL, IRI)=PB(JL, IRI) - PRIMLTC_MR(JL)
+    PB(JL, IRI)=PB(JL, IRI) + PBU_INST(JL, IRVHENI_MR)
+    PB(JL, IRI)=PB(JL, IRI) - PBU_INST(JL, IRIMLTC_MR)
 
-    PB(JL, IRS)=PB(JL, IRS) - PRSRIMCG_MR(JL)
+    PB(JL, IRS)=PB(JL, IRS) - PBU_INST(JL, IRSRIMCG_MR)
 
-    PB(JL, IRG)=PB(JL, IRG) + PRRHONG_MR(JL)
-    PB(JL, IRG)=PB(JL, IRG) + PRSRIMCG_MR(JL)
+    PB(JL, IRG)=PB(JL, IRG) + PBU_INST(JL, IRRHONG_MR)
+    PB(JL, IRG)=PB(JL, IRG) + PBU_INST(JL, IRSRIMCG_MR)
   ENDDO
  !
   !* Derived fields
@@ -385,7 +322,7 @@ CALL ICE4_SLOW(CST, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, PRHODREF, ZT,
               &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), &
               &ZLBDAS, ZLBDAG, &
               &ZAI, ZCJ, PHLI_HCF, PHLI_HRI, &
-              &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG)
+              &PBU_INST(:, IRCHONI), PBU_INST(:, IRVDEPS), PBU_INST(:, IRIAGGS), PBU_INST(:, IRIAUTS), PBU_INST(:, IRVDEPG))
 !
 !-------------------------------------------------------------------------------
 !
@@ -403,11 +340,11 @@ IF(PARAMI%LWARM) THEN    !  Check if the formation of the raindrops by the slow
                 &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, &
                 &PCF, ZRAINFR, &
                 &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), &
-                &PRCAUTR, PRCACCR, PRREVAV)
+                &PBU_INST(:, IRCAUTR), PBU_INST(:, IRCACCR), PBU_INST(:, IRREVAV))
 ELSE
-  PRCAUTR(:)=0.
-  PRCACCR(:)=0.
-  PRREVAV(:)=0.
+  PBU_INST(:, IRCAUTR)=0.
+  PBU_INST(:, IRCACCR)=0.
+  PBU_INST(:, IRREVAV)=0.
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -421,10 +358,10 @@ CALL ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, &
                  &ZDV, ZKA, ZCJ, &
                  &ZLBDAR, ZLBDAS, &
                  &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRS), &
-                 &PRIAGGS, &
-                 &PRCRIMSS, PRCRIMSG, PRSRIMCG, &
-                 &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, &
-                 &PRCMLTSR, &
+                 &PBU_INST(:, IRIAGGS), &
+                 &PBU_INST(:, IRCRIMSS), PBU_INST(:, IRCRIMSG), PBU_INST(:, IRSRIMCG), &
+                 &PBU_INST(:, IRRACCSS), PBU_INST(:, IRRACCSG), PBU_INST(:, IRSACCRG), PBU_INST(:, IRSMLTG), &
+                 &PBU_INST(:, IRCMLTSR), &
                  &PRS_TEND)
 !
 !-------------------------------------------------------------------------------
@@ -434,9 +371,9 @@ CALL ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, &
 !                  ------------------------------------------------------
 !
 DO JL=1, KSIZE
-  ZRGSI(JL) = PRVDEPG(JL) + PRSMLTG(JL) + PRRACCSG(JL) + &
-           & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL)
-  ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL)
+  ZRGSI(JL) = PBU_INST(JL, IRVDEPG) + PBU_INST(JL, IRSMLTG) + PBU_INST(JL, IRRACCSG) + &
+            & PBU_INST(JL, IRSACCRG) + PBU_INST(JL, IRCRIMSG) + PBU_INST(JL, IRSRIMCG)
+  ZRGSI_MR(JL) = PBU_INST(JL, IRRHONG_MR) + PBU_INST(JL, IRSRIMCG_MR)
 ENDDO
 CALL ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, KRR, &
                  &PRHODREF, PLVFACT, PLSFACT, PPRES, &
@@ -445,8 +382,10 @@ CALL ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, KRR
                  &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), &
                  &ZRGSI, ZRGSI_MR(:), &
                  &LLWETG, &
-                 &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, &
-                 &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, &
+                 &PBU_INST(:, IRICFRRG), PBU_INST(:, IRRCFRIG), PBU_INST(:, IRICFRR), PBU_INST(:, IRCWETG), &
+                 &PBU_INST(:, IRIWETG), PBU_INST(:, IRRWETG), PBU_INST(:, IRSWETG), &
+                 &PBU_INST(:, IRCDRYG), PBU_INST(:, IRIDRYG), PBU_INST(:, IRRDRYG), PBU_INST(:, IRSDRYG), &
+                 &PBU_INST(:, IRWETGH), PBU_INST(:, IRWETGH_MR), PBU_INST(:, IRGMLTR), &
                  &PRG_TEND)
 !
 !-------------------------------------------------------------------------------
@@ -461,22 +400,23 @@ IF (KRR==7) THEN
                    &ZDV, ZKA, ZCJ, &
                    &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, &
                    &ZT,  ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), ZVART(:,IRH), &
-                   &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, &
-                   &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, &
+                   &PBU_INST(:, IRCWETH), PBU_INST(:, IRIWETH), PBU_INST(:, IRSWETH), PBU_INST(:, IRGWETH), PBU_INST(:, IRRWETH), &
+                   &PBU_INST(:, IRCDRYH), PBU_INST(:, IRIDRYH), PBU_INST(:, IRSDRYH), PBU_INST(:, IRRDRYH), &
+                   &PBU_INST(:, IRGDRYH), PBU_INST(:, IRDRYHG), PBU_INST(:, IRHMLTR), &
                    &PRH_TEND)
 ELSEIF (BUCONF%LBU_ENABLE) THEN
-  PRCWETH(:)=0.
-  PRIWETH(:)=0.
-  PRSWETH(:)=0.
-  PRGWETH(:)=0.
-  PRRWETH(:)=0.
-  PRCDRYH(:)=0.
-  PRIDRYH(:)=0.
-  PRSDRYH(:)=0.
-  PRRDRYH(:)=0.
-  PRGDRYH(:)=0.
-  PRDRYHG(:)=0.
-  PRHMLTR(:)=0.
+  PBU_INST(:, IRCWETH)=0.
+  PBU_INST(:, IRIWETH)=0.
+  PBU_INST(:, IRSWETH)=0.
+  PBU_INST(:, IRGWETH)=0.
+  PBU_INST(:, IRRWETH)=0.
+  PBU_INST(:, IRCDRYH)=0.
+  PBU_INST(:, IRIDRYH)=0.
+  PBU_INST(:, IRSDRYH)=0.
+  PBU_INST(:, IRRDRYH)=0.
+  PBU_INST(:, IRGDRYH)=0.
+  PBU_INST(:, IRDRYHG)=0.
+  PBU_INST(:, IRHMLTR)=0.
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -490,7 +430,7 @@ CALL ICE4_FAST_RI(ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, &
                  &ZAI, ZCJ, PCIT, &
                  &PSSI, &
                  &ZVART(:,IRC), ZVART(:,IRI), &
-                 &PRCBERI)
+                 &PBU_INST(:, IRCBERI))
 !
 !-------------------------------------------------------------------------------
 !
@@ -499,108 +439,109 @@ CALL ICE4_FAST_RI(ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, &
 !               -------------------------
 !
 DO JL=1, KSIZE
-  PA(JL, ITH) = PA(JL, ITH) + PRVDEPG(JL)*PLSFACT(JL)
-  PA(JL, ITH) = PA(JL, ITH) + PRCHONI(JL)*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + PRVDEPS(JL)*PLSFACT(JL)
-  PA(JL, ITH) = PA(JL, ITH) - PRREVAV(JL)*PLVFACT(JL)
-  PA(JL, ITH) = PA(JL, ITH) + PRCRIMSS(JL)*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + PRCRIMSG(JL)*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + PRRACCSS(JL)*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + PRRACCSG(JL)*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + (PRRCFRIG(JL) - PRICFRR(JL))*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + (PRCWETG(JL) + PRRWETG(JL))*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) + (PRCDRYG(JL)+PRRDRYG(JL))*(PLSFACT(JL)-PLVFACT(JL))
-  PA(JL, ITH) = PA(JL, ITH) - PRGMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRVDEPG)*PLSFACT(JL)
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCHONI)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRVDEPS)*PLSFACT(JL)
+  PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRREVAV)*PLVFACT(JL)
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCRIMSS)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCRIMSG)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRRACCSS)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRRACCSG)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRRCFRIG) - PBU_INST(JL, IRICFRR))*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCWETG) + PBU_INST(JL, IRRWETG))*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCDRYG)+PBU_INST(JL, IRRDRYG))*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRGMLTR)*(PLSFACT(JL)-PLVFACT(JL))
   IF (KRR==7) THEN
-    PA(JL, ITH) = PA(JL, ITH) + (PRRWETH(JL)+PRCWETH(JL))*(PLSFACT(JL)-PLVFACT(JL))
-    PA(JL, ITH) = PA(JL, ITH) + (PRCDRYH(JL)+PRRDRYH(JL))*(PLSFACT(JL)-PLVFACT(JL))
-    PA(JL, ITH) = PA(JL, ITH) - PRHMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL))
+    PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRRWETH)+PBU_INST(JL, IRCWETH))*(PLSFACT(JL)-PLVFACT(JL))
+    PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCDRYH)+PBU_INST(JL, IRRDRYH))*(PLSFACT(JL)-PLVFACT(JL))
+    PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRHMLTR)*(PLSFACT(JL)-PLVFACT(JL))
   ENDIF
-  PA(JL, ITH) = PA(JL, ITH) + PRCBERI(JL)*(PLSFACT(JL)-PLVFACT(JL))
+  PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCBERI)*(PLSFACT(JL)-PLVFACT(JL))
 
-  PA(JL, IRV) = PA(JL, IRV) - PRVDEPG(JL)
-  PA(JL, IRV) = PA(JL, IRV) - PRVDEPS(JL)
-  PA(JL, IRV) = PA(JL, IRV) + PRREVAV(JL)
+  PA(JL, IRV) = PA(JL, IRV) - PBU_INST(JL, IRVDEPG)
+  PA(JL, IRV) = PA(JL, IRV) - PBU_INST(JL, IRVDEPS)
+  PA(JL, IRV) = PA(JL, IRV) + PBU_INST(JL, IRREVAV)
 
-  PA(JL, IRC) = PA(JL, IRC) - PRCHONI(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCAUTR(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCACCR(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCRIMSS(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCRIMSG(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCMLTSR(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCWETG(JL)
-  PA(JL, IRC) = PA(JL, IRC) - PRCDRYG(JL)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCHONI)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCAUTR)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCACCR)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCRIMSS)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCRIMSG)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCMLTSR)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCWETG)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCDRYG)
   IF (KRR==7) THEN
-    PA(JL, IRC) = PA(JL, IRC) - PRCWETH(JL)
-    PA(JL, IRC) = PA(JL, IRC) - PRCDRYH(JL)
+    PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCWETH)
+    PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCDRYH)
   ENDIF
-  PA(JL, IRC) = PA(JL, IRC) - PRCBERI(JL)
+  PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCBERI)
 
-  PA(JL, IRR) = PA(JL, IRR) + PRCAUTR(JL)
-  PA(JL, IRR) = PA(JL, IRR) + PRCACCR(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRREVAV(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRRACCSS(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRRACCSG(JL)
-  PA(JL, IRR) = PA(JL, IRR) + PRCMLTSR(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRRCFRIG(JL) + PRICFRR(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRRWETG(JL)
-  PA(JL, IRR) = PA(JL, IRR) - PRRDRYG(JL)
-  PA(JL, IRR) = PA(JL, IRR) + PRGMLTR(JL)
+  PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCAUTR)
+  PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCACCR)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRREVAV)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRACCSS)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRACCSG)
+  PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCMLTSR)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRCFRIG) + PBU_INST(JL, IRICFRR)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRWETG)
+  PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRDRYG)
+  PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRGMLTR)
   IF(KRR==7) THEN
-    PA(JL, IRR) = PA(JL, IRR) - PRRWETH(JL)
-    PA(JL, IRR) = PA(JL, IRR) - PRRDRYH(JL)
-    PA(JL, IRR) = PA(JL, IRR) + PRHMLTR(JL)
+    PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRWETH)
+    PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRDRYH)
+    PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRHMLTR)
   ENDIF
 
-  PA(JL, IRI) = PA(JL, IRI) + PRCHONI(JL)
-  PA(JL, IRI) = PA(JL, IRI) - PRIAGGS(JL)
-  PA(JL, IRI) = PA(JL, IRI) - PRIAUTS(JL)
-  PA(JL, IRI) = PA(JL, IRI) - PRICFRRG(JL) - PRICFRR(JL)
-  PA(JL, IRI) = PA(JL, IRI) - PRIWETG(JL)
-  PA(JL, IRI) = PA(JL, IRI) - PRIDRYG(JL)
+  PA(JL, IRI) = PA(JL, IRI) + PBU_INST(JL, IRCHONI)
+  PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIAGGS)
+  PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIAUTS)
+  PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRICFRRG) - PBU_INST(JL, IRICFRR)
+  PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIWETG)
+  PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIDRYG)
   IF (KRR==7) THEN
-    PA(JL, IRI) = PA(JL, IRI) - PRIWETH(JL)
-    PA(JL, IRI) = PA(JL, IRI) - PRIDRYH(JL)
+    PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIWETH)
+    PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIDRYH)
   ENDIF
-  PA(JL, IRI) = PA(JL, IRI) + PRCBERI(JL)
+  PA(JL, IRI) = PA(JL, IRI) + PBU_INST(JL, IRCBERI)
 
-  PA(JL, IRS) = PA(JL, IRS) + PRVDEPS(JL)
-  PA(JL, IRS) = PA(JL, IRS) + PRIAGGS(JL)
-  PA(JL, IRS) = PA(JL, IRS) + PRIAUTS(JL)
-  PA(JL, IRS) = PA(JL, IRS) + PRCRIMSS(JL)
-  PA(JL, IRS) = PA(JL, IRS) - PRSRIMCG(JL)
-  PA(JL, IRS) = PA(JL, IRS) + PRRACCSS(JL)
-  PA(JL, IRS) = PA(JL, IRS) - PRSACCRG(JL)
-  PA(JL, IRS) = PA(JL, IRS) - PRSMLTG(JL)
-  PA(JL, IRS) = PA(JL, IRS) - PRSWETG(JL)
-  PA(JL, IRS) = PA(JL, IRS) - PRSDRYG(JL)
+  PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRVDEPS)
+  PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRIAGGS)
+  PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRIAUTS)
+  PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRCRIMSS)
+  PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSRIMCG)
+  PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRRACCSS)
+  PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSACCRG)
+  PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSMLTG)
+  PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSWETG)
+  PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSDRYG)
   IF (KRR==7) THEN
-    PA(JL, IRS) = PA(JL, IRS) - PRSWETH(JL)
-    PA(JL, IRS) = PA(JL, IRS) - PRSDRYH(JL)
+    PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSWETH)
+    PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSDRYH)
   ENDIF
 
-  PA(JL, IRG) = PA(JL, IRG) + PRVDEPG(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRCRIMSG(JL)+PRSRIMCG(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRRACCSG(JL)+PRSACCRG(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRSMLTG(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRICFRRG(JL) + PRRCFRIG(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRCWETG(JL) + PRIWETG(JL) + PRSWETG(JL) + PRRWETG(JL)
-  PA(JL, IRG) = PA(JL, IRG) - PRWETGH(JL)
-  PB(JL, IRG) = PB(JL, IRG) - PRWETGH_MR(JL)
-  PA(JL, IRG) = PA(JL, IRG) + PRCDRYG(JL) + PRIDRYG(JL) + PRSDRYG(JL) + PRRDRYG(JL)
-  PA(JL, IRG) = PA(JL, IRG) - PRGMLTR(JL)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRVDEPG)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCRIMSG)+PBU_INST(JL, IRSRIMCG)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRRACCSG)+PBU_INST(JL, IRSACCRG)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRSMLTG)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRICFRRG) + PBU_INST(JL, IRRCFRIG)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCWETG) + PBU_INST(JL, IRIWETG) + PBU_INST(JL, IRSWETG) + PBU_INST(JL, IRRWETG)
+  PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRWETGH)
+  PB(JL, IRG) = PB(JL, IRG) - PBU_INST(JL, IRWETGH_MR)
+  PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCDRYG) + PBU_INST(JL, IRIDRYG) + PBU_INST(JL, IRSDRYG) + PBU_INST(JL, IRRDRYG)
+  PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGMLTR)
   IF (KRR==7) THEN
-    PA(JL, IRG) = PA(JL, IRG) - PRGWETH(JL)
-    PA(JL, IRG) = PA(JL, IRG) - PRGDRYH(JL) + PRDRYHG(JL)
+    PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGWETH)
+    PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGDRYH) + PBU_INST(JL, IRDRYHG)
   ENDIF
 
   IF (KRR==7) THEN
-    PA(JL, IRH) = PA(JL, IRH) + PRWETGH(JL)
-    PB(JL, IRH) = PB(JL, IRH) + PRWETGH_MR(JL)
-    PA(JL, IRH) = PA(JL, IRH) + PRCWETH(JL)+PRIWETH(JL)+PRSWETH(JL)+PRGWETH(JL)+PRRWETH(JL)
-    PA(JL, IRH) = PA(JL, IRH) + PRCDRYH(JL)+PRIDRYH(JL)+PRSDRYH(JL)+&
-                           &PRRDRYH(JL)+PRGDRYH(JL) - PRDRYHG(JL)
-    PA(JL, IRH) = PA(JL, IRH) - PRHMLTR(JL)
+    PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRWETGH)
+    PB(JL, IRH) = PB(JL, IRH) + PBU_INST(JL, IRWETGH_MR)
+    PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRCWETH)+PBU_INST(JL, IRIWETH)+PBU_INST(JL, IRSWETH)+&
+                              & PBU_INST(JL, IRGWETH)+PBU_INST(JL, IRRWETH)
+    PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRCDRYH)+PBU_INST(JL, IRIDRYH)+PBU_INST(JL, IRSDRYH)+&
+                              & PBU_INST(JL, IRRDRYH)+PBU_INST(JL, IRGDRYH) - PBU_INST(JL, IRDRYHG)
+    PA(JL, IRH) = PA(JL, IRH) - PBU_INST(JL, IRHMLTR)
   ENDIF
 ENDDO
 !
diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90
index 44edc4c0ee65413e7c9f5434da0c9080f4864b2d..45076d2175e8a19ed02b826d0cefc1f0f49efffd 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -196,11 +196,17 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress
       & IRI,     & ! Pristine ice
       & IRS,     & ! Snow/aggregate
       & IRG,     & ! Graupel
-      & IRH        ! Hail
+      & IRH,     & ! Hail
+      & IBUNUM,       & ! Number of tendency terms
+      & IBUNUM_MR,    & ! Number of tendency terms expressed as mixing ratio changes
+      & IBUNUM_EXTRA, & ! Number of extra tendency terms
+      & IRREVAV,      & ! Index for the evaporation tendency
+      & IBUEXTRAIND     ! Index indirection
 
 USE MODE_BUDGET,         ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
 USE MODE_MSG,            ONLY: PRINT_MSG, NVERB_FATAL
 
+USE MODE_ICE4_BUDGETS, ONLY: ICE4_BUDGETS
 USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT
 USE MODE_ICE4_SEDIMENTATION, ONLY: ICE4_SEDIMENTATION
 USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES
@@ -288,8 +294,6 @@ REAL,    DIMENSION(D%NIJT, D%NKT) :: ZW ! work array
 REAL,    DIMENSION(D%NIJT, D%NKT) :: ZT ! Temperature
 REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change
                                 & ZZ_RVHENI       ! heterogeneous nucleation
-REAL, DIMENSION(MERGE(D%NIJT, 0, BUCONF%LBU_ENABLE), &
-               &MERGE(D%NKT, 0, BUCONF%LBU_ENABLE)) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 !Work arrays
 REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_LVFACT, ZZ_LSFACT, ZZ_DIFF
 !
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZRCT    ! Cloud water m.r. source at t
@@ -299,7 +303,6 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZRST    ! Snow/aggregate m.r. source at t
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZRGT    ! Graupel m.r. source at t
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZRHT    ! Hail m.r. source at t
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZCITOUT ! Output value for CIT
-REAL, DIMENSION(D%NIJT,D%NKT) :: ZLBDAS  ! Modif  !lbda parameter snow
 
 !
 LOGICAL :: GEXT_TEND
@@ -313,35 +316,11 @@ REAL :: ZTIME_THRESHOLD ! Time to reach threshold
 REAL, DIMENSION(D%NIJT,D%NKT,0:7) :: ZWR
 !
 !Output packed total mixing ratio change (for budgets only)
-REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change
-                        & ZTOT_RCHONI, & ! Homogeneous nucleation
-                        & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change
-                        & ZTOT_RVDEPS, & ! Deposition on r_s,
-                        & ZTOT_RIAGGS, & ! Aggregation on r_s
-                        & ZTOT_RIAUTS, & ! Autoconversion of r_i for r_s production
-                        & ZTOT_RVDEPG, & ! Deposition on r_g
-                        & ZTOT_RCAUTR,  & ! Autoconversion of r_c for r_r production
-                        & ZTOT_RCACCR, & ! Accretion of r_c for r_r production
-                        & ZTOT_RREVAV, & ! Evaporation of r_r
-                        & ZTOT_RCRIMSS, ZTOT_RCRIMSG, ZTOT_RSRIMCG, & ! Cloud droplet riming of the aggregates
-                        & ZTOT_RIMLTC, & ! Cloud ice melting mixing ratio change
-                        & ZTOT_RCBERI, & ! Bergeron-Findeisen effect
-                        & ZTOT_RHMLTR, & ! Melting of the hailstones
-                        & ZTOT_RSMLTG, & ! Conversion-Melting of the aggregates
-                        & ZTOT_RCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature
-                        & ZTOT_RRACCSS, ZTOT_RRACCSG, ZTOT_RSACCRG, & ! Rain accretion onto the aggregates
-                        & ZTOT_RICFRRG, ZTOT_RRCFRIG, ZTOT_RICFRR, & ! Rain contact freezing
-                        & ZTOT_RCWETG, ZTOT_RIWETG, ZTOT_RRWETG, ZTOT_RSWETG, &  ! Graupel wet growth
-                        & ZTOT_RCDRYG, ZTOT_RIDRYG, ZTOT_RRDRYG, ZTOT_RSDRYG, &  ! Graupel dry growth
-                        & ZTOT_RWETGH, & ! Conversion of graupel into hail
-                        & ZTOT_RGMLTR, & ! Melting of the graupel
-                        & ZTOT_RCWETH, ZTOT_RIWETH, ZTOT_RSWETH, ZTOT_RGWETH, ZTOT_RRWETH, & ! Dry growth of hailstone
-                        & ZTOT_RCDRYH, ZTOT_RIDRYH, ZTOT_RSDRYH, ZTOT_RRDRYH, ZTOT_RGDRYH, & ! Wet growth of hailstone
-                        & ZTOT_RDRYHG    ! Conversion of hailstone into graupel
+REAL, DIMENSION(KSIZE, IBUNUM-IBUNUM_EXTRA) :: ZBU_PACK
 !
 !For packing
 INTEGER :: IMICRO ! Case r_x>0 locations
-INTEGER :: JL, JV
+INTEGER :: JL, JV, JJV
 REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and ends with PTSTEP)
 REAL, DIMENSION(KPROMA) :: &
                         & ZMAXTIME, & ! Time on which we can apply the current tendencies
@@ -369,32 +348,8 @@ REAL, DIMENSION(KPROMA) :: &
 LOGICAL, DIMENSION(KPROMA) :: LLCOMPUTE ! .TRUE. or points where we must compute tendencies,
 !
 !Output packed tendencies (for budgets only)
-REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change
-                        & ZRCHONI, & ! Homogeneous nucleation
-                        & ZRRHONG_MR, & ! Spontaneous freezing mixing ratio change
-                        & ZRVDEPS, & ! Deposition on r_s,
-                        & ZRIAGGS, & ! Aggregation on r_s
-                        & ZRIAUTS, & ! Autoconversion of r_i for r_s production
-                        & ZRVDEPG, & ! Deposition on r_g
-                        & ZRCAUTR,  & ! Autoconversion of r_c for r_r production
-                        & ZRCACCR, & ! Accretion of r_c for r_r production
-                        & ZRREVAV, & ! Evaporation of r_r
-                        & ZRIMLTC_MR, & ! Cloud ice melting mixing ratio change
-                        & ZRCBERI, & ! Bergeron-Findeisen effect
-                        & ZRHMLTR, & ! Melting of the hailstones
-                        & ZRSMLTG, & ! Conversion-Melting of the aggregates
-                        & ZRCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature
-                        & ZRRACCSS, ZRRACCSG, ZRSACCRG, & ! Rain accretion onto the aggregates
-                        & ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRSRIMCG_MR, & ! Cloud droplet riming of the aggregates
-                        & ZRICFRRG, ZRRCFRIG, ZRICFRR, & ! Rain contact freezing
-                        & ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, &  ! Graupel wet growth
-                        & ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, &  ! Graupel dry growth
-                        & ZRWETGH, & ! Conversion of graupel into hail
-                        & ZRWETGH_MR, & ! Conversion of graupel into hail, mr change
-                        & ZRGMLTR, & ! Melting of the graupel
-                        & ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, & ! Dry growth of hailstone
-                        & ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, & ! Wet growth of hailstone
-                        & ZRDRYHG    ! Conversion of hailstone into graupel
+REAL, DIMENSION(KPROMA, IBUNUM-IBUNUM_EXTRA) :: ZBU_SUM
+REAL, DIMENSION(KPROMA, IBUNUM) :: ZBU_INST
 !
 !For mixing-ratio-splitting
 LOGICAL :: LLCPZ0RT
@@ -467,33 +422,6 @@ DO JK = IKTB,IKTE
   ENDDO
 ENDDO
 !
-!Compute lambda_snow parameter
-!ZT en KELVIN
-DO JK = IKTB,IKTE
-  DO JIJ = IIJB,IIJE
-    ZLBDAS(JIJ,JK)=1000.
-  END DO
-END DO
-DO JK = IKTB,IKTE
-   DO JIJ = IIJB,IIJE
-         IF (PARAMI%LSNOW_T) THEN 
-            IF (PRST(JIJ,JK)>ICED%XRTMIN(5)) THEN
-               IF(ZT(JIJ,JK)>CST%XTT-10.0) THEN
-                  ZLBDAS(JIJ,JK) = MAX(MIN(ICED%XLBDAS_MAX, 10**(14.554-0.0423*ZT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS
-               ELSE
-                  ZLBDAS(JIJ,JK) = MAX(MIN(ICED%XLBDAS_MAX, 10**(6.226-0.0106*ZT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS
-               END IF
-            END IF
-#if defined(REPRO48) || defined(REPRO55)
-#else
-         ELSE
-            IF (PRST(JIJ,JK).GT.ICED%XRTMIN(5)) THEN
-               ZLBDAS(JIJ,JK)  = MAX(MIN(ICED%XLBDAS_MAX,ICED%XLBS*(PRHODREF(JIJ,JK)*PRST(JIJ,JK))**ICED%XLBEXS),ICED%XLBDAS_MIN)
-            END IF
-#endif
-         END IF
-   END DO
-END DO
 !
 !-------------------------------------------------------------------------------
 !
@@ -550,51 +478,10 @@ DO JK = IKTB,IKTE
 ENDDO
 
 IF(BUCONF%LBU_ENABLE) THEN
-  ZTOT_RVHENI(:)=0.
-  ZTOT_RCHONI(:)=0.
-  ZTOT_RRHONG(:)=0.
-  ZTOT_RVDEPS(:)=0.
-  ZTOT_RIAGGS(:)=0.
-  ZTOT_RIAUTS(:)=0.
-  ZTOT_RVDEPG(:)=0.
-  ZTOT_RCAUTR(:)=0.
-  ZTOT_RCACCR(:)=0.
-  ZTOT_RREVAV(:)=0.
-  ZTOT_RCRIMSS(:)=0.
-  ZTOT_RCRIMSG(:)=0.
-  ZTOT_RSRIMCG(:)=0.
-  ZTOT_RIMLTC(:)=0.
-  ZTOT_RCBERI(:)=0.
-  ZTOT_RHMLTR(:)=0.
-  ZTOT_RSMLTG(:)=0.
-  ZTOT_RCMLTSR(:)=0.
-  ZTOT_RRACCSS(:)=0.
-  ZTOT_RRACCSG(:)=0.
-  ZTOT_RSACCRG(:)=0.
-  ZTOT_RICFRRG(:)=0.
-  ZTOT_RRCFRIG(:)=0.
-  ZTOT_RICFRR(:)=0.
-  ZTOT_RCWETG(:)=0.
-  ZTOT_RIWETG(:)=0.
-  ZTOT_RRWETG(:)=0.
-  ZTOT_RSWETG(:)=0.
-  ZTOT_RCDRYG(:)=0.
-  ZTOT_RIDRYG(:)=0.
-  ZTOT_RRDRYG(:)=0.
-  ZTOT_RSDRYG(:)=0.
-  ZTOT_RWETGH(:)=0.
-  ZTOT_RGMLTR(:)=0.
-  ZTOT_RCWETH(:)=0.
-  ZTOT_RIWETH(:)=0.
-  ZTOT_RSWETH(:)=0.
-  ZTOT_RGWETH(:)=0.
-  ZTOT_RRWETH(:)=0.
-  ZTOT_RCDRYH(:)=0.
-  ZTOT_RIDRYH(:)=0.
-  ZTOT_RSDRYH(:)=0.
-  ZTOT_RRDRYH(:)=0.
-  ZTOT_RGDRYH(:)=0.
-  ZTOT_RDRYHG(:)=0.
+  DO JV=1, IBUNUM-IBUNUM_EXTRA
+    ZBU_PACK(:, JV)=0.
+    ZBU_SUM(:, JV)=0.
+  ENDDO
 ENDIF
 
 !-------------------------------------------------------------------------------
@@ -785,15 +672,7 @@ IF (KSIZE > 0) THEN
                         &ZPRES, ZCF, ZSIGMA_RC, &
                         &ZCIT, &
                         &ZZT, ZVART, &
-                        &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, &
-                        &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, &
-                        &ZRCAUTR, ZRCACCR, ZRREVAV, &
-                        &ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRRACCSS, ZRRACCSG, ZRSACCRG, ZRSMLTG, ZRCMLTSR, &
-                        &ZRICFRRG, ZRRCFRIG, ZRICFRR, ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, &
-                        &ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, ZRWETGH, ZRWETGH_MR, ZRGMLTR, &
-                        &ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, &
-                        &ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, ZRDRYHG, ZRHMLTR, &
-                        &ZRCBERI, &
+                        &ZBU_INST, &
                         &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, &
                         &ZA, ZB, &
                         &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, &
@@ -923,52 +802,26 @@ IF (KSIZE > 0) THEN
         !***       4.4 Mixing ratio change due to each process
         !
         IF(BUCONF%LBU_ENABLE) THEN
-          DO JL=1, IMICRO
-            ZTOT_RVHENI (JMICRO+JL-1)=ZTOT_RVHENI (JMICRO+JL-1)+ZRVHENI_MR(JL)
-            ZTOT_RCHONI (JMICRO+JL-1)=ZTOT_RCHONI (JMICRO+JL-1)+ZRCHONI   (JL)*ZMAXTIME(JL)
-            ZTOT_RRHONG (JMICRO+JL-1)=ZTOT_RRHONG (JMICRO+JL-1)+ZRRHONG_MR(JL)
-            ZTOT_RVDEPS (JMICRO+JL-1)=ZTOT_RVDEPS (JMICRO+JL-1)+ZRVDEPS   (JL)*ZMAXTIME(JL)
-            ZTOT_RIAGGS (JMICRO+JL-1)=ZTOT_RIAGGS (JMICRO+JL-1)+ZRIAGGS   (JL)*ZMAXTIME(JL)
-            ZTOT_RIAUTS (JMICRO+JL-1)=ZTOT_RIAUTS (JMICRO+JL-1)+ZRIAUTS   (JL)*ZMAXTIME(JL)
-            ZTOT_RVDEPG (JMICRO+JL-1)=ZTOT_RVDEPG (JMICRO+JL-1)+ZRVDEPG   (JL)*ZMAXTIME(JL)
-            ZTOT_RCAUTR (JMICRO+JL-1)=ZTOT_RCAUTR (JMICRO+JL-1)+ZRCAUTR   (JL)*ZMAXTIME(JL)
-            ZTOT_RCACCR (JMICRO+JL-1)=ZTOT_RCACCR (JMICRO+JL-1)+ZRCACCR   (JL)*ZMAXTIME(JL)
-            ZTOT_RREVAV (JMICRO+JL-1)=ZTOT_RREVAV (JMICRO+JL-1)+ZRREVAV   (JL)*ZMAXTIME(JL)
-            ZTOT_RCRIMSS(JMICRO+JL-1)=ZTOT_RCRIMSS(JMICRO+JL-1)+ZRCRIMSS  (JL)*ZMAXTIME(JL)
-            ZTOT_RCRIMSG(JMICRO+JL-1)=ZTOT_RCRIMSG(JMICRO+JL-1)+ZRCRIMSG  (JL)*ZMAXTIME(JL)
-            ZTOT_RSRIMCG(JMICRO+JL-1)=ZTOT_RSRIMCG(JMICRO+JL-1)+ZRSRIMCG  (JL)*ZMAXTIME(JL)+ZRSRIMCG_MR(JL)
-            ZTOT_RRACCSS(JMICRO+JL-1)=ZTOT_RRACCSS(JMICRO+JL-1)+ZRRACCSS  (JL)*ZMAXTIME(JL)
-            ZTOT_RRACCSG(JMICRO+JL-1)=ZTOT_RRACCSG(JMICRO+JL-1)+ZRRACCSG  (JL)*ZMAXTIME(JL)
-            ZTOT_RSACCRG(JMICRO+JL-1)=ZTOT_RSACCRG(JMICRO+JL-1)+ZRSACCRG  (JL)*ZMAXTIME(JL)
-            ZTOT_RSMLTG (JMICRO+JL-1)=ZTOT_RSMLTG (JMICRO+JL-1)+ZRSMLTG   (JL)*ZMAXTIME(JL)
-            ZTOT_RCMLTSR(JMICRO+JL-1)=ZTOT_RCMLTSR(JMICRO+JL-1)+ZRCMLTSR  (JL)*ZMAXTIME(JL)
-            ZTOT_RICFRRG(JMICRO+JL-1)=ZTOT_RICFRRG(JMICRO+JL-1)+ZRICFRRG  (JL)*ZMAXTIME(JL)
-            ZTOT_RRCFRIG(JMICRO+JL-1)=ZTOT_RRCFRIG(JMICRO+JL-1)+ZRRCFRIG  (JL)*ZMAXTIME(JL)
-            ZTOT_RICFRR (JMICRO+JL-1)=ZTOT_RICFRR (JMICRO+JL-1)+ZRICFRR   (JL)*ZMAXTIME(JL)
-            ZTOT_RCWETG (JMICRO+JL-1)=ZTOT_RCWETG (JMICRO+JL-1)+ZRCWETG   (JL)*ZMAXTIME(JL)
-            ZTOT_RIWETG (JMICRO+JL-1)=ZTOT_RIWETG (JMICRO+JL-1)+ZRIWETG   (JL)*ZMAXTIME(JL)
-            ZTOT_RRWETG (JMICRO+JL-1)=ZTOT_RRWETG (JMICRO+JL-1)+ZRRWETG   (JL)*ZMAXTIME(JL)
-            ZTOT_RSWETG (JMICRO+JL-1)=ZTOT_RSWETG (JMICRO+JL-1)+ZRSWETG   (JL)*ZMAXTIME(JL)
-            ZTOT_RWETGH (JMICRO+JL-1)=ZTOT_RWETGH (JMICRO+JL-1)+ZRWETGH   (JL)*ZMAXTIME(JL)+ZRWETGH_MR(JL)
-            ZTOT_RCDRYG (JMICRO+JL-1)=ZTOT_RCDRYG (JMICRO+JL-1)+ZRCDRYG   (JL)*ZMAXTIME(JL)
-            ZTOT_RIDRYG (JMICRO+JL-1)=ZTOT_RIDRYG (JMICRO+JL-1)+ZRIDRYG   (JL)*ZMAXTIME(JL)
-            ZTOT_RRDRYG (JMICRO+JL-1)=ZTOT_RRDRYG (JMICRO+JL-1)+ZRRDRYG   (JL)*ZMAXTIME(JL)
-            ZTOT_RSDRYG (JMICRO+JL-1)=ZTOT_RSDRYG (JMICRO+JL-1)+ZRSDRYG   (JL)*ZMAXTIME(JL)
-            ZTOT_RGMLTR (JMICRO+JL-1)=ZTOT_RGMLTR (JMICRO+JL-1)+ZRGMLTR   (JL)*ZMAXTIME(JL)
-            ZTOT_RCWETH (JMICRO+JL-1)=ZTOT_RCWETH (JMICRO+JL-1)+ZRCWETH   (JL)*ZMAXTIME(JL)
-            ZTOT_RIWETH (JMICRO+JL-1)=ZTOT_RIWETH (JMICRO+JL-1)+ZRIWETH   (JL)*ZMAXTIME(JL)
-            ZTOT_RSWETH (JMICRO+JL-1)=ZTOT_RSWETH (JMICRO+JL-1)+ZRSWETH   (JL)*ZMAXTIME(JL)
-            ZTOT_RGWETH (JMICRO+JL-1)=ZTOT_RGWETH (JMICRO+JL-1)+ZRGWETH   (JL)*ZMAXTIME(JL)
-            ZTOT_RRWETH (JMICRO+JL-1)=ZTOT_RRWETH (JMICRO+JL-1)+ZRRWETH   (JL)*ZMAXTIME(JL)
-            ZTOT_RCDRYH (JMICRO+JL-1)=ZTOT_RCDRYH (JMICRO+JL-1)+ZRCDRYH   (JL)*ZMAXTIME(JL)
-            ZTOT_RIDRYH (JMICRO+JL-1)=ZTOT_RIDRYH (JMICRO+JL-1)+ZRIDRYH   (JL)*ZMAXTIME(JL)
-            ZTOT_RSDRYH (JMICRO+JL-1)=ZTOT_RSDRYH (JMICRO+JL-1)+ZRSDRYH   (JL)*ZMAXTIME(JL)
-            ZTOT_RRDRYH (JMICRO+JL-1)=ZTOT_RRDRYH (JMICRO+JL-1)+ZRRDRYH   (JL)*ZMAXTIME(JL)
-            ZTOT_RGDRYH (JMICRO+JL-1)=ZTOT_RGDRYH (JMICRO+JL-1)+ZRGDRYH   (JL)*ZMAXTIME(JL)
-            ZTOT_RDRYHG (JMICRO+JL-1)=ZTOT_RDRYHG (JMICRO+JL-1)+ZRDRYHG   (JL)*ZMAXTIME(JL)
-            ZTOT_RHMLTR (JMICRO+JL-1)=ZTOT_RHMLTR (JMICRO+JL-1)+ZRHMLTR   (JL)*ZMAXTIME(JL)
-            ZTOT_RIMLTC (JMICRO+JL-1)=ZTOT_RIMLTC (JMICRO+JL-1)+ZRIMLTC_MR(JL)
-            ZTOT_RCBERI (JMICRO+JL-1)=ZTOT_RCBERI (JMICRO+JL-1)+ZRCBERI   (JL)*ZMAXTIME(JL)
+          !Mixing ratio change due to a tendency
+          DO JV=1, IBUNUM-IBUNUM_MR-IBUNUM_EXTRA
+            DO JL=1, IMICRO
+              ZBU_SUM(JL, JV) = ZBU_SUM(JL, JV) + ZBU_INST(JL, JV)*ZMAXTIME(JL)
+            ENDDO
+          ENDDO
+
+          !Mixing ratio change due to a mixing ratio change
+          DO JV=IBUNUM-IBUNUM_MR-IBUNUM_EXTRA+1, IBUNUM-IBUNUM_EXTRA
+            DO JL=1, IMICRO
+              ZBU_SUM(JL, JV) = ZBU_SUM(JL, JV) + ZBU_INST(JL, JV)
+            ENDDO
+          ENDDO
+
+          !Extra contribution as a mixing ratio change
+          DO JV=IBUNUM-IBUNUM_EXTRA+1, IBUNUM
+            JJV=IBUEXTRAIND(JV)
+            DO JL=1, IMICRO
+              ZBU_SUM(JL, JJV) = ZBU_SUM(JL, JJV) + ZBU_INST(JL, JV)
+            ENDDO
           ENDDO
         ENDIF
         !
@@ -995,7 +848,7 @@ IF (KSIZE > 0) THEN
     DO JL=1, IMICRO
       ZCITOUT  (I1(JL),I2(JL))=ZCIT   (JL)
       IF(PARAMI%LWARM) THEN
-        PEVAP3D(I1(JL),I2(JL))=ZRREVAV(JL)
+        PEVAP3D(I1(JL),I2(JL))=ZBU_INST(JL, IRREVAV)
       ENDIF
       ZWR(I1(JL),I2(JL),IRV)=ZVART(JL, IRV)
       ZWR(I1(JL),I2(JL),IRC)=ZVART(JL, IRC)
@@ -1007,6 +860,14 @@ IF (KSIZE > 0) THEN
         ZWR(I1(JL),I2(JL),IRH)=ZVART(JL, IRH)
       ENDIF
     ENDDO
+    IF(BUCONF%LBU_ENABLE) THEN
+      DO JV=1, IBUNUM-IBUNUM_EXTRA
+        DO JL=1, IMICRO
+          ZBU_PACK(JMICRO+JL-1, JV) = ZBU_SUM(JL, JV)
+        ENDDO
+      ENDDO
+    ENDIF
+
 
   ENDDO ! JMICRO
 ENDIF ! KSIZE > 0
@@ -1088,366 +949,15 @@ ENDDO
 !***     7.2    LBU_ENABLE case
 !
 IF(BUCONF%LBU_ENABLE) THEN
-  IF (BUCONF%LBUDGET_TH) THEN
-    ZZ_DIFF(:,:)=0.
-    DO JK = IKTB, IKTE
-      DO JIJ = IIJB, IIJE
-        ZZ_DIFF(JIJ, JK) = ZZ_LSFACT(JIJ, JK) - ZZ_LVFACT(JIJ, JK)
-      ENDDO
-    ENDDO
-  END IF
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP
-  END DO
-  DO JK = IKTB, IKTE
-    DO JIJ = IIJB, IIJE
-      ZW(JIJ,JK)=ZW(JIJ,JK)+ZZ_RVHENI(JIJ,JK)
-    ENDDO
-  ENDDO
-#ifdef REPRO48
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', -ZW(:, :)                *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HENU',  ZW(:, :)                *PRHODJ(:, :))
-#else
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIN',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIN', -ZW(:, :)                *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIN',  ZW(:, :)                *PRHODJ(:, :))
-#endif
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HON',  ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HON', -ZW(:, :)              *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HON',  ZW(:, :)              *PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RRHONG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'SFR',  ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'SFR', -ZW(:, :)              *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'SFR',  ZW(:, :)              *PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVDEPS(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ZW(:, :)                *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS',  ZW(:, :)                *PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIAGGS(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS', -ZW(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS',  ZW(:, :)*PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIAUTS(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AUTS', -ZW(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AUTS',  ZW(:, :)*PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVDEPG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ZW(:, :)                *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG',  ZW(:, :)                *PRHODJ(:, :))
-
-  IF(PARAMI%LWARM) THEN
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCAUTR(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO', -ZW(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO',  ZW(:, :)*PRHODJ(:, :))
-
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCACCR(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR', -ZW(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR',  ZW(:, :)*PRHODJ(:, :))
-
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RREVAV(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA', -ZW(:, :)*ZZ_LVFACT(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA',  ZW(:, :)                *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA', -ZW(:, :)                *PRHODJ(:, :))
-  ENDIF
-
-  ZW1(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCRIMSS(JL) * ZINV_TSTEP
-  END DO
-  ZW2(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RCRIMSG(JL) * ZINV_TSTEP
-  END DO
-  ZW3(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RSRIMCG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) &
-    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
-
-  ZW1(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RRACCSS(JL) * ZINV_TSTEP
-  END DO
-  ZW2(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRACCSG(JL) * ZINV_TSTEP
-  END DO
-  ZW3(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RSACCRG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) &
-    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RSMLTG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL', -ZW(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL',  ZW(:, :)*PRHODJ(:, :))
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCMLTSR(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CMEL', -ZW(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CMEL',  ZW(:, :)*PRHODJ(:, :))
-
-  ZW1(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RICFRRG(JL) * ZINV_TSTEP
-  END DO
-  ZW2(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRCFRIG(JL) * ZINV_TSTEP
-  END DO
-  ZW3(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RICFRR(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) &
-    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :)+ZW2(:, :))*PRHODJ(:, :))
-
-  ZW1(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCWETG(JL) * ZINV_TSTEP
-  END DO
-  ZW2(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRWETG(JL) * ZINV_TSTEP
-  END DO
-  ZW3(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIWETG(JL) * ZINV_TSTEP
-  END DO
-  ZW4(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSWETG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) &
-    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG', -ZW1(:, :)    *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG', -ZW2(:, :)    *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG', -ZW3(:, :)    *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG', -ZW4(:, :)    *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) &
-                                                                      &                             *PRHODJ(:, :))
-
-  IF(KRR==7) THEN
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RWETGH(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GHCV', -ZW(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'GHCV',  ZW(:, :)*PRHODJ(:, :))
-  END IF
-
-  ZW1(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCDRYG(JL) * ZINV_TSTEP
-  END DO
-  ZW2(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRDRYG(JL) * ZINV_TSTEP
-  END DO
-  ZW3(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIDRYG(JL) * ZINV_TSTEP
-  END DO
-  ZW4(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSDRYG(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) &
-    CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG', -ZW1(:, :)     *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG', -ZW2(:, :)     *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG', -ZW3(:, :)     *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG', -ZW4(:, :)     *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) &
-                                                                      &                              *PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RGMLTR(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT',  ZW(:, :)              *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ZW(:, :)              *PRHODJ(:, :))
-
-  IF(KRR==7) THEN
-    ZW1(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCWETH(JL) * ZINV_TSTEP
-    END DO
-    ZW2(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRWETH(JL) * ZINV_TSTEP
-    END DO
-    ZW3(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIWETH(JL) * ZINV_TSTEP
-    END DO
-    ZW4(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSWETH(JL) * ZINV_TSTEP
-    END DO
-    ZW5(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW5(I1TOT(JL), I2TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_TH) &
-      CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :)    *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :)    *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :)    *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :)    *PRHODJ(:, :))
-#ifdef REPRO48
-#else
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :)    *PRHODJ(:, :))
-#endif
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ &
-                                                                        &ZW4(:, :)+ZW5(:, : ))  *PRHODJ(:, :))
-
-#if defined(REPRO48) || defined(REPRO55)
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP
-    END DO
-#endif 
-#ifdef REPRO48
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :)-ZW(:, :))*PRHODJ(:, :))
-#endif
-#ifdef REPRO55
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :)*PRHODJ(:, :))
-#endif
-#if defined(REPRO48) || defined(REPRO55)
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV',  ZW(:, :)*PRHODJ(:, :))
-#endif
-
-    ZW1(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCDRYH(JL) * ZINV_TSTEP
-    END DO
-    ZW2(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRDRYH(JL) * ZINV_TSTEP
-    END DO
-    ZW3(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIDRYH(JL) * ZINV_TSTEP
-    END DO
-    ZW4(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSDRYH(JL) * ZINV_TSTEP
-    END DO
-    ZW5(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW5(I1TOT(JL), I2TOT(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP
-    END DO
-    ZW6(:,:) = 0.
-#if defined(REPRO48) || defined(REPRO55)
-    !ZW6 must be removed when REPRO* will be suppressed
-    DO JL=1, KSIZE
-      ZW6(I1TOT(JL), I2TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP
-    END DO
-#endif
-    IF (BUCONF%LBUDGET_TH) &
-      CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :)                 *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :)                 *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :)                 *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :)                 *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :)+ZW6(:, :))     *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+   &
-                                                                        &ZW4(:, :)+ZW5(:, :)-ZW6(:, :)) &
-                                                                        &                             *PRHODJ(:, :))
-
-#if defined(REPRO48) || defined(REPRO55)
-#else
-    !When REPRO48 will be suppressed, ZW6 must be removed
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV',  ZW(:, :)*PRHODJ(:, :))
-#endif
-
-    ZW(:,:) = 0.
-    DO JL=1, KSIZE
-      ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP
-    END DO
-    IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT',  ZW(:, :)              *PRHODJ(:, :))
-    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ZW(:, :)              *PRHODJ(:, :))
-  ENDIF
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIMLTC(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT',  ZW(:, :)              *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT', -ZW(:, :)              *PRHODJ(:, :))
-
-  ZW(:,:) = 0.
-  DO JL=1, KSIZE
-    ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCBERI(JL) * ZINV_TSTEP
-  END DO
-  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI',  ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', -ZW(:, :)              *PRHODJ(:, :))
-  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI',  ZW(:, :)              *PRHODJ(:, :))
-
-ENDIF
-!
-!***     7.3    Final tendencies
-!
-IF (BUCONF%LBU_ENABLE) THEN
+  !Budgets for the different processes
+  !They have been put in a subroutine because they perform pack/unpack
+  CALL ICE4_BUDGETS(D, PARAMI, BUCONF, KSIZE, KPROMA, PTSTEP, KRR, I1TOT, I2TOT, &
+                    ZZ_LVFACT, ZZ_LSFACT, PRHODJ, &
+                    ZZ_RVHENI, ZBU_PACK, &
+                    TBUDGETS, KBUDGETS)
+  !
+  !***     7.3    Final tendencies
+  !
   IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :)*PRHODJ(:, :))
   IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :)*PRHODJ(:, :))
   IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :)*PRHODJ(:, :))