diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90
index 5a824682580112b59bb000187ea54dcb2bc9d01d..71b55df3e4679a7d95c47ee1381916682dee33b5 100644
--- a/src/MNH/adv_forcingn.f90
+++ b/src/MNH/adv_forcingn.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 !     #####################
       MODULE MODI_ADV_FORCING_n
 !     #####################
@@ -227,8 +228,8 @@ END IF
 !
 !*       3.     BUDGET CALLS
 !   	        ------------
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'2DADV_BU_RTH')
-IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),6,'2DADV_BU_RRV')
+IF (LBUDGET_TH)  CALL BUDGET (PRTHS,NBUDGET_TH,'2DADV_BU_RTH')
+IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'2DADV_BU_RRV')
 !----------------------------------------------------------------------------
 !
 END SUBROUTINE ADV_FORCING_n
diff --git a/src/MNH/advecmet.f90 b/src/MNH/advecmet.f90
index 0297798cf2b673b7a3e69eabf973e45f6394cb59..d375b10821f3dbb3ff858719440b70dc1465d4dc 100644
--- a/src/MNH/advecmet.f90
+++ b/src/MNH/advecmet.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/05/22 19:02:00
-!-----------------------------------------------------------------
 !     #######################
       MODULE MODI_ADVECMET 
 !     #######################
@@ -174,15 +169,15 @@ IKU=SIZE(XZHAT)
                                         ! Thermodynamical variable
 PRTHS(:,:,:) = PRTHS(:,:,:)                            &
               -DXF( PRUCT(:,:,:) * MXM (PTHT(:,:,:)) ) 
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH')
 !
 PRTHS(:,:,:) = PRTHS(:,:,:)                            &
               -DYF( PRVCT(:,:,:) * MYM (PTHT(:,:,:)) ) 
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH')
 !
 PRTHS(:,:,:) = PRTHS(:,:,:)                            &
               -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PTHT(:,:,:)) )
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH')
 !
                                         ! Case with KRR moist variables 
 DO JRR=1,KRR
@@ -190,53 +185,53 @@ DO JRR=1,KRR
                    -DXF( PRUCT(:,:,:) * MXM (PRT(:,:,:,JRR)) ) 
 END DO
 !
-IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH')
+IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVX_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVX_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVX_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVX_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH')
 !
 DO JRR=1,KRR
   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR)                            &
                    -DYF( PRVCT(:,:,:) * MYM (PRT(:,:,:,JRR)) ) 
 END DO
 !
-IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH')
+IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVY_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVY_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVY_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVY_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH')
 !
 DO JRR=1,KRR
   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR)                            &
                    -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PRT(:,:,:,JRR)) )
 END DO
 !
-IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH')
+IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVZ_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVZ_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVZ_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVZ_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH')
 !
                                         ! TKE variable
 IF (SIZE(PTKET,1) /= 0) THEN
   PRTKES(:,:,:) = PRTKES(:,:,:)                            &
                  -DXF( PRUCT(:,:,:) * MXM (PTKET(:,:,:)) ) 
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE')
 !
   PRTKES(:,:,:) = PRTKES(:,:,:)                            &
                  -DYF( PRVCT(:,:,:) * MYM (PTKET(:,:,:)) ) 
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE')
 !
    PRTKES(:,:,:) = PRTKES(:,:,:)                           &
                  -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PTKET(:,:,:)) )
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE')
 END IF
 !
 ! 
diff --git a/src/MNH/advecmet_4th.f90 b/src/MNH/advecmet_4th.f90
index b708b8cf0c500a9a1709ed7c1815f20b7ba34bb9..61c463f3016bc5aa32b0fe5dc54ee3b08516552e 100644
--- a/src/MNH/advecmet_4th.f90
+++ b/src/MNH/advecmet_4th.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/05/22 19:00:38
-!-----------------------------------------------------------------
 !     ###############################
       MODULE MODI_ADVECMET_4TH
 !     ###############################
@@ -237,15 +232,15 @@ IGRID = 1
 !
 PRTHS(:,:,:) = PRTHS(:,:,:)                      &
               -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) 
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH')
 !
 PRTHS(:,:,:) = PRTHS(:,:,:)                      &
               -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) 
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH')
 !
 PRTHS(:,:,:) = PRTHS(:,:,:)                           &
               -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PTHT(:,:,:)) )
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH')
 !
 ! Turbulence variables
 !
@@ -260,15 +255,15 @@ IF ( GTKEALLOC ) THEN
 !
   PRTKES(:,:,:) = PRTKES(:,:,:) 	            &
                  -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) 
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE')
 !
   PRTKES(:,:,:) = PRTKES(:,:,:) 	            &
                  -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) 
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE')
 !
    PRTKES(:,:,:) = PRTKES(:,:,:) 	                  &
                  -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PTKET(:,:,:)) )
-  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE')
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE')
 ENDIF
 !
 !
@@ -285,33 +280,33 @@ DO JRR=1, KRR
 !
   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR)                            &
                      -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) 
-  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV')
-  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC')
-  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR')
-  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI')
-  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS')
-  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG')
-  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH')
+  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVX_BU_RRV')
+  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVX_BU_RRC')
+  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVX_BU_RRR')
+  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVX_BU_RRI')
+  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS')
+  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG')
+  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH')
 !
   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR)                            &
                      -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) )
-  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV')
-  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC')
-  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR')
-  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI')
-  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS')
-  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG')
-  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH')
+  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVY_BU_RRV')
+  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVY_BU_RRC')
+  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVY_BU_RRR')
+  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVY_BU_RRI')
+  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS')
+  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG')
+  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH')
 !
   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR)                            &
                     -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PRT(:,:,:,JRR)) )
-  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV')
-  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC')
-  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR')
-  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI')
-  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS')
-  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG')
-  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH')
+  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVZ_BU_RRV')
+  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVZ_BU_RRC')
+  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVZ_BU_RRR')
+  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVZ_BU_RRI')
+  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS')
+  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG')
+  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH')
 ENDDO
 !
 !
diff --git a/src/MNH/advecscalar.f90 b/src/MNH/advecscalar.f90
index 0377dc0dbb963dd4fe64f4ad2f23769a948ed2e2..4fd1e47a47cca9df67bb2c90e22847292a6c0437 100644
--- a/src/MNH/advecscalar.f90
+++ b/src/MNH/advecscalar.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     #######################
       MODULE MODI_ADVECSCALAR 
 !     #######################
@@ -146,7 +141,7 @@ DO JSV=1,KSV
 END DO
 IF (LBUDGET_SV) THEN
   DO JSV=1,KSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVX_BU_RSV')
   END DO
 END IF
 !
@@ -156,7 +151,7 @@ DO JSV=1,KSV
 END DO
 IF (LBUDGET_SV) THEN
   DO JSV=1,KSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVY_BU_RSV')
   END DO
 END IF
 !
@@ -166,7 +161,7 @@ DO JSV=1,KSV
 END DO
 IF (LBUDGET_SV) THEN
   DO JSV=1,KSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVZ_BU_RSV')
   END DO
 END IF
 !
diff --git a/src/MNH/advecscalar_4th.f90 b/src/MNH/advecscalar_4th.f90
index 1cf233594e2f27e4a1c1527b6e65998167c4b1f9..d41632edb4dc38147c2ec8b4df17bd837bb9d0a4 100644
--- a/src/MNH/advecscalar_4th.f90
+++ b/src/MNH/advecscalar_4th.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2019 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ###############################
       MODULE MODI_ADVECSCALAR_4TH
 !     ###############################
@@ -193,15 +188,15 @@ DO JSV=1,KSV
 !
   PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV)                            &
                     -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) )
-  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV')
+  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVX_BU_RSV')
 !
   PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV)                            &
                     -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) 
-  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV')
+  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVY_BU_RSV')
 !
   PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV)                           &
                     -DZF(1,IKU,1,  PRWCT(:,:,:) * MZM4(PSVT(:,:,:,JSV)) )
-  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV')
+  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVZ_BU_RSV')
 ENDDO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 50717842638c609e788fa79a38cd902dfe26e9bd..082a3851674ada94473f8f85226d77c26f9cb3f0 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -656,17 +656,17 @@ END IF
 !*       5.     BUDGETS                                                 
 !	        -------
 !
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'ADV_BU_RTH')
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE')
-IF (KRR>=1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') 
-IF (KRR>=2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') 
-IF (KRR>=3.AND.LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') 
-IF (KRR>=4.AND.LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') 
-IF (KRR>=5.AND.LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') 
-IF (KRR>=6.AND.LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') 
-IF (KRR>=7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH')
+IF ( LBUDGET_TH )                CALL BUDGET( PRTHS,             NBUDGET_TH,        'ADV_BU_RTH'  )
+IF ( LBUDGET_TKE )               CALL BUDGET( PRTKES,            NBUDGET_TKE,       'ADV_BU_RTKE' )
+IF ( KRR >= 1 .AND. LBUDGET_RV ) CALL BUDGET( PRRS(:, :, :, 1 ), NBUDGET_RV,        'ADV_BU_RRV'  )
+IF ( KRR >= 2 .AND. LBUDGET_RC ) CALL BUDGET( PRRS(:, :, :, 2 ), NBUDGET_RC,        'ADV_BU_RRC'  )
+IF ( KRR >= 3 .AND. LBUDGET_RR ) CALL BUDGET( PRRS(:, :, :, 3 ), NBUDGET_RR,        'ADV_BU_RRR'  )
+IF ( KRR >= 4 .AND. LBUDGET_RI ) CALL BUDGET( PRRS(:, :, :, 4 ), NBUDGET_RI,        'ADV_BU_RRI'  )
+IF ( KRR >= 5 .AND. LBUDGET_RS ) CALL BUDGET( PRRS(:, :, :, 5 ), NBUDGET_RS,        'ADV_BU_RRS'  )
+IF ( KRR >= 6 .AND. LBUDGET_RG ) CALL BUDGET( PRRS(:, :, :, 6 ), NBUDGET_RG,        'ADV_BU_RRG'  )
+IF ( KRR >= 7 .AND. LBUDGET_RH ) CALL BUDGET( PRRS(:, :, :, 7 ), NBUDGET_RH,        'ADV_BU_RRH'  )
 DO JSV=1,KSV
-  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV')
+  IF ( LBUDGET_SV )              CALL BUDGET (PRSVS(:,:,:,JSV),  JSV+NBUDGET_SV1-1, 'ADV_BU_RSV' )
 END DO
 !
 IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN
@@ -691,9 +691,9 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN
     END WHERE
   END DO
 !
-  IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , 4,'NEADV_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NEADV_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NEADV_BU_RRC')
+  IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , NBUDGET_TH,'NEADV_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'NEADV_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'NEADV_BU_RRC')
 
 END IF
 
diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90
index cce0919352c2fa42d65f7e1e87c7ed5e32a45ca1..54b6db96a69e35b151758818a5b72593f42bf21c 100644
--- a/src/MNH/advection_uvw.f90
+++ b/src/MNH/advection_uvw.f90
@@ -319,9 +319,9 @@ END DO
 !*       4.     BUDGETS              
 !	        -------
 !
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADV_BU_RU')
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADV_BU_RV')
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADV_BU_RW')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW')
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE ADVECTION_UVW
diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90
index e675af5bfbba6f961acb55c8e8c8a01f364d2e28..ea8051c4eedd464ef8d03526eb473ac923541673 100644
--- a/src/MNH/advection_uvw_cen.f90
+++ b/src/MNH/advection_uvw_cen.f90
@@ -248,9 +248,9 @@ PDUM = ZUS(:,:,:) - PUM(:,:,:)
 PDVM = ZVS(:,:,:) - PVM(:,:,:)
 PDWM = ZWS(:,:,:) - PWM(:,:,:)
 !
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADV_BU_RU')
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADV_BU_RV')
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADV_BU_RW')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/advecuvw.f90 b/src/MNH/advecuvw.f90
index d0f32702bebfbc3090a8e438bd0242811be8f712..c0488bbdad9bd278a3677d179b13d15479dadc83 100644
--- a/src/MNH/advecuvw.f90
+++ b/src/MNH/advecuvw.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ####################
       MODULE MODI_ADVECUVW 
 !     ####################
@@ -146,41 +141,41 @@ IKU=SIZE(XZHAT)
 !
 PRUS(:,:,:) = PRUS(:,:,:)                              &
              -DXM( MXF(PRUCT(:,:,:))*MXF(PUT(:,:,:)) ) 
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADVX_BU_RU')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'ADVX_BU_RU')
 !
 PRUS(:,:,:) = PRUS(:,:,:)                              &
              -DYF( MXM(PRVCT(:,:,:))*MYM(PUT(:,:,:)) ) 
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADVY_BU_RU')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'ADVY_BU_RU')
 !
 PRUS(:,:,:) = PRUS(:,:,:)                              &
              -DZF(1,IKU,1, MXM(PRWCT(:,:,:))*MZM(1,IKU,1,PUT(:,:,:)) )
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADVZ_BU_RU')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'ADVZ_BU_RU')
 !
 !
 PRVS(:,:,:) = PRVS(:,:,:)                              &
              -DXF( MYM(PRUCT(:,:,:))*MXM(PVT(:,:,:)) ) 
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADVX_BU_RV')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'ADVX_BU_RV')
 !
 PRVS(:,:,:) = PRVS(:,:,:)                              &
              -DYM( MYF(PRVCT(:,:,:))*MYF(PVT(:,:,:)) )  
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADVY_BU_RV')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'ADVY_BU_RV')
 !
 PRVS(:,:,:) = PRVS(:,:,:)                              &
              -DZF(1,IKU,1, MYM(PRWCT(:,:,:))*MZM(1,IKU,1,PVT(:,:,:)) )
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADVZ_BU_RV')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'ADVZ_BU_RV')
 !
 !
 PRWS(:,:,:) = PRWS(:,:,:)                              &
              -DXF( MZM(1,IKU,1,PRUCT(:,:,:))*MXM(PWT(:,:,:)) ) 
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADVX_BU_RW')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'ADVX_BU_RW')
 !
 PRWS(:,:,:) = PRWS(:,:,:)                              &
              -DYF( MZM(1,IKU,1,PRVCT(:,:,:))*MYM(PWT(:,:,:)) ) 
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADVY_BU_RW')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'ADVY_BU_RW')
 !
 PRWS(:,:,:) = PRWS(:,:,:)                              &
              -DZM(1,IKU,1, MZF(1,IKU,1,PRWCT(:,:,:))*MZF(1,IKU,1,PWT(:,:,:)) )
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADVZ_BU_RW')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'ADVZ_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/aircraft_balloon.f90 b/src/MNH/aircraft_balloon.f90
index fa1872b0a346dd3074eda9702937146475b5c50e..5e48b0481a0bdb7d3aea970c82dd1e593c45cde3 100644
--- a/src/MNH/aircraft_balloon.f90
+++ b/src/MNH/aircraft_balloon.f90
@@ -10,18 +10,12 @@ MODULE MODI_AIRCRAFT_BALLOON
 INTERFACE
 !
       SUBROUTINE AIRCRAFT_BALLOON(PTSTEP,                               &
-                                  TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                                   PXHAT, PYHAT, PZ,                     &
                                   PMAP, PLONOR, PLATOR,                 &
                                   PU, PV, PW, PP, PTH, PR, PSV, PTKE,   &
                                   PTS, PRHODREF, PCIT, PSEA)
 !
-USE MODD_TYPE_DATE
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z
@@ -53,7 +47,6 @@ END MODULE MODI_AIRCRAFT_BALLOON
 !
 !     ###################################################################
       SUBROUTINE AIRCRAFT_BALLOON(PTSTEP,                               &
-                                  TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                                   PXHAT, PYHAT, PZ,                     &
                                   PMAP, PLONOR, PLATOR,                 &
                                   PU, PV, PW, PP, PTH, PR, PSV, PTKE,   &
@@ -90,8 +83,9 @@ END MODULE MODI_AIRCRAFT_BALLOON
 !!     Original 15/05/2000
 !!
 !!              March, 2008 (P.Lacarrere) Add 3D fluxes
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!! --------------------------------------------------------------------------
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
 !          ------------
@@ -111,10 +105,6 @@ IMPLICIT NONE
 !
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -148,237 +138,198 @@ IF(.NOT. ALLOCATED(XSVW_FLUX)) &
 ALLOCATE(XSVW_FLUX(SIZE(PSV,1),SIZE(PSV,2),SIZE(PSV,3),SIZE(PSV,4)))
 !
 IF (TBALLOON1%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON1, PSEA                                            )
 ENDIF
 IF (TBALLOON2%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON2, PSEA                                            )
 ENDIF
 IF (TBALLOON3%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON3, PSEA                                            )
 ENDIF
 IF (TBALLOON4%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON4, PSEA                                            )
 ENDIF
 IF (TBALLOON5%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON5, PSEA                                            )
 ENDIF
 IF (TBALLOON6%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON6, PSEA                                            )
 ENDIF
 IF (TBALLOON7%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON7, PSEA                                            )
 ENDIF
 IF (TBALLOON8%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON8, PSEA                                            )
 ENDIF
 IF (TBALLOON9%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TBALLOON9, PSEA                                            )
 ENDIF
 !
 IF (TAIRCRAFT1%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT1, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT2%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT2, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT3%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT3, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT4%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT4, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT5%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT5, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT6%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT6, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT7%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT7, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT8%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT8, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT9%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT9, PSEA                                           )
 ENDIF
 IF (TAIRCRAFT10%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT10, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT11%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT11, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT12%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT12, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT13%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT13, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT14%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT14, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT15%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT15, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT16%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT16, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT17%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT17, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT18%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT18, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT19%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT19, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT20%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT20, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT21%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT21, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT22%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT22, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT23%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT23, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT24%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT24, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT25%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT25, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT26%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT26, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT27%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT27, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT28%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT28, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT29%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT29, PSEA                                          )
 ENDIF
 IF (TAIRCRAFT30%NMODEL /= 0) THEN
-CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,                &
-                           PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,                    &
+CALL AIRCRAFT_BALLOON_EVOL(PTSTEP,  PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR,           &
                            PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT,   &
                            TAIRCRAFT30, PSEA                                          )
 ENDIF
diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index 12f4f595d6cf394d7379a31fabbf68d723013dba..73d2b129408c2d538b723562c6c9271e6283afc7 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -10,20 +10,14 @@ MODULE MODI_AIRCRAFT_BALLOON_EVOL
 INTERFACE
 !
       SUBROUTINE AIRCRAFT_BALLOON_EVOL(PTSTEP,               &
-                       TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                        PXHAT, PYHAT, PZ,                     &
                        PMAP, PLONOR, PLATOR,                 &
                        PU, PV, PW, PP, PTH, PR, PSV, PTKE,   &
                        PTS, PRHODREF, PCIT,TPFLYER, PSEA     )
 !
-USE MODD_TYPE_DATE
 USE MODD_AIRCRAFT_BALLOON
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -55,7 +49,6 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL
 !
 !     ########################################################
       SUBROUTINE AIRCRAFT_BALLOON_EVOL(PTSTEP,               &
-                       TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                        PXHAT, PYHAT, PZ,                     &
                        PMAP, PLONOR, PLATOR,                 &
                        PU, PV, PW, PP, PTH, PR, PSV, PTKE,   &
@@ -128,7 +121,8 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL
 !!      October, 2016 (G.DELAUTIER) LIMA
 !!     March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -167,9 +161,9 @@ USE MODD_RAIN_ICE_DESCR,   ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEX
                                  XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,&
                                  XRTMIN_I=>XRTMIN,XCONC_LAND,XCONC_SEA
 USE MODD_REF_n,            ONLY: XRHODREF
-USE MODD_TIME
+USE MODD_TIME,             only: tdtexp
+USE MODD_TIME_n,           only: tdtcur
 USE MODD_TURB_FLUX_AIRCRAFT_BALLOON
-USE MODD_TYPE_DATE
 !
 USE MODE_DATETIME
 USE MODE_FGAU,             ONLY: GAULAG
@@ -188,10 +182,6 @@ IMPLICIT NONE
 !
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -220,7 +210,6 @@ REAL, DIMENSION(:,:),     INTENT(IN)     :: PSEA
 !
 INTEGER :: IMI        ! model index
 REAL    :: ZTHIS_PROC ! 1 if balloon is currently treated by this proc., else 0
-REAL    :: ZTIMEEXP   ! elpased time between start of experiment and segment
 !
 INTEGER :: IIB        ! current processor domain sizes
 INTEGER :: IJB
@@ -398,7 +387,7 @@ ZYHATM(  IJU  )=1.5*PYHAT(  IJU  )-0.5*PYHAT(  IJU-1)
 !*      2.3  Compute time until launch by comparison of dates and times
 !            ----------------------------------------------------------
 !
-CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST)
+CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TDTCUR,ZTDIST)
 !
 !*      3.   LAUNCH
 !            ------
@@ -412,7 +401,7 @@ IF (.NOT. TPFLYER%FLY) THEN
 !*      3.1  comparison of dates and times
 !            -----------------------------
 !
-!  CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST)
+!  CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TDTCUR,ZTDIST)
 !
 !*      3.2  launch/takeoff is effective
 !            ---------------------------
@@ -446,8 +435,8 @@ IF (.NOT. TPFLYER%FLY) THEN
         IF (ZTDIST <= PTSTEP ) THEN
           WRITE(ILUOUT,*) '-------------------------------------------------------------------'
           WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' takes off the   ',      &
-                      TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/',      &
-                      TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.'
+                      TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/',      &
+                      TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.'
           WRITE(ILUOUT,*) '-------------------------------------------------------------------'
         ENDIF
       ENDIF
@@ -456,8 +445,8 @@ IF (.NOT. TPFLYER%FLY) THEN
       GLAUNCH     = .TRUE.
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
       WRITE(ILUOUT,*) 'Balloon  ',TPFLYER%TITLE,' is launched the ',      &
-                    TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/',      &
-                    TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.'
+                    TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/',      &
+                    TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.'
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
     END IF
 !
@@ -502,25 +491,14 @@ END IF
 !
 IF (GSTORE) THEN
   IN = TPFLYER%N_CUR
-  CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
-  !
-  TPFLYER%TIME(IN) = (IN-1) * TPFLYER%STEP + ZTIMEEXP
-  TPFLYER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR
-  TPFLYER%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH
-  TPFLYER%DATIME( 3,IN) = TPDTEXP%TDATE%DAY
-  TPFLYER%DATIME( 4,IN) = TPDTEXP%TIME
-  TPFLYER%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR
-  TPFLYER%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH
-  TPFLYER%DATIME( 7,IN) = TPDTSEG%TDATE%DAY
-  TPFLYER%DATIME( 8,IN) = TPDTSEG%TIME
-  TPFLYER%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR
-  TPFLYER%DATIME(10,IN) = TPDTMOD%TDATE%MONTH
-  TPFLYER%DATIME(11,IN) = TPDTMOD%TDATE%DAY
-  TPFLYER%DATIME(12,IN) = TPDTMOD%TIME
-  TPFLYER%DATIME(13,IN) = TPDTCUR%TDATE%YEAR
-  TPFLYER%DATIME(14,IN) = TPDTCUR%TDATE%MONTH
-  TPFLYER%DATIME(15,IN) = TPDTCUR%TDATE%DAY
-  TPFLYER%DATIME(16,IN) = TPDTCUR%TIME
+#if 0
+  tpflyer%tpdates(in)%date%year  = tdtexp%date%year
+  tpflyer%tpdates(in)%date%month = tdtexp%date%month
+  tpflyer%tpdates(in)%date%day   = tdtexp%date%day
+  tpflyer%tpdates(in)%time       = tdtexp%time + ( in - 1 ) * tpflyer%step
+#else
+  tpflyer%tpdates(in) = tdtcur
+#endif
 END IF
 !
 IF ( TPFLYER%FLY) THEN
@@ -829,19 +807,19 @@ IF ( TPFLYER%FLY) THEN
     TPFLYER%FLY = .FALSE.
     IF (TPFLYER%TYPE=='AIRCRA' .AND. .NOT. GLAUNCH ) THEN
       WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' flew out of the domain the ', &
-                    TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/',            &
-                    TPDTCUR%TDATE%YEAR,' at ',TPDTCUR%TIME,' sec.'
+                    TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/',            &
+                    TDTCUR%TDATE%YEAR,' at ',TDTCUR%TIME,' sec.'
     ELSE IF (TPFLYER%TYPE /= 'AIRCRA') THEN
       WRITE(ILUOUT,*) 'Balloon ',TPFLYER%TITLE,' crashed the ',                 &
-                    TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/',            &
-                    TPDTCUR%TDATE%YEAR,' at ',TPDTCUR%TIME,' sec.'
+                    TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/',            &
+                    TDTCUR%TDATE%YEAR,' at ',TDTCUR%TIME,' sec.'
     END IF
   ELSE
     IF (TPFLYER%TYPE=='AIRCRA' .AND. .NOT. GLAUNCH .AND. ZTDIST > PTSTEP ) THEN
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
       WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' flies  in leg',TPFLYER%SEGCURN ,' the ',  &
-        TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/',      &
-        TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.'
+        TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/',      &
+        TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.'
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
     ENDIF
 !
@@ -1708,12 +1686,12 @@ IF (TPFLYER%NMODEL /= IMODEL) THEN
    IF (NDAD(IMODEL) == TPFLYER%NMODEL) THEN
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
       WRITE(ILUOUT,*) TPFLYER%TITLE,' comes from model ',IMODEL,' in  model ',&
-             TPFLYER%NMODEL,' at ',NINT(TPDTCUR%TIME),' sec.'
+             TPFLYER%NMODEL,' at ',NINT(TDTCUR%TIME),' sec.'
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
    ELSE
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
       WRITE(ILUOUT,*) TPFLYER%TITLE,' goes from model ',IMODEL,' to  model ',&
-             TPFLYER%NMODEL,' at ',NINT(TPDTCUR%TIME),' sec.'
+             TPFLYER%NMODEL,' at ',NINT(TDTCUR%TIME),' sec.'
       WRITE(ILUOUT,*) '-------------------------------------------------------------------'
    ENDIF
 ENDIF
diff --git a/src/MNH/c2r2_adjust.f90 b/src/MNH/c2r2_adjust.f90
index 265452f1681cfa2797ae482ccd843fc3ce233e4b..ebbdb572f619806fb953f9e65161d021251fb61b 100644
--- a/src/MNH/c2r2_adjust.f90
+++ b/src/MNH/c2r2_adjust.f90
@@ -420,12 +420,12 @@ END IF
 !            ----------------------
 !
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH')
 IF (LBUDGET_SV) THEN
-  CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCN
-  CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCC
+  CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1+(NSV_C2R2BEG-1),  'CEVA_BU_RSV') ! RCN
+  CALL BUDGET (PCCS(:,:,:)   * PRHODJ(:,:,:),NBUDGET_SV1+(NSV_C2R2BEG-1)+1,'CEVA_BU_RSV') ! RCC
 END IF
 !
 !------------------------------------------------------------------------------
diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90
index 30ea347667318cda050a7dd246ab9396b5635e95..b81da5894992fa6cb6dc9f89b007cdc3a8dcad76 100644
--- a/src/MNH/ch_monitorn.f90
+++ b/src/MNH/ch_monitorn.f90
@@ -1278,7 +1278,7 @@ END DO
 !
 IF (LBUDGET_SV) THEN
   DO JSV=NSV_CHEMBEG,NSV_CHEMEND
-    CALL BUDGET(XRSVS(:,:,:,JSV),JSV+12,'CHEM_BU_RSV')
+    CALL BUDGET(XRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'CHEM_BU_RSV')
   ENDDO
 ENDIF
 !
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index b68caaebd148f084c2a225f44541877342802d92..af19ea567260d44334e32e912252980f5018ed86 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -92,6 +92,7 @@
 !  P. Wautelet 11/02/2019: added missing use of MODI_CH_MONITOR_n
 !  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !  P. Wautelet 26/07/2019: bug correction: deallocate of zsea and ztown done too early
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -177,6 +178,7 @@ IMPLICIT NONE
 !*       0.1   declarations of local variables
 !
 TYPE(DATE_TIME)   :: TXDTBAL   ! current time and date for BALLOON and AIRCRAFT trajectories
+TYPE(DATE_TIME)   :: TPDTCUR_SAVE
 CHARACTER (LEN=28), DIMENSION(1) :: YINIFILE ! names of the INPUT FM-file
 CHARACTER (LEN=28), DIMENSION(1) :: YINIFILEPGD ! names of the INPUT FM-file
 CHARACTER (LEN=5)  :: YSUFFIX   ! character string for the OUTPUT FM-file number
@@ -532,12 +534,15 @@ IF ( LAIRCRAFT_BALLOON ) THEN
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
+!
+  TPDTCUR_SAVE = TDTCUR
 !
   TXDTBAL%TDATE%YEAR  = TDTCUR%TDATE%YEAR
   TXDTBAL%TDATE%MONTH = TDTCUR%TDATE%MONTH
   TXDTBAL%TDATE%DAY   = TDTCUR%TDATE%DAY
   TXDTBAL%TIME        = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2.
   CALL DATETIME_CORRECTDATE(TXDTBAL)
+  TDTCUR = TXDTBAL !TDTCUR is used in AIRCRAFT_BALLOON
 !
   ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
   ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
@@ -546,15 +551,18 @@ IF ( LAIRCRAFT_BALLOON ) THEN
   CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
   DO ISTEPBAL=1,NTIME_AIRCRAFT_BALLOON,INT(XSTEP_AIRCRAFT_BALLOON)
     CALL AIRCRAFT_BALLOON(XSTEP_AIRCRAFT_BALLOON,                &
-                      TDTEXP, TDTMOD, TDTCUR, TXDTBAL,           &
                       XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, &
                       XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT,    &
                       XTKET, XTSRAD, XRHODREF,XCIT,ZSEA)
-!
+
     TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON
     CALL DATETIME_CORRECTDATE(TXDTBAL)
+    TDTCUR = TXDTBAL !TDTCUR is used in AIRCRAFT_BALLOON
   ENDDO
   DEALLOCATE (ZSEA,ZTOWN)
+!
+  TDTCUR = TPDTCUR_SAVE
+!
   CALL IO_Header_write(TZDIACFILE)
   CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE)
   CALL WRITE_AIRCRAFT_BALLOON(TZDIACFILE)
diff --git a/src/MNH/drag_veg.f90 b/src/MNH/drag_veg.f90
index ce157a15406a436c180f33162b87687868ab56a1..e8ece294e53cd20d217487affc1577c08c5f2d51 100644
--- a/src/MNH/drag_veg.f90
+++ b/src/MNH/drag_veg.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2009-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     #######################
        MODULE MODI_DRAG_VEG
 !     #######################
@@ -270,10 +271,10 @@ IF (ODEPOTREE) THEN
 !
 END IF
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'DRAG_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'DRAG_BU_RV')
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'DEPOTR_BU_RRC')
-IF (LBUDGET_SV) CALL BUDGET (PSVS(:,:,:,NSV_C2R2BEG+1),14+(NSV_C2R2BEG-1),'DEPOTR_BU_RSV')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'DRAG_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'DRAG_BU_RV')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'DEPOTR_BU_RRC')
+IF (LBUDGET_SV) CALL BUDGET (PSVS(:,:,:,NSV_C2R2BEG+1),NBUDGET_SV1+(NSV_C2R2BEG-1)+1,'DEPOTR_BU_RSV')
 !
 !
 !*      3.     Computations of TKE  tendency due to canopy drag
@@ -300,6 +301,6 @@ ZTKES(:,:,:)=  (ZTKET(:,:,:) + (ZCDRAG(:,:,:)* ZDENSITY(:,:,:) &
 !
 PRTKES(:,:,:)=PRTKES(:,:,:)+((ZTKES(:,:,:)-ZTKET(:,:,:))*PRHODJ(:,:,:)/PTSTEP)
 !
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),5,'DRAG_BU_RTKE')
+IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DRAG_BU_RTKE')
 !
 END SUBROUTINE DRAG_VEG
diff --git a/src/MNH/dyn_sources.f90 b/src/MNH/dyn_sources.f90
index 5bdb5483a3334671dea952eafc5b626efe5a7406..56c6a20103c3d41ded09dceadeac0530cbc05dcb 100644
--- a/src/MNH/dyn_sources.f90
+++ b/src/MNH/dyn_sources.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-!-----------------------------------------------------------------
 !     #######################
       MODULE MODI_DYN_SOURCES
 !     #######################
@@ -267,9 +263,9 @@ IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) )  THEN
 !
 END IF
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'CURV_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'CURV_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'CURV_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'CURV_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'CURV_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'CURV_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
@@ -298,9 +294,9 @@ IF (LCORIO)   THEN
 !
 END IF                      
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'COR_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'COR_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'COR_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'COR_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'COR_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'COR_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
@@ -339,7 +335,7 @@ IF( .NOT.L1D ) THEN
 !
   END IF
 !
-  IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'PREF_BU_RTH')
+  IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'PREF_BU_RTH')
 !
 END IF
 !
diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90
index f5b1244bfb2cb2c1b97ffbbab9e7a00a34cadab6..d29f434ea2b462e177d6e88e5d8d17573367d525 100644
--- a/src/MNH/endstep.f90
+++ b/src/MNH/endstep.f90
@@ -514,8 +514,8 @@ END IF
 !*      10.   STORAGE IN BUDGET ARRAYS
 !
 IF (LBU_ENABLE) THEN
-  NBUPROCCTR(1:12+KSV)=3
-  NBUCTR_ACTV(1:12+KSV)=3
+  NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 3
+  NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 3
 !
   IF (LBUDGET_U)   CALL BUDGET( PUT(:,:,:)   * PRHODJ(:,:,:) / PTSTEP, NBUDGET_U,   'AVEF_BU_RU'   )
   IF (LBUDGET_V)   CALL BUDGET( PVT(:,:,:)   * PRHODJ(:,:,:) / PTSTEP, NBUDGET_V,   'AVEF_BU_RV'   )
@@ -535,8 +535,8 @@ IF (LBU_ENABLE) THEN
     END DO
   END IF
 !
-  NBUPROCCTR(1:12+KSV)=2
-  NBUCTR_ACTV(1:12+KSV)=2
+  NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 2
+  NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 2
 !
   IF (LBUDGET_U)   CALL BUDGET( PUS          * MXM(PRHODJ)         / PTSTEP, NBUDGET_U,   'ENDF_BU_RU'   )
   IF (LBUDGET_V)   CALL BUDGET( PVS          * MYM(PRHODJ)         / PTSTEP, NBUDGET_V,   'ENDF_BU_RV'   )
diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90
index d6c619db4af46d775e511a1dfed82a7cf4909d42..8018b390edf7fec0cfdbcc522470b82d04f7fbfa 100644
--- a/src/MNH/endstep_budget.f90
+++ b/src/MNH/endstep_budget.f90
@@ -10,7 +10,7 @@
 INTERFACE
 !
       SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT,       &
-                               TPDTCUR,TPDTMOD,PTSTEP,KSV)
+                               TPDTCUR,PTSTEP,KSV)
 !
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
@@ -18,7 +18,6 @@ USE MODD_TYPE_DATE
 TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
 INTEGER,           INTENT(IN) :: KTCOUNT    ! temporal loop counter
 TYPE (DATE_TIME),  INTENT(IN) :: TPDTCUR    ! Current date and time
-TYPE (DATE_TIME),  INTENT(IN) :: TPDTMOD    ! Creation date and time
 REAL,              INTENT(IN) :: PTSTEP     ! time step
 INTEGER,           INTENT(IN) :: KSV        ! Number of Scalar Variables
 !
@@ -30,7 +29,7 @@ END MODULE MODI_ENDSTEP_BUDGET
 !
 !     ####################################################
       SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT,       &
-                               TPDTCUR,TPDTMOD,PTSTEP,KSV)
+                               TPDTCUR,PTSTEP,KSV)
 !     ####################################################
 !
 !!****  *ENDSTEP_BUDGET* - routine to call the routine write_budget 
@@ -105,7 +104,7 @@ USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TIME
 USE MODD_BUDGET
 !
-USE MODI_WRITE_BUDGET
+use mode_write_budget, only: Write_budget
 !
 IMPLICIT NONE
 !  
@@ -115,7 +114,6 @@ IMPLICIT NONE
 TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
 INTEGER,           INTENT(IN) :: KTCOUNT    ! temporal loop counter
 TYPE (DATE_TIME),  INTENT(IN) :: TPDTCUR    ! Current date and time
-TYPE (DATE_TIME),  INTENT(IN) :: TPDTMOD    ! Creation date and time
 REAL,              INTENT(IN) :: PTSTEP     ! time step
 INTEGER,           INTENT(IN) :: KSV        ! Number of Scalar Variables
 !
@@ -131,8 +129,8 @@ SELECT CASE(CBUTYPE)
 !
 !*	 1.1    storage of the budget fields 
 !
-    IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN  
-      CALL WRITE_BUDGET(TPDIAFILE,TPDTCUR,TPDTMOD,PTSTEP, KSV )
+    IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN
+      call Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
 !
 !*	 1.2    resetting the budget arrays to 0.
 !
@@ -168,7 +166,7 @@ SELECT CASE(CBUTYPE)
 !
 !*	 2.1    storage of the budget fields
 ! 
-      CALL WRITE_BUDGET(TPDIAFILE,TPDTCUR,TPDTMOD,PTSTEP, KSV)
+      call Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
 !
 !*	 2.2    reset the budget fields to 0.
 !
diff --git a/src/MNH/exchange.f90 b/src/MNH/exchange.f90
index b6d8bb8b3a90378304d730c19fbdfeecb932cef2..01634dd55e7805147566b0d12449864570f8b362 100644
--- a/src/MNH/exchange.f90
+++ b/src/MNH/exchange.f90
@@ -98,7 +98,7 @@ END MODULE MODI_EXCHANGE
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_GRID_n
 USE MODD_NSV
-USE MODD_BUDGET,      ONLY : LBUDGET_SV
+USE MODD_BUDGET,      ONLY : LBUDGET_SV, NBUDGET_SV1
 USE MODD_CST,         ONLY : XMNH_TINY
 USE MODD_LUNIT_n,     ONLY : TLUOUT
 USE MODI_SHUMAN
@@ -210,7 +210,7 @@ IF (LUSECHEM) THEN
 !
   IF (LBUDGET_SV) THEN
     DO JSV=NSV_CHEMBEG,NSV_CHEMEND
-      CALL BUDGET(PRSVS(:,:,:,JSV),JSV+12,'NEGA_BU_RSV')
+      CALL BUDGET(PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEGA_BU_RSV')
     ENDDO
   ENDIF
 !
@@ -251,7 +251,7 @@ IF (LUSECHEM) THEN
     END DO
     IF (LBUDGET_SV) THEN
       DO JSV=NSV_AERBEG,NSV_AEREND
-        CALL BUDGET(PRSVS(:,:,:,JSV),JSV+12,'NEGA_BU_RSV')
+        CALL BUDGET(PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEGA_BU_RSV')
       ENDDO
     ENDIF
   ENDIF
diff --git a/src/MNH/fast_terms.f90 b/src/MNH/fast_terms.f90
index eba11a693b9118a2636dd07a693234fe732c59de..23532ed69e7d2812d37f25dc10d96b574d40b528 100644
--- a/src/MNH/fast_terms.f90
+++ b/src/MNH/fast_terms.f90
@@ -420,9 +420,9 @@ ENDIF
 !            ----------------------
 !
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH')
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/MNH/fct_met.f90 b/src/MNH/fct_met.f90
index 653b238a2235d29b15a741ebfa791eb13b544a65..70ca6911ebae613d96229d2562bca57a0c545a00 100644
--- a/src/MNH/fct_met.f90
+++ b/src/MNH/fct_met.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 newsrc 2006/06/06 12:00:47
-!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_FCT_MET
 !     ######################
@@ -168,15 +163,15 @@ IKU=SIZE(XZHAT)
 !
   PRTHS(:,:,:) = PRTHS(:,:,:)                            & 
                 - DXF(PRUCT(:,:,:)*MXM (PTHT(:,:,:)))     
-  IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH')
+  IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH')
 !
   PRTHS(:,:,:) = PRTHS(:,:,:)                            &
                 - DYF(PRVCT(:,:,:)*MYM (PTHT(:,:,:)))     
-  IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH')
+  IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH')
 !
   PRTHS(:,:,:) = PRTHS(:,:,:)                            &
                 - DZF(1,IKU,1,PRWCT(:,:,:)*MZM (1,IKU,1,PTHT(:,:,:)))     
-  IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH')
+  IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH')
 !
 !*       1.2 No condensation case: Vapor ---> advected by a FCT scheme
 !
@@ -190,15 +185,15 @@ IKU=SIZE(XZHAT)
 !
     PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZFX(:,:,:))
     IF (LBUDGET_RV)                          &
-                              CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV')
+                              CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV')
 !
     PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZFY(:,:,:))
     IF (LBUDGET_RV)                          & 
-                              CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV')
+                              CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV')
 !
     PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZFZ(:,:,:))
     IF (LBUDGET_RV)                          &
-                              CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV')
+                              CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV')
   END IF 
 !
 !*       1.3 No ice case:          rv+rc ---> advected by the FCT scheme
@@ -220,18 +215,18 @@ IKU=SIZE(XZHAT)
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZRTFX(:,:,:))
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DXF(  ZFX(:,:,:)) 
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVX_BU_RRC')
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZRTFY(:,:,:))
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DYF(  ZFY(:,:,:))
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVY_BU_RRC')
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZRTFZ(:,:,:))
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DZF(1,IKU,1,  ZFZ(:,:,:))
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVZ_BU_RRC')
 !
   END IF
 !
@@ -255,13 +250,13 @@ IKU=SIZE(XZHAT)
   ZRTFZ(:,:,:) = ZRTFZ(:,:,:) - ZFZ(:,:,:)        !
 !
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DXF(  ZFX(:,:,:))
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVX_BU_RRC')
 !
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DYF(  ZFY(:,:,:))
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVY_BU_RRC')
 !
   PRRS(:,:,:,2) = PRRS(:,:,:,2) - DZF(1,IKU,1,  ZFZ(:,:,:))
-  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC')
+  IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVZ_BU_RRC')
 !
 !
   ZFX(:,:,:) = PRUCT(:,:,:) * MXM (PRT(:,:,:,4))    !
@@ -274,18 +269,18 @@ IKU=SIZE(XZHAT)
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZRTFX(:,:,:))
   PRRS(:,:,:,4) = PRRS(:,:,:,4) - DXF(  ZFX(:,:,:)) 
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV')
-  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV')
+  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVX_BU_RRI')
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZRTFY(:,:,:))
   PRRS(:,:,:,4) = PRRS(:,:,:,4) - DYF(  ZFY(:,:,:)) 
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV')
-  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV')
+  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVY_BU_RRI')
 !
   PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZRTFZ(:,:,:))
   PRRS(:,:,:,4) = PRRS(:,:,:,4) - DZF(1,IKU,1,  ZFZ(:,:,:))
-  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV')
-  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI')
+  IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV')
+  IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVZ_BU_RRI')
 !
   END IF
 !
@@ -298,13 +293,13 @@ IKU=SIZE(XZHAT)
                       ZFX(:,:,:), ZFY(:,:,:), ZFZ(:,:,:)                 )
 !
   PRRS(:,:,:,3) = PRRS(:,:,:,3) - DXF(  ZFX(:,:,:)) 
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVX_BU_RRR')
 !
   PRRS(:,:,:,3) = PRRS(:,:,:,3) - DYF(  ZFY(:,:,:)) 
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVY_BU_RRR')
 !
   PRRS(:,:,:,3) = PRRS(:,:,:,3) - DZF(1,IKU,1,  ZFZ(:,:,:)) 
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVZ_BU_RRR')
 !
   END IF
 !
@@ -318,27 +313,27 @@ IKU=SIZE(XZHAT)
 !
     PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DXF(ZFX(:,:,:)) 
     IF (JRR==5.AND.LBUDGET_RS) &
-                                    CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS')
+                                    CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS')
     IF (JRR==6.AND.LBUDGET_RG) &
-                                    CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG')
+                                    CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG')
     IF (JRR==7.AND.LBUDGET_RH) &
-                                    CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH')
+                                    CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH')
 !
     PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DYF(ZFY(:,:,:))
     IF (JRR==5.AND.LBUDGET_RS) &
-                                    CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS')
+                                    CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS')
     IF (JRR==6.AND.LBUDGET_RG) &
-                                    CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG')
+                                    CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG')
     IF (JRR==7.AND.LBUDGET_RH) &
-                                    CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH')
+                                    CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH')
 !
     PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DZF(1,IKU,1,ZFZ(:,:,:))
     IF (JRR==5.AND.LBUDGET_RS) &
-                                    CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS')
+                                    CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS')
     IF (JRR==6.AND.LBUDGET_RG) &
-                                    CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG')
+                                    CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG')
     IF (JRR==7.AND.LBUDGET_RH) &
-                                    CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH')
+                                    CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH')
 !
   END DO
 !
@@ -354,13 +349,13 @@ IKU=SIZE(XZHAT)
                          ZFX(:,:,:), ZFY(:,:,:), ZFZ(:,:,:)      )
 !
     PRTKES(:,:,:) = PRTKES(:,:,:) - DXF(ZFX(:,:,:))     
-    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE')
+    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE')
 !
     PRTKES(:,:,:) = PRTKES(:,:,:) - DYF(ZFY(:,:,:))   
-    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE')
+    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE')
 !
     PRTKES(:,:,:) = PRTKES(:,:,:) - DZF(1,IKU,1,ZFZ(:,:,:)) 
-    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE')
+    IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE')
 !
   END IF
 !
diff --git a/src/MNH/fct_scalar.f90 b/src/MNH/fct_scalar.f90
index 75df108044a26b5c9eb00a7b39b305cb10b9268e..9af746bb554b79aa7ab7745b6b44ee0bb351630c 100644
--- a/src/MNH/fct_scalar.f90
+++ b/src/MNH/fct_scalar.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 adiab 2006/06/06 12:01:31
-!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_FCT_SCALAR
 !     ######################
@@ -157,15 +152,15 @@ IKU=SIZE(XZHAT)
 !
     PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DXF(ZFX(:,:,:))        
     IF (LBUDGET_SV)                               &
-                            CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV')
+                            CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVX_BU_RSV')
 !
     PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DYF(ZFY(:,:,:))        
     IF (LBUDGET_SV)                               &
-                            CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV')
+                            CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVY_BU_RSV')
 !
     PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DZF(1,IKU,1,ZFZ(:,:,:)) 
     IF (LBUDGET_SV)                               &
-                            CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV')
+                            CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVZ_BU_RSV')
   END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index e2cecf24f85cd243ddd7b10f06b5c875f2b40592..fbf7f239acb5a698bee1869b03390f0cb3666cc5 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -827,21 +827,21 @@ END IF
 !   	        ------------
 !
 !
-IF (LBUDGET_U)   CALL BUDGET (PRUS,1,'FRC_BU_RU')
-IF (LBUDGET_V)   CALL BUDGET (PRVS,2,'FRC_BU_RV')
-IF (LBUDGET_W)   CALL BUDGET (PRWS,3,'FRC_BU_RW')
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'FRC_BU_RTH')
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'FRC_BU_RTKE')
-IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),6,'FRC_BU_RRV')
-IF (LBUDGET_RC)  CALL BUDGET (PRRS(:,:,:,2),7,'FRC_BU_RRC')
-IF (LBUDGET_RR)  CALL BUDGET (PRRS(:,:,:,3),8,'FRC_BU_RRR')
-IF (LBUDGET_RI)  CALL BUDGET (PRRS(:,:,:,4),9,'FRC_BU_RRI')
-IF (LBUDGET_RS)  CALL BUDGET (PRRS(:,:,:,5),10,'FRC_BU_RRS')
-IF (LBUDGET_RG)  CALL BUDGET (PRRS(:,:,:,6),11,'FRC_BU_RRG')
-IF (LBUDGET_RH)  CALL BUDGET (PRRS(:,:,:,7),12,'FRC_BU_RRH')
+IF (LBUDGET_U)   CALL BUDGET (PRUS,         NBUDGET_U,  'FRC_BU_RU')
+IF (LBUDGET_V)   CALL BUDGET (PRVS,         NBUDGET_V,  'FRC_BU_RV')
+IF (LBUDGET_W)   CALL BUDGET (PRWS,         NBUDGET_W,  'FRC_BU_RW')
+IF (LBUDGET_TH)  CALL BUDGET (PRTHS,        NBUDGET_TH, 'FRC_BU_RTH')
+IF (LBUDGET_TKE) CALL BUDGET (PRTKES,       NBUDGET_TKE,'FRC_BU_RTKE')
+IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV, 'FRC_BU_RRV')
+IF (LBUDGET_RC)  CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC, 'FRC_BU_RRC')
+IF (LBUDGET_RR)  CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR, 'FRC_BU_RRR')
+IF (LBUDGET_RI)  CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI, 'FRC_BU_RRI')
+IF (LBUDGET_RS)  CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS, 'FRC_BU_RRS')
+IF (LBUDGET_RG)  CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG, 'FRC_BU_RRG')
+IF (LBUDGET_RH)  CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH, 'FRC_BU_RRH')
 IF (LBUDGET_SV) THEN
   DO JL = 1 , SIZE(PRSVS,4)
-    CALL BUDGET (PRSVS(:,:,:,JL),JL+12,'FRC_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JL),JL+NBUDGET_SV1-1,'FRC_BU_RSV')
   END DO
 END IF
 !
diff --git a/src/MNH/gravity_impl.f90 b/src/MNH/gravity_impl.f90
index 19241d0225ea7d594d311bc7f66b5cf24377a9f9..8c623c54af3a78f148d53ccce500622b89cee27d 100644
--- a/src/MNH/gravity_impl.f90
+++ b/src/MNH/gravity_impl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #####################
@@ -147,7 +147,7 @@ CALL GRAVITY ( KRR,KRRL, KRRI, ZTH, ZR, PRHODJ, PTHVREF, ZRWS_GRAV(:,:,:) )
 !
 PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_GRAV(:,:,:)
 !
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'GRAV_BU_RW')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'GRAV_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90
index d89d7227fd120a31677f451e7c38c069c5c8a89d..0beb2e0eaa114e016dd3216c13f540cf4b2f746d 100644
--- a/src/MNH/ice_adjust.f90
+++ b/src/MNH/ice_adjust.f90
@@ -430,10 +430,10 @@ ENDIF
 !*       6.  STORE THE BUDGET TERMS
 !            ----------------------
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,HBUNAME//'_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,HBUNAME//'_BU_RRC')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,HBUNAME//'_BU_RRI')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,HBUNAME//'_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,HBUNAME//'_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,HBUNAME//'_BU_RRC')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,HBUNAME//'_BU_RRI')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,HBUNAME//'_BU_RTH')
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90
index 8d802babf157138a461aeff09c479f519d42149b..4114d7a2e83efde7fd678237cf4200717844ac85 100644
--- a/src/MNH/ice_adjust_elec.f90
+++ b/src/MNH/ice_adjust_elec.f90
@@ -625,15 +625,15 @@ ENDIF
 !*       6.  STORE THE BUDGET TERMS
 !            ----------------------
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'DEPI_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'DEPI_BU_RRC')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,'DEPI_BU_RRI')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'DEPI_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'DEPI_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'DEPI_BU_RRC')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,'DEPI_BU_RRI')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'DEPI_BU_RTH')
 IF (LBUDGET_SV) THEN
-  CALL BUDGET(PQPIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG, 'DEPI_BU_RSV')
-  CALL BUDGET(PQNIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECEND, 'DEPI_BU_RSV')
-  CALL BUDGET(PQCS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG+1, 'DEPI_BU_RSV')
-  CALL BUDGET(PQIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG+3, 'DEPI_BU_RSV')
+  CALL BUDGET(PQPIS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG,   'DEPI_BU_RSV')
+  CALL BUDGET(PQNIS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND,   'DEPI_BU_RSV')
+  CALL BUDGET(PQCS(:,:,:)  * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG+1, 'DEPI_BU_RSV')
+  CALL BUDGET(PQIS(:,:,:)  * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG+3, 'DEPI_BU_RSV')
 END IF
 !
 !------------------------------------------------------------------------------
diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90
index 2d5cc4fb336ba31365415304c56fe39c3001fc81..42f1e14a0058469707fac9c550e8f98320467874 100644
--- a/src/MNH/ini_aircraft_balloon.f90
+++ b/src/MNH/ini_aircraft_balloon.f90
@@ -74,6 +74,7 @@ END MODULE MODI_INI_AIRCRAFT_BALLOON
 !!               March, 2013 : O.Caumont, C.Lac : add vertical profiles
 !!               OCT,2016 : G.Delautier LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !!
 !! --------------------------------------------------------------------------
 !
@@ -355,7 +356,7 @@ IF (TPFLYER%NMODEL > 0) THEN
 ENDIF
 !
 !
-ALLOCATE(TPFLYER%TIME(ISTORE))
+allocate( tpflyer%tpdates(istore) )
 ALLOCATE(TPFLYER%X   (ISTORE))
 ALLOCATE(TPFLYER%Y   (ISTORE))
 ALLOCATE(TPFLYER%Z   (ISTORE))
@@ -390,13 +391,11 @@ END IF
 ALLOCATE(TPFLYER%TKE_DISS(ISTORE))
 ALLOCATE(TPFLYER%TSRAD (ISTORE))
 ALLOCATE(TPFLYER%ZS  (ISTORE))
-ALLOCATE(TPFLYER%DATIME(16,ISTORE))
 !
 ALLOCATE(TPFLYER%THW_FLUX  (ISTORE))
 ALLOCATE(TPFLYER%RCW_FLUX  (ISTORE))
 ALLOCATE(TPFLYER%SVW_FLUX  (ISTORE,KSV))
 !
-TPFLYER%TIME     = XUNDEF
 TPFLYER%X        = XUNDEF
 TPFLYER%Y        = XUNDEF
 TPFLYER%Z        = XUNDEF
@@ -428,23 +427,6 @@ TPFLYER%TKE      = XUNDEF
 TPFLYER%TSRAD    = XUNDEF
 TPFLYER%ZS       = XUNDEF
 TPFLYER%TKE_DISS = XUNDEF
-TPFLYER%DATIME( 1,1:ISTORE) = TPDTSEG%TDATE%YEAR
-TPFLYER%DATIME( 2,1:ISTORE) = TPDTSEG%TDATE%MONTH
-TPFLYER%DATIME( 3,1:ISTORE) = TPDTSEG%TDATE%DAY
-TPFLYER%DATIME( 4,1:ISTORE) = TPDTSEG%TIME
-TPFLYER%DATIME( 5,1:ISTORE) = TPDTSEG%TDATE%YEAR
-TPFLYER%DATIME( 6,1:ISTORE) = TPDTSEG%TDATE%MONTH
-TPFLYER%DATIME( 7,1:ISTORE) = TPDTSEG%TDATE%DAY
-TPFLYER%DATIME( 8,1:ISTORE) = TPDTSEG%TIME
-TPFLYER%DATIME( 9,1:ISTORE) = TPDTSEG%TDATE%YEAR
-TPFLYER%DATIME(10,1:ISTORE) = TPDTSEG%TDATE%MONTH
-TPFLYER%DATIME(11,1:ISTORE) = TPDTSEG%TDATE%DAY
-TPFLYER%DATIME(12,1:ISTORE) = TPDTSEG%TIME
-TPFLYER%DATIME(13,1:ISTORE) = TPDTSEG%TDATE%YEAR
-TPFLYER%DATIME(14,1:ISTORE) = TPDTSEG%TDATE%MONTH
-TPFLYER%DATIME(15,1:ISTORE) = TPDTSEG%TDATE%DAY
-TPFLYER%DATIME(16,1:ISTORE) = XUNDEF
-
 !
 TPFLYER%THW_FLUX        = XUNDEF
 TPFLYER%RCW_FLUX        = XUNDEF
diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 6f188f7ef4e1530aa3e5e690a00d9510a5b5b917..2a4174b6d80f24d837a011cc4edce64f42f3827f 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -154,6 +154,7 @@ END MODULE MODI_INI_BUDGET
 !!      S. Riette        11/2016  New budgets for ICE3/ICE4
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 15/11/2019: remove unused CBURECORD variable
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -232,7 +233,6 @@ INTEGER, DIMENSION(JPBUMAX,JPBUPROMAX+1) :: IPROACTV      ! switches set by the
                                                           ! activation
 INTEGER :: JI, JJ, JK , JJJ                               ! loop indices
 INTEGER :: IIMAX_ll, IJMAX_ll ! size of the physical global domain
-INTEGER :: ITEN                                           ! tens for CBURECORD
 INTEGER :: IPROC                                          ! counter for processes
 INTEGER :: IIU, IJU                                       ! size along x and y directions
                                                           ! of the extended subdomain
@@ -395,12 +395,10 @@ ALLOCATE( NBUPROCNBR(JPBUMAX) )
 ALLOCATE( NBUPROCCTR(JPBUMAX) )
 ALLOCATE( CBUACTION(JPBUMAX, JPBUPROMAX) )
 ALLOCATE( CBUCOMMENT(JPBUMAX, JPBUPROMAX) )
-ALLOCATE( CBURECORD(JPBUMAX, JPBUPROMAX) )
 NBUPROCCTR(:) = 0
 NBUCTR_ACTV(:) = 0
 NBUPROCNBR(:) = 0
 CBUACTION(:,:) = 'OF' 
-CBURECORD(:,:) = ' '
 CBUCOMMENT(:,:) = ' '
 LBU_BEG =.TRUE. 
 !
@@ -2664,12 +2662,7 @@ END DO
 !              -----------------------------------------------------------
 !
 !
-DO JI=1,JPBUMAX                                ! loop on the allowed budgets
-                                               ! names of recording files for:
-  CBURECORD(JI,1) = ADJUSTL( CBUCOMMENT(JI,1) )   ! initial guess
-  CBURECORD(JI,2) = ADJUSTL( CBUCOMMENT(JI,2) )   ! source cumul
-  CBURECORD(JI,3) = ADJUSTL( CBUCOMMENT(JI,3) )   ! end step
-!
+DO JI=1,JPBUMAX                                ! loop on the allowed budgets names of recording files
   IF (IPROACTV(JI,4) >= 2) THEN
     WRITE(UNIT=KLUOUT,FMT= '("Error in budget specification of ",A7,/," &
     & The first source either is the first element of a group of sources or &
@@ -2702,10 +2695,6 @@ DO JI=1,JPBUMAX                                ! loop on the allowed budgets
                                    ADJUSTR( CBUCOMMENT(JI,NBUPROCNBR(JI)) ) // &
                                    ADJUSTL( ADJUSTR( YWORK2(JI,JJ) ) //        &
                                             ADJUSTL( YEND_COMMENT(JI) ) ) )
-        ITEN=INT(NBUPROCNBR(JI)/10)
-        CBURECORD(JI,NBUPROCNBR(JI)) = 'S' // CHAR( ITEN + 48 )               &
-                  // CHAR(  48+ MODULO( NBUPROCNBR(JI),10*MAX(1,ITEN) )  )    &
-                  // '_' // ADJUSTL( YEND_COMMENT(JI) )
       ELSE IF (IPROACTV(JI,JJJ) == 0) THEN
         NBUPROCNBR(JI) = NBUPROCNBR(JI)+1
         CBUACTION(JI,JJ) = 'DD'
@@ -2713,10 +2702,6 @@ DO JI=1,JPBUMAX                                ! loop on the allowed budgets
                                    ADJUSTR( CBUCOMMENT(JI,NBUPROCNBR(JI)) ) // &
                                    ADJUSTL( ADJUSTR( YWORK2(JI,JJ) ) //        &
                                             ADJUSTL( YEND_COMMENT(JI) ) ) )
-        ITEN=INT(NBUPROCNBR(JI)/10)
-        CBURECORD(JI,NBUPROCNBR(JI)) = 'S' // CHAR( ITEN + 48 )               &
-                  // CHAR(  48+ MODULO( NBUPROCNBR(JI),10*MAX(1,ITEN) )  )    &
-                  // '_' // ADJUSTL( YEND_COMMENT(JI) )
       ELSE IF (IPROACTV(JI,JJJ) == 2) THEN
         CBUACTION(JI,JJ) = 'NO'
         CBUCOMMENT(JI,NBUPROCNBR(JI)+1) =           ADJUSTL(                   &
@@ -2740,7 +2725,7 @@ DO JI=1,JPBUMAX                            ! loop over the allowed budgets
   YSTRING = ADJUSTL( YEND_COMMENT(JI) )
   ILEN    = LEN_TRIM(YSTRING)
   IF( ILEN /= 0 ) THEN
-    IF( JI <= 12 ) THEN
+    IF( JI < NBUDGET_SV1 ) THEN
       WRITE (UNIT=KLUOUT,FMT='(/,"budget ",A7," with ",I2," vectors")')        &
                                                   YSTRING(1:ILEN),NBUPROCNBR(JI)
       DO JJ=1,3
@@ -2756,7 +2741,7 @@ DO JI=1,JPBUMAX                            ! loop over the allowed budgets
     ELSE
       WRITE (UNIT=KLUOUT,                                                      &
              FMT='(/,"budget ",A7," (number ",I3,") with ",I2," vectors")')    &
-                                            YSTRING(1:ILEN),JI-12,NBUPROCNBR(JI)
+                                   YSTRING(1:ILEN),JI-NBUDGET_SV1+1,NBUPROCNBR(JI)
       DO JJ=1,3
         YSTRING = CBUCOMMENT(JI,JJ)
         ILEN    = LEN_TRIM(YSTRING)
@@ -2802,21 +2787,21 @@ ENDIF
 !*       5.    ALLOCATE MEMORY FOR BUDGET STORAGE ARRAYS
 !              -----------------------------------------
 IF (LBU_RU) THEN
-  ALLOCATE ( XBURU(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(1)) )
+  ALLOCATE ( XBURU(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_U)) )
   XBURU(:,:,:,:)=0.
   ALLOCATE ( XBURHODJU(IBUDIM1, IBUDIM2, IBUDIM3) )
   XBURHODJU(:,:,:)=0.
 END IF
 !
 IF (LBU_RV) THEN
-  ALLOCATE ( XBURV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(2)) )
+  ALLOCATE ( XBURV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_V)) )
   XBURV(:,:,:,:)=0.
   ALLOCATE ( XBURHODJV(IBUDIM1, IBUDIM2, IBUDIM3) )
   XBURHODJV(:,:,:)=0.
 END IF
 !
 IF (LBU_RW) THEN
-  ALLOCATE ( XBURW(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(3)) )
+  ALLOCATE ( XBURW(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_W)) )
   XBURW(:,:,:,:)=0.
   ALLOCATE ( XBURHODJW(IBUDIM1, IBUDIM2, IBUDIM3) )
   XBURHODJW(:,:,:)=0.
@@ -2829,47 +2814,47 @@ IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. &
 END IF
 !
 IF (LBU_RTH) THEN
-  ALLOCATE ( XBURTH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(4)) )
+  ALLOCATE ( XBURTH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_TH)) )
   XBURTH(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RTKE) THEN
-  ALLOCATE ( XBURTKE(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(5)) )
+  ALLOCATE ( XBURTKE(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_TKE)) )
   XBURTKE(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRV) THEN
-  ALLOCATE ( XBURRV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(6)) )
+  ALLOCATE ( XBURRV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RV)) )
   XBURRV(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRC) THEN
-  ALLOCATE ( XBURRC(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(7)) )
+  ALLOCATE ( XBURRC(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RC)) )
   XBURRC(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRR) THEN
-  ALLOCATE ( XBURRR(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(8)) )
+  ALLOCATE ( XBURRR(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RR)) )
   XBURRR(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRI) THEN
-  ALLOCATE ( XBURRI(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(9)) )
+  ALLOCATE ( XBURRI(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RI)) )
   XBURRI(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRS) THEN
-  ALLOCATE ( XBURRS(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(10)) )
+  ALLOCATE ( XBURRS(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RS)) )
   XBURRS(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRG) THEN
-  ALLOCATE ( XBURRG(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(11)) )
+  ALLOCATE ( XBURRG(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RG)) )
   XBURRG(:,:,:,:)=0.
 END IF
 !
 IF (LBU_RRH) THEN
-  ALLOCATE ( XBURRH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(12)) )
+  ALLOCATE ( XBURRH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RH)) )
   XBURRH(:,:,:,:)=0.
 END IF
 !
diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index c2a2256834c47187389d50e94d3e902c1682486d..7bb8af7e91f97f3ca46d43b794cf0c73e6c4e38b 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -35,6 +35,7 @@
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -105,31 +106,6 @@ IJU_ll = IJMAX_ll+2*JPHEXT
 !
 ILUOUT = TLUOUT%NLU
 !
-NLES_TOTADV  = 1
-NLES_RELA  = 2
-NLES_RAD   = 3
-NLES_GRAV  = 4
-NLES_COR   = 5
-NLES_MICR  = 6
-NLES_HTURB = 7
-NLES_VTURB = 8
-NLES_FORC  = 9
-NLES_PRES  = 10
-NLES_DIFF  = 11
-NLES_CURV  = 12
-NLES_PREF  = 13
-NLES_DP    = 14
-NLES_TP    = 15
-NLES_TR    = 16
-NLES_DISS  = 17
-NLES_TEND  = 18
-NLES_ADVR  = 19
-NLES_ADVM  = 20
-NLES_NEST  = 21
-NLES_MISC  = 22
-!
-NLES_TOT = 22
-!
 !-------------------------------------------------------------------------------
 !
 !*      1.   Does LES computations are used?
@@ -338,17 +314,13 @@ NLES_TIMES = ( INT( (XSEGLEN-XTSTEP+1.E-6) / XTSTEP ) ) / NLES_DTCOUNT
 !
 NLES_TCOUNT = 0
 !
-!*      3.6  date array for diachro
+!*      3.6  dates array for diachro
 !            ----------------------
 !
-ALLOCATE(XLES_DATIME(16,NLES_TIMES))
-!
-!*      3.7  sampling times array for diachro
-!            --------------------------------
-!
-ALLOCATE(XLES_TRAJT(NLES_TIMES,1))
+allocate( xles_dates( nles_times ) )
+allocate( xles_times( nles_times ) )
 !
-!*      3.8  No data
+!*      3.7  No data
 !            -------
 !
 IF (NLES_TIMES==0) THEN
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index a7ff5457c1cfbe7464077149deef90d0492ec766..a60f92ef3d948f138df9da57312d55392cba96ed 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -287,6 +287,7 @@ END MODULE MODI_INI_MODEL_n
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
 !  P. Wautelet 07/06/2019: allocate lookup tables for optical properties only when needed
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -2397,18 +2398,18 @@ CALL INI_AIRCRAFT_BALLOON(TPINIFILE,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, &
 !*      24.     STATION initializations
 !              -----------------------
 !
-CALL INI_SURFSTATION_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, &
-                       CTURB=="TKEL" ,                    &
-                       XLATORI, XLONORI                   )
+CALL INI_SURFSTATION_n(XTSTEP, XSEGLEN, NRR, NSV, &
+                       CTURB=="TKEL" ,            &
+                       XLATORI, XLONORI           )
 !
 !-------------------------------------------------------------------------------
 !
 !*      25.     PROFILER initializations
 !              ------------------------
 !
-CALL INI_POSPROFILER_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV,  &
-                       CTURB=="TKEL",                      &
-                       XLATORI, XLONORI                    )
+CALL INI_POSPROFILER_n(XTSTEP, XSEGLEN, NRR, NSV,  &
+                       CTURB=="TKEL",              &
+                       XLATORI, XLONORI            )
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90
index 88b86c3cb78e86e51534a62597948d8cace76d03..21894be24fba16d29538814eda120b48e9894bcc 100644
--- a/src/MNH/ini_posprofilern.f90
+++ b/src/MNH/ini_posprofilern.f90
@@ -9,14 +9,11 @@ MODULE MODI_INI_POSPROFILER_n
 !
 INTERFACE
 !
-      SUBROUTINE INI_POSPROFILER_n(PTSTEP, TPDTSEG, PSEGLEN, &
+      SUBROUTINE INI_POSPROFILER_n(PTSTEP, PSEGLEN,          &
                                    KRR, KSV, OUSETKE,        &
                                    PLATOR, PLONOR            )
 !
-USE MODD_TYPE_DATE
-!
 REAL,               INTENT(IN) :: PTSTEP  ! time step
-TYPE(DATE_TIME),    INTENT(IN) :: TPDTSEG ! segment date and time
 REAL,               INTENT(IN) :: PSEGLEN ! segment length
 INTEGER,            INTENT(IN) :: KRR     ! number of moist variables
 INTEGER,            INTENT(IN) :: KSV     ! number of scalar variables
@@ -33,7 +30,7 @@ END INTERFACE
 END MODULE MODI_INI_POSPROFILER_n
 !
 !     ########################################################
-      SUBROUTINE INI_POSPROFILER_n(PTSTEP, TPDTSEG, PSEGLEN, &
+      SUBROUTINE INI_POSPROFILER_n(PTSTEP, PSEGLEN,          &
                                    KRR, KSV, OUSETKE,        &
                                    PLATOR, PLONOR            )
 !     ########################################################
@@ -67,6 +64,7 @@ END MODULE MODI_INI_POSPROFILER_n
 !!     P. Tulet 15/01/2002  
 !!     C.Lac 10/2016  Add visibility diagnostic
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -81,7 +79,6 @@ USE MODD_PARAMETERS
 USE MODD_PROFILER_n
 USE MODD_RADIATIONS_n, ONLY: NAER
 USE MODD_TYPE_PROFILER
-USE MODD_TYPE_DATE
 !
 USE MODE_GRIDPROJ
 USE MODE_ll
@@ -96,7 +93,6 @@ IMPLICIT NONE
 !
 !
 REAL,               INTENT(IN) :: PTSTEP  ! time step
-TYPE(DATE_TIME),    INTENT(IN) :: TPDTSEG ! segment date and time
 REAL,               INTENT(IN) :: PSEGLEN ! segment length
 INTEGER,            INTENT(IN) :: KRR     ! number of moist variables
 INTEGER,            INTENT(IN) :: KSV     ! number of scalar variables
@@ -161,7 +157,7 @@ TYPE(PROFILER), INTENT(INOUT) :: TPROFILER
 !
 ISTORE = INT ( (PSEGLEN-XTSTEP) / TPROFILER%STEP ) + 1
 !
-ALLOCATE(TPROFILER%TIME  (ISTORE))
+allocate( tprofiler%tpdates( istore ) )
 ALLOCATE(TPROFILER%ERROR (NUMBPROFILER))
 ALLOCATE(TPROFILER%X     (NUMBPROFILER))
 ALLOCATE(TPROFILER%Y     (NUMBPROFILER))
@@ -186,7 +182,6 @@ IF (OUSETKE) THEN
 ELSE
   ALLOCATE(TPROFILER%TKE (0,IKU,0))
 END IF
-ALLOCATE(TPROFILER%DATIME(16,ISTORE))
 ALLOCATE(TPROFILER%T2M     (ISTORE,NUMBPROFILER))
 ALLOCATE(TPROFILER%Q2M     (ISTORE,NUMBPROFILER))
 ALLOCATE(TPROFILER%HU2M    (ISTORE,NUMBPROFILER))
@@ -209,7 +204,6 @@ ALLOCATE(TPROFILER%TKE_DISS(ISTORE,IKU,NUMBPROFILER))
 !
 !
 TPROFILER%ERROR= .FALSE.
-TPROFILER%TIME = XUNDEF
 TPROFILER%ZON  = XUNDEF
 TPROFILER%MER  = XUNDEF
 TPROFILER%FF   = XUNDEF
diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90
index cff938acec58cfe8b8f51d92758aafbd7d6db3ef..dbb0030186716cf329c841a8027b1773de9dfe54 100644
--- a/src/MNH/ini_seriesn.f90
+++ b/src/MNH/ini_seriesn.f90
@@ -42,30 +42,29 @@
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 12/04/2019: use standard measurement units
-!!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
 !-------------------------------------------------------------------------------
 !
 !*    0. Declaration
 !     --------------
 !
-USE MODE_ll
-USE MODE_MSG
-USE MODE_MODELN_HANDLER
-!
-USE MODD_TIME        ! Experiment and segment times (TDTEXP and TDTSEG)
 USE MODD_CONF
-USE MODD_DYN, ONLY: XSEGLEN
+USE MODD_CONF_n,     ONLY: LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG, LUSERH
+USE MODD_DIM_n,      ONLY: NKMAX
+USE MODD_DYN,        ONLY: XSEGLEN
+USE MODD_DYN_n,      ONLY: XTSTEP, NSTOP
+USE MODD_LUNIT_n,    ONLY: TLUOUT
+USE MODD_PARAMETERS
+USE MODD_PARAM_n,    ONLY: CSURF
+USE MODD_PRECIP_n,   ONLY: XINPRR, XINPRS, XINPRG
 USE MODD_SERIES
 USE MODD_SERIES_n
-USE MODD_PARAMETERS
-USE MODD_CONF_n, ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH
-USE MODD_DIM_n, ONLY: NKMAX
-USE MODD_DYN_n, ONLY: XTSTEP,NSTOP
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_PARAM_n, ONLY: CSURF
-USE MODD_PRECIP_n, ONLY: XINPRR,XINPRS,XINPRG
-USE MODD_TIME_n
-! 
+!
+USE MODE_ll
+USE MODE_MODELN_HANDLER
+USE MODE_MSG
+!
 USE MODI_MNHGET_SURF_PARAM_n
 !
 IMPLICIT NONE
@@ -276,8 +275,7 @@ ALLOCATE( CSCOMMENT1 (NSTEMP_SERIE1) )
 ALLOCATE( CSCOMMENT2 (NSTEMP_SERIE2) )
 ALLOCATE( CSCOMMENT3 (NSTEMP_SERIE3) )
 !
-ALLOCATE( XSTRAJT  (NSNBSTEPT,1)  )
-ALLOCATE( XSDATIME (16,NSNBSTEPT) )
+allocate( tpsdates( nsnbstept ) )
 !
 XSSERIES1(:,:,:,:,:,:)=0.
 XSSERIES2(:,:,:,:,:,:)=0.
@@ -473,17 +471,4 @@ end if
 !
 NSCOUNTD=0                         ! Counting the nb of temporal series outputs
 !
-XSDATIME( 1,:)= TDTEXP%TDATE%YEAR
-XSDATIME( 2,:)= TDTEXP%TDATE%MONTH
-XSDATIME( 3,:)= TDTEXP%TDATE%DAY
-XSDATIME( 4,:)= TDTEXP%TIME
-XSDATIME( 5,:)= TDTSEG%TDATE%YEAR
-XSDATIME( 6,:)= TDTSEG%TDATE%MONTH
-XSDATIME( 7,:)= TDTSEG%TDATE%DAY
-XSDATIME( 8,:)= TDTSEG%TIME
-XSDATIME( 9,:)= TDTMOD%TDATE%YEAR
-XSDATIME(10,:)= TDTMOD%TDATE%MONTH
-XSDATIME(11,:)= TDTMOD%TDATE%DAY
-XSDATIME(12,:)= TDTMOD%TIME
-!
 END SUBROUTINE INI_SERIES_n 
diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90
index 3d8f085963fea14de3ebad7877b4d984f42e2f2c..8b2b47e73c091ec40ccdab80f4ac0aa8b334ba21 100644
--- a/src/MNH/ini_surfstationn.f90
+++ b/src/MNH/ini_surfstationn.f90
@@ -9,13 +9,12 @@ MODULE MODI_INI_SURFSTATION_n
 !
 INTERFACE
 !
-      SUBROUTINE INI_SURFSTATION_n(PTSTEP, TPDTSEG, PSEGLEN, &
+      SUBROUTINE INI_SURFSTATION_n(PTSTEP, PSEGLEN,          &
                                    KRR, KSV, OUSETKE,        &
                                    PLATOR, PLONOR            )
 !
 USE MODD_TYPE_DATE
 REAL,               INTENT(IN) :: PTSTEP  ! time step
-TYPE(DATE_TIME),    INTENT(IN) :: TPDTSEG ! segment date and time
 REAL,               INTENT(IN) :: PSEGLEN ! segment length
 INTEGER,            INTENT(IN) :: KRR     ! number of moist variables
 INTEGER,            INTENT(IN) :: KSV     ! number of scalar variables
@@ -32,7 +31,7 @@ END INTERFACE
 END MODULE MODI_INI_SURFSTATION_n
 !
 !     ########################################################
-      SUBROUTINE INI_SURFSTATION_n(PTSTEP, TPDTSEG, PSEGLEN, &
+      SUBROUTINE INI_SURFSTATION_n(PTSTEP, PSEGLEN,          &
                                    KRR, KSV, OUSETKE,        &
                                    PLATOR, PLONOR            )
 !     ########################################################
@@ -66,7 +65,8 @@ END MODULE MODI_INI_SURFSTATION_n
 !!     P. Tulet 15/01/2002 
 !!     A. Lemonsu 19/11/2002 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -94,7 +94,6 @@ IMPLICIT NONE
 !
 !
 REAL,               INTENT(IN) :: PTSTEP  ! time step
-TYPE(DATE_TIME),    INTENT(IN) :: TPDTSEG ! segment date and time
 REAL,               INTENT(IN) :: PSEGLEN ! segment length
 INTEGER,            INTENT(IN) :: KRR     ! number of moist variables
 INTEGER,            INTENT(IN) :: KSV     ! number of scalar variables
@@ -158,16 +157,13 @@ TYPE(STATION), INTENT(INOUT) :: TSTATION   !
 !
 ISTORE = INT ( (PSEGLEN-XTSTEP) / TSTATION%STEP ) + 1
 !
-!
-!
-ALLOCATE(TSTATION%TIME(ISTORE))
+allocate( tstation%tpdates( istore ) )
 ALLOCATE(TSTATION%ERROR (NUMBSTAT))
 ALLOCATE(TSTATION%X   (NUMBSTAT))
 ALLOCATE(TSTATION%Y   (NUMBSTAT))
 ALLOCATE(TSTATION%SV  (ISTORE,NUMBSTAT,KSV))
 ALLOCATE(TSTATION%TSRAD (ISTORE,NUMBSTAT))
 ALLOCATE(TSTATION%ZS  (NUMBSTAT))
-ALLOCATE(TSTATION%DATIME(16,ISTORE))
 ALLOCATE(TSTATION%ZON   (ISTORE,NUMBSTAT))
 ALLOCATE(TSTATION%MER   (ISTORE,NUMBSTAT))
 ALLOCATE(TSTATION%W     (ISTORE,NUMBSTAT))
@@ -197,7 +193,6 @@ ALLOCATE(TSTATION%DSTAOD  (ISTORE,NUMBSTAT))
 ALLOCATE(TSTATION%SFCO2   (ISTORE,NUMBSTAT))
 !
 TSTATION%ERROR = .FALSE.
-TSTATION%TIME  = XUNDEF
 TSTATION%ZON   = XUNDEF
 TSTATION%MER   = XUNDEF
 TSTATION%W     = XUNDEF
diff --git a/src/MNH/ion_attach_elec.f90 b/src/MNH/ion_attach_elec.f90
index bfecbd9a16f54dc039518c785c481438bda2e442..be198dae2f056e2effafcdb498216e65bfd213f1 100644
--- a/src/MNH/ion_attach_elec.f90
+++ b/src/MNH/ion_attach_elec.f90
@@ -91,7 +91,7 @@ USE MODD_ELEC_PARAM
 USE MODD_RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM
 USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELEC
-USE MODD_BUDGET, ONLY : LBU_RSV
+USE MODD_BUDGET, ONLY : LBU_RSV, NBUDGET_SV1
 USE MODD_REF,    ONLY : XTHVREFZ
 
 use mode_tools_ll,        only: GET_INDICE_ll
@@ -263,7 +263,7 @@ ENDDO
 !
 IF (LBU_RSV) THEN
   DO JRR = 1, NSV_ELEC
-    CALL BUDGET(PSVS(:,:,:,JRR), 11+NSV_ELECBEG+JRR, 'NEUT_BU_RSV')
+    CALL BUDGET(PSVS(:,:,:,JRR), NBUDGET_SV1-1+NSV_ELECBEG+JRR-1, 'NEUT_BU_RSV')
   ENDDO
 END IF
 !
diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90
index 806c6c9652e2dd3515a1657eb1444d864d687637..533ed78e72a7074accfdc2afa5df7a4a368019d1 100644
--- a/src/MNH/khko_notadjust.f90
+++ b/src/MNH/khko_notadjust.f90
@@ -412,12 +412,12 @@ END IF
 !            ----------------------
 !
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH')
 IF (LBUDGET_SV) THEN
-  CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCN
-  CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCC
+  CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG,  'CEVA_BU_RSV') ! RCN
+  CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),  NBUDGET_SV1-1+NSV_C2R2BEG+1,'CEVA_BU_RSV') ! RCC
 END IF
 !
 END SUBROUTINE KHKO_NOTADJUST
diff --git a/src/MNH/les_budget.f90 b/src/MNH/les_budget.f90
index c11a00da0efb960488bc86fee48c44f705bf17f0..4ad63f048213dd5898db2b6cd09ae89c755a539b 100644
--- a/src/MNH/les_budget.f90
+++ b/src/MNH/les_budget.f90
@@ -53,12 +53,13 @@ END MODULE MODI_LES_BUDGET
 !*       0.   DECLARATIONS
 !             ------------
 !
+use modd_budget,      only: NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, &
+                            NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
 USE MODD_LES
 USE MODD_LES_BUDGET
 USE MODD_NSV
 !
 USE MODI_SHUMAN
-USE MODI_THL_RT_FROM_TH_R
 USE MODI_LES_VER_INT
 USE MODI_LES_MEAN_ll
 !
@@ -122,7 +123,7 @@ SELECT CASE (KBUDN)
 !
 !* u
 !
-  CASE(1)
+  CASE( NBUDGET_U )
     CALL LES_BUDGET_ANOMALY(PVARS,'X',ZANOM)
     !
     !* action in KE budget
@@ -136,7 +137,7 @@ SELECT CASE (KBUDN)
 !
 !* v
 !
-  CASE(2)
+  CASE( NBUDGET_V )
     CALL LES_BUDGET_ANOMALY(PVARS,'Y',ZANOM)
     !
     !* action in KE budget
@@ -150,7 +151,7 @@ SELECT CASE (KBUDN)
 !
 !* w
 !
-  CASE(3)
+  CASE( NBUDGET_W )
     CALL LES_BUDGET_ANOMALY(PVARS,'Z',ZANOM)
     !
     !* action in KE budget
@@ -183,7 +184,7 @@ SELECT CASE (KBUDN)
 !
 !* Th
 !
-  CASE(4)
+  CASE( NBUDGET_TH )
     XCURRENT_RTHLS = XCURRENT_RTHLS + PVARS - XCURRENT_RTHS
     CALL LES_BUDGET_ANOMALY(XCURRENT_RTHLS,'-',ZANOM)
     !
@@ -211,7 +212,7 @@ SELECT CASE (KBUDN)
 !
 !* Tke
 !
-  CASE(5)
+  CASE( NBUDGET_TKE )
     ALLOCATE(ZTEND(IIU,IJU,IKU))
     ZTEND(:,:,:) = (PVARS(:,:,:)-XCURRENT_RTKES(:,:,:)) / XCURRENT_RHODJ
     XCURRENT_RTKES = PVARS
@@ -222,9 +223,9 @@ SELECT CASE (KBUDN)
 !
 !* Rv, Rr, Ri, Rs, Rg, Rh
 !
-  CASE(6,8,9,10,11,12)
+  CASE( NBUDGET_RV, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH )
     !* transformation into conservative variables: RT
-    XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5)
+    XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1))
     CALL LES_BUDGET_ANOMALY(XCURRENT_RRTS,'-',ZANOM)
     !
     !* action in WRT budget
@@ -244,16 +245,16 @@ SELECT CASE (KBUDN)
     X_LES_BU_RES_THLRT(:,ILES_BU) = X_LES_BU_RES_THLRT(:,ILES_BU) + ZLES_PROF(:)
     !
     !* update fields
-    XCURRENT_RRS(:,:,:,KBUDN-5) = PVARS
+    XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) = PVARS
     XRT_ANOM = ZANOM
 !
 !* Rc
 !
-  CASE(7)
+  CASE( NBUDGET_RC )
     !* transformation into conservative variables: theta_l; RT
-    XCURRENT_RRTS  = XCURRENT_RRTS  + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5)
+    XCURRENT_RRTS  = XCURRENT_RRTS  + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1))
     XCURRENT_RTHLS = XCURRENT_RTHLS - XCURRENT_L_O_EXN_CP &
-                                    * (PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5))
+                                    * (PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)))
 
     !* anomaly of THL
     ALLOCATE(ZTHL_ANOM(IIU,IJU,NLES_K))
@@ -291,31 +292,31 @@ SELECT CASE (KBUDN)
     !
     !
     !* update fields
-    XCURRENT_RRS(:,:,:,KBUDN-5) = PVARS
+    XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) = PVARS
     XRT_ANOM = ZANOM
     XTHL_ANOM = ZTHL_ANOM
     DEALLOCATE(ZTHL_ANOM)
 !
 !* SV
 !
-  CASE(13:)
+  CASE( NBUDGET_SV1: )
     CALL LES_BUDGET_ANOMALY(PVARS,'-',ZANOM)
     !
     !* action in WSV budget
-    ZWORK_LES = ( ZANOM * XW_ANOM - XSV_ANOM(:,:,:,KBUDN-12) * XW_ANOM ) / &
+    ZWORK_LES = ( ZANOM * XW_ANOM - XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) * XW_ANOM ) / &
                   XCURRENT_TSTEP
     CALL LES_MEAN_ll( ZWORK_LES, LLES_CURRENT_CART_MASK, ZLES_PROF)
-    X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-12) = X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-12) + ZLES_PROF(:)
+    X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) = X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) + ZLES_PROF(:)
     !
     !* action in SV2 budget
-    ZWORK_LES = ( ZANOM **2 - XSV_ANOM(:,:,:,KBUDN-12) **2 ) / &
+    ZWORK_LES = ( ZANOM **2 - XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) **2 ) / &
                   XCURRENT_TSTEP
     CALL LES_MEAN_ll( ZWORK_LES, LLES_CURRENT_CART_MASK, ZLES_PROF)
-    X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-12) = X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-12) + ZLES_PROF(:)
+    X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) = X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) + ZLES_PROF(:)
     !
     !* update fields
-    XCURRENT_RSVS(:,:,:,KBUDN-12) = PVARS
-    XSV_ANOM(:,:,:,KBUDN-12) = ZANOM
+    XCURRENT_RSVS(:,:,:,KBUDN-(NBUDGET_SV1-1)) = PVARS
+    XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) = ZANOM
 
 END SELECT
 !
diff --git a/src/MNH/les_ini_timestepn.f90 b/src/MNH/les_ini_timestepn.f90
index 9ab7943694bd079c354d4c74aec2029aa9c02e74..505067d9d0fa2bb49778609fb8bc01fff4989ad5 100644
--- a/src/MNH/les_ini_timestepn.f90
+++ b/src/MNH/les_ini_timestepn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 les 2006/08/30 18:38:45
-!-----------------------------------------------------------------
 !      #######################
 MODULE MODI_LES_INI_TIMESTEP_n
 !      #######################
@@ -53,6 +48,7 @@ END MODULE MODI_LES_INI_TIMESTEP_n
 !!    MODIFICATIONS
 !!    -------------
 !!      Original         06/11/02
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !!
 !! --------------------------------------------------------------------------
 !
@@ -73,6 +69,7 @@ USE MODD_TIME
 USE MODD_CONF
 USE MODD_LES_BUDGET
 !
+use mode_datetime,       only: Datetime_distance
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
@@ -148,25 +145,8 @@ NLES_TCOUNT = NLES_TCOUNT + 1
 !
 NLES_CURRENT_TCOUNT = NLES_TCOUNT
 !
-!
-XLES_DATIME( 1,NLES_TCOUNT) = TDTEXP%TDATE%YEAR
-XLES_DATIME( 2,NLES_TCOUNT) = TDTEXP%TDATE%MONTH
-XLES_DATIME( 3,NLES_TCOUNT) = TDTEXP%TDATE%DAY
-XLES_DATIME( 4,NLES_TCOUNT) = TDTEXP%TIME
-XLES_DATIME( 5,NLES_TCOUNT) = TDTSEG%TDATE%YEAR
-XLES_DATIME( 6,NLES_TCOUNT) = TDTSEG%TDATE%MONTH
-XLES_DATIME( 7,NLES_TCOUNT) = TDTSEG%TDATE%DAY
-XLES_DATIME( 8,NLES_TCOUNT) = TDTSEG%TIME
-XLES_DATIME( 9,NLES_TCOUNT) = TDTMOD%TDATE%YEAR
-XLES_DATIME(10,NLES_TCOUNT) = TDTMOD%TDATE%MONTH
-XLES_DATIME(11,NLES_TCOUNT) = TDTMOD%TDATE%DAY
-XLES_DATIME(12,NLES_TCOUNT) = TDTMOD%TIME
-XLES_DATIME(13,NLES_TCOUNT) = TDTCUR%TDATE%YEAR
-XLES_DATIME(14,NLES_TCOUNT) = TDTCUR%TDATE%MONTH
-XLES_DATIME(15,NLES_TCOUNT) = TDTCUR%TDATE%DAY
-XLES_DATIME(16,NLES_TCOUNT) = TDTCUR%TIME
-!
-XLES_TRAJT(NLES_TCOUNT,1) = (KTCOUNT-1) * XTSTEP
+xles_dates(nles_tcount ) = tdtcur
+call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount ) )
 !
 !* forward-in-time time-step
 !
diff --git a/src/MNH/les_masksn.f90 b/src/MNH/les_masksn.f90
index 4add46bb679c571b27504ffe3a721408c882effe..eeb310b83d394af51c76b1a9ca2a4b5070fab7b3 100644
--- a/src/MNH/les_masksn.f90
+++ b/src/MNH/les_masksn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 les 2006/08/30 18:38:57
-!-----------------------------------------------------------------
 !      ################
 MODULE MODI_LES_MASKS_n
 !      ################
@@ -55,19 +50,21 @@ END MODULE MODI_LES_MASKS_n
 !!    -------------
 !!      Original         07/02/00
 !!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_FIELD_n
 USE MODD_CONF_n
-USE MODD_TIME_n
 USE MODD_DYN_n
+USE MODD_FIELD_n
+USE MODD_LES
+USE MODD_LES_n
 USE MODD_TIME
+USE MODD_TIME_n
 !
+use mode_datetime,       only: Datetime_distance
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
@@ -121,25 +118,8 @@ NLES_TCOUNT = NLES_TCOUNT + 1
 !
 NLES_CURRENT_TCOUNT = NLES_TCOUNT
 !
-!
-XLES_DATIME( 1,NLES_TCOUNT) = TDTEXP%TDATE%YEAR
-XLES_DATIME( 2,NLES_TCOUNT) = TDTEXP%TDATE%MONTH
-XLES_DATIME( 3,NLES_TCOUNT) = TDTEXP%TDATE%DAY
-XLES_DATIME( 4,NLES_TCOUNT) = TDTEXP%TIME
-XLES_DATIME( 5,NLES_TCOUNT) = TDTSEG%TDATE%YEAR
-XLES_DATIME( 6,NLES_TCOUNT) = TDTSEG%TDATE%MONTH
-XLES_DATIME( 7,NLES_TCOUNT) = TDTSEG%TDATE%DAY
-XLES_DATIME( 8,NLES_TCOUNT) = TDTSEG%TIME
-XLES_DATIME( 9,NLES_TCOUNT) = TDTMOD%TDATE%YEAR
-XLES_DATIME(10,NLES_TCOUNT) = TDTMOD%TDATE%MONTH
-XLES_DATIME(11,NLES_TCOUNT) = TDTMOD%TDATE%DAY
-XLES_DATIME(12,NLES_TCOUNT) = TDTMOD%TIME
-XLES_DATIME(13,NLES_TCOUNT) = TDTCUR%TDATE%YEAR
-XLES_DATIME(14,NLES_TCOUNT) = TDTCUR%TDATE%MONTH
-XLES_DATIME(15,NLES_TCOUNT) = TDTCUR%TDATE%DAY
-XLES_DATIME(16,NLES_TCOUNT) = TDTCUR%TIME
-!
-XLES_TRAJT(NLES_TCOUNT,1) = (KTCOUNT-1) * XTSTEP
+xles_dates(nles_tcount ) = tdtcur
+call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount ) )
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90
index 851660cf9fc9c96c62d3af27de1c3667d02115fe..2711c496a1f700f1f8c0a6dab02257f3779996ad 100644
--- a/src/MNH/lima.f90
+++ b/src/MNH/lima.f90
@@ -102,7 +102,9 @@ END MODULE MODI_LIMA
 !*       0.    DECLARATIONS
 !              ------------
 USE MODD_BUDGET,          ONLY: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,     &
-                                LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV
+                                LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV,     &
+                                NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI,     &
+                                NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
 USE MODD_CLOUDPAR_n,      ONLY: NSPLITR, NSPLITG
 USE MODD_CST,             ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD
 USE MODD_IO,              ONLY: TFILEDATA
@@ -560,14 +562,14 @@ IF (LCOLD .AND. LSNOW) THEN
 END IF
 !
 IF(LBU_ENABLE) THEN
-  IF (LBUDGET_RC .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'CORR_BU_RRC')
-  IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'CORR_BU_RRR')
-  IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CORR_BU_RRI')
-  IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:),10  , 'CORR_BU_RRS')
+  IF (LBUDGET_RC .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CORR_BU_RRC')
+  IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CORR_BU_RRR')
+  IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CORR_BU_RRI')
+  IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CORR_BU_RRS')
   IF (LBUDGET_SV) THEN
-     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'CORR_BU_RSV')
-     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'CORR_BU_RSV')
-     IF (LCOLD .AND. LSNOW) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CORR_BU_RSV')
+     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'CORR_BU_RSV')
+     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CORR_BU_RSV')
+     IF (LCOLD .AND. LSNOW) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CORR_BU_RSV')
   END IF
 END IF
 !-------------------------------------------------------------------------------
@@ -606,17 +608,17 @@ ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP
 ! Call budgets
 !
 IF(LBU_ENABLE) THEN
-  IF (LBUDGET_TH)                         CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'SEDI_BU_RTH')
-  IF (LBUDGET_RC .AND. LWARM .AND. LSEDC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'SEDI_BU_RRC')
-  IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'SEDI_BU_RRR')
-  IF (LBUDGET_RI .AND. LCOLD .AND. LSEDI) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'SEDI_BU_RRI')
-  IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS')
-  IF (LBUDGET_RG .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG')
-  IF (LBUDGET_RH .AND. LCOLD .AND. LHAIL) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH')
+  IF (LBUDGET_TH)                         CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'SEDI_BU_RTH')
+  IF (LBUDGET_RC .AND. LWARM .AND. LSEDC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC')
+  IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR')
+  IF (LBUDGET_RI .AND. LCOLD .AND. LSEDI) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI')
+  IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS')
+  IF (LBUDGET_RG .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG')
+  IF (LBUDGET_RH .AND. LCOLD .AND. LHAIL) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH')
   IF (LBUDGET_SV) THEN
-     IF (LWARM .AND. LSEDC) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'SEDI_BU_RSV')
-     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'SEDI_BU_RSV')
-     IF (LCOLD .AND. LSEDI) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'SEDI_BU_RSV')
+     IF (LWARM .AND. LSEDC) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SEDI_BU_RSV')
+     IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SEDI_BU_RSV')
+     IF (LCOLD .AND. LSEDI) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'SEDI_BU_RSV')
   END IF
 END IF
 !
@@ -633,8 +635,8 @@ IF (LWARM .AND. LDEPOC) THEN
      PINDEP(:,:) = XVDEPOC * ZRCT(:,:,IKB) *  PRHODREF(:,:,IKB) /XRHOLW
   END WHERE
 !
-  IF ( LBUDGET_RC ) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:),7             ,'DEPO_BU_RRC')
-  IF ( LBUDGET_SV ) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DEPO_BU_RSV') 
+  IF ( LBUDGET_RC ) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,                'DEPO_BU_RRC')
+  IF ( LBUDGET_SV ) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DEPO_BU_RSV')
 END IF
 !
 !
@@ -650,11 +652,11 @@ IF (LWARM .AND. LRAIN) THEN
    ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP
    !
    IF(LBU_ENABLE) THEN
-      IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'R2C1_BU_RRC')
-      IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'R2C1_BU_RRR')
+      IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'R2C1_BU_RRC')
+      IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'R2C1_BU_RRR')
       IF (LBUDGET_SV) THEN
-         CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'R2C1_BU_RSV')
-         CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'R2C1_BU_RSV')
+         CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC  , 'R2C1_BU_RSV')
+         CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR  , 'R2C1_BU_RSV')
       END IF
    END IF
 END IF
@@ -1476,163 +1478,163 @@ IF ( LCOLD .AND. LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TST
 IF(LBU_ENABLE) THEN
    IF (LBUDGET_TH) THEN
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'REVA_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'REVA_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONC(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'HONC_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HONC_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONR(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'HONR_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HONR_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DEPS_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPS_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DEPG_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPG_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'IMLT_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'IMLT_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'BERFI_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'BERFI_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_RIM(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'RIM_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'RIM_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_ACC(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'ACC_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'ACC_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'CFRZ_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CFRZ_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'WETG_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETG_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DRYG_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYG_BU_RTH')
       ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'GMLT_BU_RTH')
+      CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'GMLT_BU_RTH')
    END IF
 
    IF (LBUDGET_RV) THEN
       ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RR_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'REVA_BU_RRV')
+      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'REVA_BU_RRV')
       ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RS_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'DEPS_BU_RRV')
+      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPS_BU_RRV')
       ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RG_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'DEPG_BU_RRV')
+      CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPG_BU_RRV')
    END IF
 
    IF (LBUDGET_RC) THEN
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'AUTO_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'AUTO_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'ACCR_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'ACCR_BU_RRC')
       ! impact of rain evap !!!!!!
       ZRCS(:,:,:) = ZRCS(:,:,:)
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'REVA_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'REVA_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'HONC_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'HONC_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'IMLT_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'IMLT_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'BERFI_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'BERFI_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_RIM(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'RIM_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'RIM_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'WETG_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETG_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'DRYG_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYG_BU_RRC')
       ZRCS(:,:,:) = ZRCS(:,:,:) - ZTOT_RR_CVRC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'CVRC_BU_RRC')
+      CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CVRC_BU_RRC')
    END IF
    
    IF (LBUDGET_RR) THEN
       ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'AUTO_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'AUTO_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'ACCR_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACCR_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'REVA_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'REVA_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'HONR_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'HONR_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_ACC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'ACC_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACC_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'CFRZ_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CFRZ_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'WETG_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETG_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'DRYG_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYG_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'GMLT_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'GMLT_BU_RRR')
       ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CVRC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'CVRC_BU_RRR')
+      CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CVRC_BU_RRR')
    END IF
   
    IF (LBUDGET_RI) THEN
       ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HONC_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HONC_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CNVI_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CNVI_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CNVS_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CNVS_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'AGGS_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AGGS_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'IMLT_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'IMLT_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'BERFI_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'BERFI_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HMS_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HMS_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CFRZ_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CFRZ_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'WETG_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETG_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'DRYG_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYG_BU_RRI')
       ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HMG_BU_RRI')
+      CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HMG_BU_RRI')
    END IF
    
    IF (LBUDGET_RS) THEN
       ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CNVI_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'DEPS_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CNVS_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'AGGS_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_RIM(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'RIM_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_HMS(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'HMS_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_ACC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'ACC_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_CMEL(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CMEL_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'WETG_BU_RRS')
       ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS')
+      CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'DRYG_BU_RRS')
    END IF
    
    IF (LBUDGET_RG) THEN
       ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'HONR_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'DEPG_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_RIM(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'RIM_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_ACC(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'ACC_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RS_CMEL(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'CMEL_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_CFRZ(:,:,:)/PTSTEP - ZTOT_RI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'CFRZ_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'WETG_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'DRYG_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_HMG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'HMG_BU_RRG')
       ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG')
+      CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'GMLT_BU_RRG')
    END IF
 
    IF (LBUDGET_RH) THEN
       ZRHS(:,:,:) = ZRHS(:,:,:) + ZTOT_RH_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH')
+      CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'WETG_BU_RRH')
    END IF
 
    IF (LBUDGET_SV) THEN
@@ -1640,75 +1642,75 @@ IF(LBU_ENABLE) THEN
       ! Cloud droplets
       !
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_SELF(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'SELF_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SELF_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'AUTO_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'AUTO_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'ACCR_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'ACCR_BU_RSV')
       ! impact of rain evap !!!!!!
       ZCCS(:,:,:) = ZCCS(:,:,:)
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'REVA_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'REVA_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'HONC_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'HONC_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'IMLT_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'IMLT_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_RIM(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'RIM_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'RIM_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'WETG_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'WETG_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'DRYG_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DRYG_BU_RSV')
       ZCCS(:,:,:) = ZCCS(:,:,:) - ZTOT_CR_CVRC(:,:,:)/PTSTEP
-      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'CVRC_BU_RSV')
+      CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'CVRC_BU_RSV')
       !
       ! Rain drops
       !
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'AUTO_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'AUTO_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_SCBU(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'SCBU_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SCBU_BU_RSV')
       ! Rain evaporation !!!!!!!!!!!!!
       ZCRS(:,:,:) = ZCRS(:,:,:)
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'REVA_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'REVA_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_BRKU(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'BRKU_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'BRKU_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'HONR_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'HONR_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_ACC(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'ACC_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'ACC_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'CFRZ_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CFRZ_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'WETG_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'WETG_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'DRYG_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'DRYG_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'GMLT_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'GMLT_BU_RSV')
       ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CVRC(:,:,:)/PTSTEP
-      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'CVRC_BU_RSV')
+      CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CVRC_BU_RSV')
       !
       ! Ice crystals
       !
       ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HONC_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HONC_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CNVI_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CNVI_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CNVS_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CNVS_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'AGGS_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'AGGS_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'IMLT_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'IMLT_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMS(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HMS_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HMS_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CFRZ_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CFRZ_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_WETG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'WETG_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'WETG_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'DRYG_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'DRYG_BU_RSV')
       ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMG(:,:,:)/PTSTEP
-      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HMG_BU_RSV')
+      CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HMG_BU_RSV')
    END IF
 !!$            ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_RC_EVAP(I1(II),I2(II),I3(II))   + Z_RC_EVAP(II)  * ZMAXTIME(II)
 !!$            ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_CC_EVAP(I1(II),I2(II),I3(II))   + Z_CC_EVAP(II)  * ZMAXTIME(II)
diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90
index 752c861b9d9792eed74add2178143552c425b9c1..4b2056f2041e1b45ffe98c892b4f5cee2fe5d33d 100644
--- a/src/MNH/lima_adjust.f90
+++ b/src/MNH/lima_adjust.f90
@@ -1197,21 +1197,21 @@ END IF
 !
 !
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'CEDS_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'CEDS_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'CEDS_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,'CEDS_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'CEDS_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'CEDS_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'CEDS_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,'CEDS_BU_RRI')
   IF (LBUDGET_SV) THEN
-    CALL BUDGET (PCCS(:,:,:)   * PRHODJ(:,:,:),12+NSV_LIMA_NC,'CEDS_BU_RSV') ! RCC
-    CALL BUDGET (PCIS(:,:,:)   * PRHODJ(:,:,:),12+NSV_LIMA_NI,'CEDS_BU_RSV') ! RCI
+    CALL BUDGET (PCCS(:,:,:)   * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'CEDS_BU_RSV') ! RCC
+    CALL BUDGET (PCIS(:,:,:)   * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'CEDS_BU_RSV') ! RCI
     IF (NMOD_CCN .GE. 1) THEN
        DO JL = 1, NMOD_CCN
-          CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV') ! RCC
+          CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV') ! RCC
        END DO
     END IF
     IF (NMOD_IFN .GE. 1) THEN
        DO JL = 1, NMOD_IFN
-          CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV') ! RCC
+          CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV') ! RCC
        END DO
     END IF
   END IF
diff --git a/src/MNH/lima_cold.f90 b/src/MNH/lima_cold.f90
index 28b88ca60f3aa5848d53e9e1863dc8ed44ecf251..587d2712dee644134ef166a7e8021a5bb42a0b5a 100644
--- a/src/MNH/lima_cold.f90
+++ b/src/MNH/lima_cold.f90
@@ -309,12 +309,12 @@ CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI,     &
                               PINPRH                  )
 
 IF (LBU_ENABLE) THEN
-  IF (LBUDGET_RI .AND. OSEDI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9  ,'SEDI_BU_RRI')
-  IF (LBUDGET_RS .AND. LSNOW) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10 ,'SEDI_BU_RRS')
-  IF (LBUDGET_RG .AND. LSNOW) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11 ,'SEDI_BU_RRG')
-  IF (LBUDGET_RH .AND. LHAIL) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12 ,'SEDI_BU_RRH')
+  IF (LBUDGET_RI .AND. OSEDI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI')
+  IF (LBUDGET_RS .AND. LSNOW) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'SEDI_BU_RRS')
+  IF (LBUDGET_RG .AND. LSNOW) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'SEDI_BU_RRG')
+  IF (LBUDGET_RH .AND. LHAIL) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'SEDI_BU_RRH')
   IF (LBUDGET_SV) THEN
-    IF (OSEDI) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'SEDI_BU_RSV') ! RCI
+    IF (OSEDI) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'SEDI_BU_RSV') ! RCI
   END IF
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/lima_cold_hom_nucl.f90 b/src/MNH/lima_cold_hom_nucl.f90
index f6c3f42114c5cbff0cece4bbef71e1eaf538c2cb..3882ac276498816b8576e3dc9db19e3a769a138a 100644
--- a/src/MNH/lima_cold_hom_nucl.f90
+++ b/src/MNH/lima_cold_hom_nucl.f90
@@ -449,23 +449,23 @@ IF (INEGT.GT.0) THEN
    IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                                 &
                      UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONH_BU_RTH')
+                                                                 NBUDGET_TH,'HONH_BU_RTH')
      IF (LBUDGET_RV) CALL BUDGET (                                                 &
                      UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                 6,'HONH_BU_RRV')
+                                                                 NBUDGET_RV,'HONH_BU_RRV')
      IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                 9,'HONH_BU_RRI')
+                                                                 NBUDGET_RI,'HONH_BU_RRI')
      IF (LBUDGET_SV) THEN
        CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI
+                                                  NBUDGET_SV1-1+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI
        IF (NMOD_CCN.GE.1) THEN
           DO JL=1, NMOD_CCN
              CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),&
-                  12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') 
+                                       NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV')
           END DO
           CALL BUDGET ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),&
-                  12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') 
+                                            NBUDGET_SV1-1+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV')
 
        END IF
      END IF
@@ -508,18 +508,18 @@ IF (LWARM) THEN
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                              &
                      UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONC_BU_RTH')
+                                                                 NBUDGET_TH,'HONC_BU_RTH')
      IF (LBUDGET_RC) CALL BUDGET (                                              &
                      UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),&
-                                                                 7,'HONC_BU_RRC')
+                                                                 NBUDGET_RC,'HONC_BU_RRC')
      IF (LBUDGET_RI) CALL BUDGET (                                              &
                      UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                 9,'HONC_BU_RRI')
+                                                                 NBUDGET_RI,'HONC_BU_RRI')
      IF (LBUDGET_SV) THEN
        CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NC,'HONC_BU_RSV')
+                                                  NBUDGET_SV1-1+NSV_LIMA_NC,'HONC_BU_RSV')
        CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NI,'HONC_BU_RSV')
+                                                  NBUDGET_SV1-1+NSV_LIMA_NI,'HONC_BU_RSV')
      END IF
    END IF
 END IF
@@ -549,16 +549,16 @@ IF (LWARM .AND. LRAIN) THEN
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                                 &
                      UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONR_BU_RTH')
+                                                                NBUDGET_TH,'HONR_BU_RTH')
      IF (LBUDGET_RR) CALL BUDGET (                                                 &
                      UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),&
-                                                                 8,'HONR_BU_RRR')
+                                                                NBUDGET_RR,'HONR_BU_RRR')
      IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),&
-                                                                11,'HONR_BU_RRG')
+                                                                NBUDGET_RG,'HONR_BU_RRG')
      IF (LBUDGET_SV) THEN
        CALL BUDGET ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NR,'HONR_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NR,'HONR_BU_RSV')
      END IF
    END IF
 END IF
@@ -639,46 +639,46 @@ ELSE
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) THEN
        ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,4,'HONH_BU_RTH')
-       IF (LWARM) CALL BUDGET (ZW,4,'HONC_BU_RTH')
-       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,4,'HONR_BU_RTH')
+       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_TH,'HONH_BU_RTH')
+       IF (LWARM) CALL BUDGET (ZW,NBUDGET_TH,'HONC_BU_RTH')
+       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_TH,'HONR_BU_RTH')
      ENDIF
      IF (LBUDGET_RV) THEN
        ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,6,'HONH_BU_RRV')
+       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_RV,'HONH_BU_RRV')
      ENDIF
      IF (LBUDGET_RC) THEN
        ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:)
-       IF (LWARM) CALL BUDGET (ZW,7,'HONC_BU_RRC')
+       IF (LWARM) CALL BUDGET (ZW,NBUDGET_RC,'HONC_BU_RRC')
      ENDIF
      IF (LBUDGET_RR) THEN
        ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:)
-       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,8,'HONR_BU_RRR')
+       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RR,'HONR_BU_RRR')
      ENDIF
      IF (LBUDGET_RI) THEN
        ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,9,'HONH_BU_RRI')
-       IF (LWARM) CALL BUDGET (ZW,9,'HONC_BU_RRI')
+       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_RI,'HONH_BU_RRI')
+       IF (LWARM) CALL BUDGET (ZW,NBUDGET_RI,'HONC_BU_RRI')
      ENDIF
      IF (LBUDGET_RG) THEN
        ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:)
-       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,11,'HONR_BU_RRG')
+       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RG,'HONR_BU_RRG')
      ENDIF
      IF (LBUDGET_SV) THEN
        ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:)
-       IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NC,'HONC_BU_RSV')
+       IF (LWARM) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HONC_BU_RSV')
        ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:)
-       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HONR_BU_RSV')
+       IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'HONR_BU_RSV')
        ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONH_BU_RSV')
-       IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONC_BU_RSV')
+       IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HONH_BU_RSV')
+       IF (LWARM) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HONC_BU_RSV')
        IF( OHHONI .AND. NMOD_CCN.GT.0 ) THEN
           DO JL=1, NMOD_CCN
              ZW(:,:,:) = PNFS(:,:,:,JL)*PRHODJ(:,:,:)
-             CALL BUDGET (ZW,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') 
+             CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV')
           END DO
           ZW(:,:,:) = ZNHS(:,:,:)*PRHODJ(:,:,:)
-          CALL BUDGET (ZW,12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV')
+          CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV')
        END IF
      END IF
    END IF
diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90
index 1973c65f3d23fa1a538243e90ac5371ad626d50c..53cdf53a797c73540601e2b6a78efd713c6ff577 100644
--- a/src/MNH/lima_cold_slow_processes.f90
+++ b/src/MNH/lima_cold_slow_processes.f90
@@ -356,13 +356,13 @@ IF( IMICRO >= 1 ) THEN
       IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
         IF (LBUDGET_RI) CALL BUDGET (                                          &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'CNVI_BU_RRI')
+                                                                NBUDGET_RI,'CNVI_BU_RRI')
         IF (LBUDGET_RS) CALL BUDGET (                                          &
                    UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'CNVI_BU_RRS')
+                                                                NBUDGET_RS,'CNVI_BU_RRS')
         IF (LBUDGET_SV) CALL BUDGET (                                          &
                    UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CNVI_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NI,'CNVI_BU_RSV')
         END IF
 !
 !
@@ -385,13 +385,13 @@ IF( IMICRO >= 1 ) THEN
       IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
         IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DEPS_BU_RTH')
+                                                                NBUDGET_TH,'DEPS_BU_RTH')
         IF (LBUDGET_RV) CALL BUDGET (                                                 &
                    UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'DEPS_BU_RRV')
+                                                                NBUDGET_RV,'DEPS_BU_RRV')
         IF (LBUDGET_RS) CALL BUDGET (                                                 &
                    UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'DEPS_BU_RRS')
+                                                                NBUDGET_RS,'DEPS_BU_RRS')
       END IF
 !
 !
@@ -421,13 +421,13 @@ IF( IMICRO >= 1 ) THEN
       IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
         IF (LBUDGET_RI) CALL BUDGET (                                          &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'CNVS_BU_RRI')
+                                                                NBUDGET_RI,'CNVS_BU_RRI')
         IF (LBUDGET_RS) CALL BUDGET (                                          &
                    UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'CNVS_BU_RRS')
+                                                                NBUDGET_RS,'CNVS_BU_RRS')
         IF (LBUDGET_SV) CALL BUDGET (                                           &
                    UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CNVS_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NI,'CNVS_BU_RSV')
       END IF
 !
 !
@@ -453,13 +453,13 @@ IF( IMICRO >= 1 ) THEN
       IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
         IF (LBUDGET_RI) CALL BUDGET (                                               &
                        UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'AGGS_BU_RRI')
+                                                                NBUDGET_RI,'AGGS_BU_RRI')
         IF (LBUDGET_RS) CALL BUDGET (                                               &
                        UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'AGGS_BU_RRS')
+                                                                NBUDGET_RS,'AGGS_BU_RRS')
         IF (LBUDGET_SV) CALL BUDGET (                                               &
                        UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'AGGS_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NI,'AGGS_BU_RSV')
       END IF
 !
 !
@@ -521,30 +521,30 @@ ELSE
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
     IF (LBUDGET_TH) THEN
       ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,4,'DEPS_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'DEPS_BU_RTH')
     ENDIF
     IF (LBUDGET_RV) THEN
       ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,6,'DEPS_BU_RRV')
+      CALL BUDGET (ZW,NBUDGET_RV,'DEPS_BU_RRV')
     ENDIF
     IF (LBUDGET_RI) THEN
       ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,9,'CNVI_BU_RRI')
-      CALL BUDGET (ZW,9,'CNVS_BU_RRI')
-      CALL BUDGET (ZW,9,'AGGS_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'CNVI_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'CNVS_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'AGGS_BU_RRI')
     ENDIF
     IF (LBUDGET_RS) THEN
       ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,10,'CNVI_BU_RRS')
-      CALL BUDGET (ZW,10,'DEPS_BU_RRS')
-      CALL BUDGET (ZW,10,'CNVS_BU_RRS')
-      CALL BUDGET (ZW,10,'AGGS_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'CNVI_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'DEPS_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'CNVS_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'AGGS_BU_RRS')
     ENDIF
     IF (LBUDGET_SV) THEN
       ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV')
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV')
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CNVI_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CNVS_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'AGGS_BU_RSV')
     ENDIF
   ENDIF
 !
diff --git a/src/MNH/lima_meyers.f90 b/src/MNH/lima_meyers.f90
index 775a104ec5eb74d5d885a93f146f53c2deac0d91..28c90601f4520fb51071b7420fdc3e4154c8548d 100644
--- a/src/MNH/lima_meyers.f90
+++ b/src/MNH/lima_meyers.f90
@@ -341,16 +341,16 @@ IF( INEGT >= 1 ) THEN
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
     IF (LBUDGET_TH) CALL BUDGET (                                                 &
                     UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'HIND_BU_RTH')
+                                                                NBUDGET_TH,'HIND_BU_RTH')
     IF (LBUDGET_RV) CALL BUDGET (                                                 &
                     UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'HIND_BU_RRV')
+                                                                NBUDGET_RV,'HIND_BU_RRV')
     IF (LBUDGET_RI) CALL BUDGET (                                                 &
                     UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'HIND_BU_RRI')
+                                                                NBUDGET_RI,'HIND_BU_RRI')
     IF (LBUDGET_SV) THEN
       CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                   12+NSV_LIMA_NI,'HIND_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV')
     END IF
   END IF
 !
@@ -397,12 +397,12 @@ IF( INEGT >= 1 ) THEN
 !
 ! Budget storage
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH')
-    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC')
-    IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI')
+    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'HINC_BU_RTH')
+    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'HINC_BU_RRC')
+    IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'HINC_BU_RRI')
     IF (LBUDGET_SV) THEN
-      CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV')
-      CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV')
+      CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
+      CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
     END IF
   END IF
 
@@ -445,36 +445,32 @@ ELSE
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
     IF (LBUDGET_TH) THEN
       ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,4,'HIND_BU_RTH')
-      CALL BUDGET (ZW,4,'HINC_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'HIND_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'HINC_BU_RTH')
     ENDIF
     IF (LBUDGET_RV) THEN
       ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,6,'HIND_BU_RRV')
+      CALL BUDGET (ZW,NBUDGET_RV,'HIND_BU_RRV')
     ENDIF
     IF (LBUDGET_RC) THEN
       ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,7,'HINC_BU_RRC')
+      CALL BUDGET (ZW,NBUDGET_RC,'HINC_BU_RRC')
     ENDIF
     IF (LBUDGET_RI) THEN
       ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,9,'HIND_BU_RRI')
-      CALL BUDGET (ZW,9,'HINC_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'HIND_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'HINC_BU_RRI')
     ENDIF
     IF (LBUDGET_SV) THEN
       ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
       ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV')
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
     END IF
   END IF
 !
 END IF
-
-
-
-
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90
index 7525be5b3a195b44b6020d8f7d0320b66a0b089b..9f1769c818feaf831c9b414bd48654dd7420bec2 100644
--- a/src/MNH/lima_mixed.f90
+++ b/src/MNH/lima_mixed.f90
@@ -650,108 +650,108 @@ ELSE
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
     IF (LBUDGET_TH) THEN
       ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-      IF (LSNOW) CALL BUDGET (ZW,4,'DEPG_BU_RTH')
-      CALL BUDGET (ZW,4,'IMLT_BU_RTH')
-      CALL BUDGET (ZW,4,'BERFI_BU_RTH')
-      IF (LSNOW) CALL BUDGET (ZW,4,'RIM_BU_RTH')
-      IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,4,'ACC_BU_RTH')
-      IF (LSNOW) CALL BUDGET (ZW,4,'CFRZ_BU_RTH')
-      IF (LSNOW) CALL BUDGET (ZW,4,'WETG_BU_RTH')
-      IF (LSNOW) CALL BUDGET (ZW,4,'DRYG_BU_RTH')
-      IF (LSNOW) CALL BUDGET (ZW,4,'GMLT_BU_RTH')
-      IF (LHAIL) CALL BUDGET (ZW,4,'WETH_BU_RTH')
-      IF (LHAIL) CALL BUDGET (ZW,4,'HMLT_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'DEPG_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'IMLT_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'BERFI_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'RIM_BU_RTH')
+      IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_TH,'ACC_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'CFRZ_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'WETG_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'DRYG_BU_RTH')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'GMLT_BU_RTH')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_TH,'WETH_BU_RTH')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_TH,'HMLT_BU_RTH')
     ENDIF
     IF (LBUDGET_RV) THEN
       ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-      IF (LSNOW) CALL BUDGET (ZW,6,'DEPG_BU_RRV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RV,'DEPG_BU_RRV')
     ENDIF
     IF (LBUDGET_RC) THEN
       ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,7,'IMLT_BU_RRC')
-      CALL BUDGET (ZW,7,'BERFI_BU_RRC')
-      IF (LSNOW) CALL BUDGET (ZW,7,'RIM_BU_RRC')
-      IF (LSNOW) CALL BUDGET (ZW,7,'WETG_BU_RRC')
-      IF (LSNOW) CALL BUDGET (ZW,7,'DRYG_BU_RRC')
-      IF (LHAIL) CALL BUDGET (ZW,7,'WETH_BU_RRC')
+      CALL BUDGET (ZW,NBUDGET_RC,'IMLT_BU_RRC')
+      CALL BUDGET (ZW,NBUDGET_RC,'BERFI_BU_RRC')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'RIM_BU_RRC')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'WETG_BU_RRC')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'DRYG_BU_RRC')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RC,'WETH_BU_RRC')
     ENDIF
     IF (LBUDGET_RR .AND. LRAIN) THEN
       ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:)
-      IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,8,'ACC_BU_RRR')
-      IF (LSNOW) CALL BUDGET (ZW,8,'CFRZ_BU_RRR')
-      IF (LSNOW) CALL BUDGET (ZW,8,'WETG_BU_RRR')
-      IF (LSNOW) CALL BUDGET (ZW,8,'DRYG_BU_RRR')
-      IF (LSNOW) CALL BUDGET (ZW,8,'GMLT_BU_RRR')
-      IF (LHAIL) CALL BUDGET (ZW,8,'WETH_BU_RRR')
-      IF (LHAIL) CALL BUDGET (ZW,8,'HMLT_BU_RRR')
+      IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RR,'ACC_BU_RRR')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'CFRZ_BU_RRR')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'WETG_BU_RRR')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'DRYG_BU_RRR')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'GMLT_BU_RRR')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RR,'WETH_BU_RRR')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RR,'HMLT_BU_RRR')
     ENDIF
     IF (LBUDGET_RI) THEN
       ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,9,'IMLT_BU_RRI')
-      CALL BUDGET (ZW,9,'BERFI_BU_RRI')
-      IF (LSNOW) CALL BUDGET (ZW,9,'HMS_BU_RRI')
-      IF (LSNOW) CALL BUDGET (ZW,9,'CFRZ_BU_RRI')
-      IF (LSNOW) CALL BUDGET (ZW,9,'WETG_BU_RRI')
-      IF (LSNOW) CALL BUDGET (ZW,9,'DRYG_BU_RRI')
-      IF (LSNOW) CALL BUDGET (ZW,9,'HMG_BU_RRI')
-      IF (LHAIL) CALL BUDGET (ZW,9,'WETH_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'IMLT_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'BERFI_BU_RRI')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'HMS_BU_RRI')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'CFRZ_BU_RRI')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'WETG_BU_RRI')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'DRYG_BU_RRI')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'HMG_BU_RRI')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RI,'WETH_BU_RRI')
     ENDIF
     IF (LBUDGET_RS .AND. LSNOW) THEN
       ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,10,'RIM_BU_RRS')
-      CALL BUDGET (ZW,10,'HMS_BU_RRS')
-      IF (LRAIN) CALL BUDGET (ZW,10,'ACC_BU_RRS')
-      CALL BUDGET (ZW,10,'CMEL_BU_RRS')
-      CALL BUDGET (ZW,10,'WETG_BU_RRS')
-      CALL BUDGET (ZW,10,'DRYG_BU_RRS')
-      IF (LHAIL) CALL BUDGET (ZW,10,'WETH_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'RIM_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'HMS_BU_RRS')
+      IF (LRAIN) CALL BUDGET (ZW,NBUDGET_RS,'ACC_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'CMEL_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'WETG_BU_RRS')
+      CALL BUDGET (ZW,NBUDGET_RS,'DRYG_BU_RRS')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RS,'WETH_BU_RRS')
     ENDIF
     IF (LBUDGET_RG .AND. LSNOW) THEN
       ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,11,'DEPG_BU_RRG')
-      CALL BUDGET (ZW,11,'RIM_BU_RRG')
-      IF (LRAIN) CALL BUDGET (ZW,11,'ACC_BU_RRG')
-      CALL BUDGET (ZW,11,'CMEL_BU_RRG')
-      CALL BUDGET (ZW,11,'CFRZ_BU_RRG')
-      CALL BUDGET (ZW,11,'WETG_BU_RRG')
-      CALL BUDGET (ZW,11,'DRYG_BU_RRG')
-      CALL BUDGET (ZW,11,'HMG_BU_RRG')
-      CALL BUDGET (ZW,11,'GMLT_BU_RRG')
-      IF (LHAIL) CALL BUDGET (ZW,11,'WETH_BU_RRG')
-      IF (LHAIL) CALL BUDGET (ZW,11,'COHG_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'DEPG_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'RIM_BU_RRG')
+      IF (LRAIN) CALL BUDGET (ZW,NBUDGET_RG,'ACC_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'CMEL_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'CFRZ_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'WETG_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'DRYG_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'HMG_BU_RRG')
+      CALL BUDGET (ZW,NBUDGET_RG,'GMLT_BU_RRG')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RG,'WETH_BU_RRG')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RG,'COHG_BU_RRG')
     ENDIF
     IF (LBUDGET_RH .AND. LHAIL) THEN
       ZW(:,:,:) = PRHS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12,'WETG_BU_RRH')
-      IF (LHAIL) CALL BUDGET (ZW,12,'WETH_BU_RRH')
-      IF (LHAIL) CALL BUDGET (ZW,12,'COHG_BU_RRH')
-      IF (LHAIL) CALL BUDGET (ZW,12,'HMLT_BU_RRH')
+      CALL BUDGET (ZW,NBUDGET_RH,'WETG_BU_RRH')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'WETH_BU_RRH')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'COHG_BU_RRH')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'HMLT_BU_RRH')
     ENDIF
     IF (LBUDGET_SV) THEN
       ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NC,'IMLT_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'RIM_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'WETG_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'DRYG_BU_RSV')
-      IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NC,'WETH_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'IMLT_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'RIM_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'WETG_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'DRYG_BU_RSV')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'WETH_BU_RSV')
 !
       ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:)
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'ACC_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'CFRZ_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'WETG_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'DRYG_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'GMLT_BU_RSV')
-      IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NR,'WETH_BU_RSV')
-      IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HMLT_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'ACC_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'CFRZ_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'WETG_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'DRYG_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'GMLT_BU_RSV')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'WETH_BU_RSV')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'HMLT_BU_RSV')
 !
       ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'IMLT_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HMS_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'CFRZ_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'WETG_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'DRYG_BU_RSV')
-      IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HMG_BU_RSV')
-      IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NI,'WETH_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'IMLT_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HMS_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CFRZ_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'WETG_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'DRYG_BU_RSV')
+      IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HMG_BU_RSV')
+      IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'WETH_BU_RSV')
     ENDIF
   ENDIF
 !
diff --git a/src/MNH/lima_mixed_fast_processes.f90 b/src/MNH/lima_mixed_fast_processes.f90
index fdb9724bcc844fa74054e06b81c066867c806c04..09ea55a1b5a8b21bbd490edc38764c28beed8f79 100644
--- a/src/MNH/lima_mixed_fast_processes.f90
+++ b/src/MNH/lima_mixed_fast_processes.f90
@@ -329,19 +329,19 @@ END IF
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                               &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-                                                               4,'RIM_BU_RTH')
+                                                      NBUDGET_TH,'RIM_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                               &
                  UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                               7,'RIM_BU_RRC')
+                                                      NBUDGET_RC,'RIM_BU_RRC')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                  UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'RIM_BU_RRS')
+                                                      NBUDGET_RS,'RIM_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                  UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'RIM_BU_RRG')
+                                                      NBUDGET_RG,'RIM_BU_RRG')
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NC,'RIM_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NC,'RIM_BU_RSV')
   END IF
 END IF
 !
@@ -386,13 +386,13 @@ END IF
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_RI) CALL BUDGET (                                            &
                      UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'HMS_BU_RRI')
+                                                      NBUDGET_RI,'HMS_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                            &
                      UNPACK(ZRSS(:),MASK=GMICRO,FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'HMS_BU_RRS')
+                                                      NBUDGET_RS,'HMS_BU_RRS')
   IF (LBUDGET_SV) CALL BUDGET (                                            &
                      UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NI,'HMS_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NI,'HMS_BU_RSV')
 END IF
 !
 !
@@ -515,19 +515,19 @@ END IF
 IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. LRAIN) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                              &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                               4,'ACC_BU_RTH')
+                                                      NBUDGET_TH,'ACC_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                               &
                  UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                               8,'ACC_BU_RRR')
+                                                      NBUDGET_RR,'ACC_BU_RRR')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                  UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'ACC_BU_RRS')
+                                                      NBUDGET_RS,'ACC_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                  UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'ACC_BU_RRG')
+                                                      NBUDGET_RG,'ACC_BU_RRG')
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NR,'ACC_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NR,'ACC_BU_RSV')
   END IF
 END IF
 !
@@ -563,10 +563,10 @@ END WHERE
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_RS) CALL BUDGET (                                                     &
                        UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'CMEL_BU_RRS')
+                                                            NBUDGET_RS,'CMEL_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                     &
                        UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'CMEL_BU_RRG')
+                                                            NBUDGET_RG,'CMEL_BU_RRG')
 END IF
 !
 END IF ! LSNOW
@@ -603,21 +603,21 @@ END WHERE
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-                                                                4,'CFRZ_BU_RTH')
+                                                        NBUDGET_TH,'CFRZ_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                    UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'CFRZ_BU_RRR')
+                                                        NBUDGET_RR,'CFRZ_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'CFRZ_BU_RRI')
+                                                        NBUDGET_RI,'CFRZ_BU_RRI')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                    UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'CFRZ_BU_RRG')
+                                                        NBUDGET_RG,'CFRZ_BU_RRG')
   IF (LBUDGET_SV) THEN
     CALL BUDGET (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NR,'CFRZ_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NR,'CFRZ_BU_RSV')
     CALL BUDGET (  UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CFRZ_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NI,'CFRZ_BU_RSV')
   END IF
 END IF
 !
@@ -839,32 +839,32 @@ END WHERE
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                              &
                     UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'WETG_BU_RTH')
+                                                        NBUDGET_TH,'WETG_BU_RTH')
      IF (LBUDGET_RC) CALL BUDGET (                                               &
                     UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'WETG_BU_RRC')
+                                                        NBUDGET_RC,'WETG_BU_RRC')
      IF (LBUDGET_RR) CALL BUDGET (                                               &
                     UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'WETG_BU_RRR')
+                                                        NBUDGET_RR,'WETG_BU_RRR')
      IF (LBUDGET_RI) CALL BUDGET (                                               &
                     UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'WETG_BU_RRI')
+                                                        NBUDGET_RI,'WETG_BU_RRI')
      IF (LBUDGET_RS) CALL BUDGET (                                               &
                     UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'WETG_BU_RRS')
+                                                        NBUDGET_RS,'WETG_BU_RRS')
      IF (LBUDGET_RG) CALL BUDGET (                                               &
                     UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'WETG_BU_RRG')
+                                                        NBUDGET_RG,'WETG_BU_RRG')
      IF (LBUDGET_RH) CALL BUDGET (                                               &
                     UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-                                                               12,'WETG_BU_RRH')
+                                                        NBUDGET_RH,'WETG_BU_RRH')
      IF (LBUDGET_SV) THEN
        CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'WETG_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NC,'WETG_BU_RSV')
        CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'WETG_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NR,'WETG_BU_RSV')
        CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'WETG_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NI,'WETG_BU_RSV')
      END IF
    END IF
 !
@@ -890,29 +890,29 @@ END WHERE
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DRYG_BU_RTH')
+                                                      NBUDGET_TH,'DRYG_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                    UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'DRYG_BU_RRC')
+                                                      NBUDGET_RC,'DRYG_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                    UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'DRYG_BU_RRR')
+                                                      NBUDGET_RR,'DRYG_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'DRYG_BU_RRI')
+                                                      NBUDGET_RI,'DRYG_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                    UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'DRYG_BU_RRS')
+                                                      NBUDGET_RS,'DRYG_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                    UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'DRYG_BU_RRG')
+                                                      NBUDGET_RG,'DRYG_BU_RRG')
   IF (LBUDGET_SV) THEN
     CALL BUDGET (  UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'DRYG_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NC,'DRYG_BU_RSV')
     CALL BUDGET (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'DRYG_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NR,'DRYG_BU_RSV')
     CALL BUDGET (  UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'DRYG_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NI,'DRYG_BU_RSV')
   END IF
 END IF
 !
@@ -956,13 +956,13 @@ END IF
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_RI) CALL BUDGET (                                               &
                      UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'HMG_BU_RRI')
+                                                      NBUDGET_RI,'HMG_BU_RRI')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                      UNPACK(ZRGS(:),MASK=GMICRO,FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'HMG_BU_RRG')
+                                                      NBUDGET_RG,'HMG_BU_RRG')
   IF (LBUDGET_SV) CALL BUDGET (                                               &
                      UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                              12+NSV_LIMA_NI,'HMG_BU_RSV')
+                                       NBUDGET_SV1-1+NSV_LIMA_NI,'HMG_BU_RSV')
 END IF
 !
 !
@@ -997,16 +997,16 @@ END WHERE
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'GMLT_BU_RTH')
+                                                        NBUDGET_TH,'GMLT_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                    UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'GMLT_BU_RRR')
+                                                        NBUDGET_RR,'GMLT_BU_RRR')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                    UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'GMLT_BU_RRG')
+                                                        NBUDGET_RG,'GMLT_BU_RRG')
   IF (LBUDGET_SV) THEN
     CALL BUDGET (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'GMLT_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_LIMA_NR,'GMLT_BU_RSV')
   END IF
 END IF
 !
@@ -1216,32 +1216,32 @@ END IF ! IHAIL>0
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
    IF (LBUDGET_TH) CALL BUDGET (                                                 &
         UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-        4,'WETH_BU_RTH')
+        NBUDGET_TH,'WETH_BU_RTH')
    IF (LBUDGET_RC) CALL BUDGET (                                                 &
         UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-        7,'WETH_BU_RRC')
+        NBUDGET_RC,'WETH_BU_RRC')
    IF (LBUDGET_RR) CALL BUDGET (                                                 &
         UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-        8,'WETH_BU_RRR')
+        NBUDGET_RR,'WETH_BU_RRR')
    IF (LBUDGET_RI) CALL BUDGET (                                                 &
         UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-        9,'WETH_BU_RRI')
+        NBUDGET_RI,'WETH_BU_RRI')
    IF (LBUDGET_RS) CALL BUDGET (                                                 &
         UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-        10,'WETH_BU_RRS')
+        NBUDGET_RS,'WETH_BU_RRS')
    IF (LBUDGET_RG) CALL BUDGET (                                                 &
         UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-        11,'WETH_BU_RRG')
+        NBUDGET_RG,'WETH_BU_RRG')
    IF (LBUDGET_RH) CALL BUDGET (                                                 &
         UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-        12,'WETH_BU_RRH')
+        NBUDGET_RH,'WETH_BU_RRH')
    IF (LBUDGET_SV) THEN
       CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NC,'WETH_BU_RSV')
+           NBUDGET_SV1-1+NSV_LIMA_NC,'WETH_BU_RSV')
       CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NR,'WETH_BU_RSV')
+           NBUDGET_SV1-1+NSV_LIMA_NR,'WETH_BU_RSV')
       CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NI,'WETH_BU_RSV')
+           NBUDGET_SV1-1+NSV_LIMA_NI,'WETH_BU_RSV')
    END IF
 END IF
 !
@@ -1307,16 +1307,16 @@ END IF
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
    IF (LBUDGET_TH) CALL BUDGET (                                                 &
         UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-        4,'HMLT_BU_RTH')
+        NBUDGET_TH, 'HMLT_BU_RTH')
    IF (LBUDGET_RR) CALL BUDGET (                                                 &
         UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-        8,'HMLT_BU_RRR')
+        NBUDGET_RR, 'HMLT_BU_RRR')
    IF (LBUDGET_RH) CALL BUDGET (                                                 &
         UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-        12,'HMLT_BU_RRH')
+        NBUDGET_RH, 'HMLT_BU_RRH')
    IF (LBUDGET_SV) THEN
       CALL BUDGET (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NR,'HMLT_BU_RSV')
+           NBUDGET_SV1-1+NSV_LIMA_NR, 'HMLT_BU_RSV')
    END IF
 END IF
 !
diff --git a/src/MNH/lima_mixed_slow_processes.f90 b/src/MNH/lima_mixed_slow_processes.f90
index 7c58f4910a4603219de2d1c7887db6b2760be388..bf559a2b5812c4cf8dcd92efa2bd0b4ea3e0f37f 100644
--- a/src/MNH/lima_mixed_slow_processes.f90
+++ b/src/MNH/lima_mixed_slow_processes.f90
@@ -1,3 +1,8 @@
+!MNH_LIC Copyright 2013-2019 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.
+!-----------------------------------------------------------------
 !      #####################################
        MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
 !      #####################################
@@ -194,13 +199,13 @@ IF (LSNOW) THEN
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DEPG_BU_RTH')
+                                                                NBUDGET_TH,'DEPG_BU_RTH')
      IF (LBUDGET_RV) CALL BUDGET (                                                 &
                    UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'DEPG_BU_RRV')
+                                                                NBUDGET_RV,'DEPG_BU_RRV')
      IF (LBUDGET_RG) CALL BUDGET (                                                 &
                    UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'DEPG_BU_RRG')
+                                                                NBUDGET_RG,'DEPG_BU_RRG')
   END IF
 END IF
 !
@@ -229,18 +234,18 @@ END IF
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'IMLT_BU_RTH')
+                                                                NBUDGET_TH,'IMLT_BU_RTH')
      IF (LBUDGET_RC) CALL BUDGET (                                                 &
                    UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'IMLT_BU_RRC')
+                                                                NBUDGET_RC,'IMLT_BU_RRC')
      IF (LBUDGET_RI) CALL BUDGET (                                                 &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'IMLT_BU_RRI')
+                                                                NBUDGET_RI,'IMLT_BU_RRI')
      IF (LBUDGET_SV) THEN
        CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'IMLT_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NC,'IMLT_BU_RSV')
        CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'IMLT_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_LIMA_NI,'IMLT_BU_RSV')
      END IF
    END IF
 !
@@ -265,13 +270,13 @@ END IF
    IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
      IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                               4,'BERFI_BU_RTH')
+                                                               NBUDGET_TH,'BERFI_BU_RTH')
      IF (LBUDGET_RC) CALL BUDGET (                                                 &
                    UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                               7,'BERFI_BU_RRC')
+                                                               NBUDGET_RC,'BERFI_BU_RRC')
      IF (LBUDGET_RI) CALL BUDGET (                                                 &
                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'BERFI_BU_RRI')
+                                                               NBUDGET_RI,'BERFI_BU_RRI')
    END IF
 !
 !------------------------------------------------------------------------------
diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90
index e3efc478d7c83f49440a8f7c344103bd4ec19768..f0e61b630fb2156b8cb8c60c39659263e86d9d28 100644
--- a/src/MNH/lima_nucleation_procs.f90
+++ b/src/MNH/lima_nucleation_procs.f90
@@ -72,11 +72,12 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, OCLOSE_OUT, PRHODJ,
 !!
 !-------------------------------------------------------------------------------
 !
-USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, &
+USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI,  &
                             NMOD_CCN, NMOD_IFN, NMOD_IMM
-USE MODD_BUDGET,     ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,&
-                            LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV
-USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE,               &
+USE MODD_BUDGET,     ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, &
+                            LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV, &
+                            NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1
+USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE,                &
                             NSV_LIMA_NI, NSV_LIMA_IFN_FREE
 !
 USE MODD_IO,         ONLY: TFILEDATA
@@ -169,13 +170,13 @@ IF (LWARM .AND. LACTI .AND. NMOD_CCN.GE.1) THEN
 ! Call budgets
 !
    IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   4,                        'HENU_BU_RTH')
-      IF (LBUDGET_RV) CALL BUDGET (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   6,                        'HENU_BU_RRV')
-      IF (LBUDGET_RC) CALL BUDGET (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   7,                        'HENU_BU_RRC')
+      IF (LBUDGET_TH) CALL BUDGET (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   NBUDGET_TH,                           'HENU_BU_RTH')
+      IF (LBUDGET_RV) CALL BUDGET (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   NBUDGET_RV,                           'HENU_BU_RRV')
+      IF (LBUDGET_RC) CALL BUDGET (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   NBUDGET_RC,                           'HENU_BU_RRC')
       IF (LBUDGET_SV) THEN
-                      CALL BUDGET (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   12+NSV_LIMA_NC,           'HENU_BU_RSV')
+                      CALL BUDGET (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   NBUDGET_SV1-1+NSV_LIMA_NC,            'HENU_BU_RSV')
             DO JL=1, NMOD_CCN
-                      CALL BUDGET (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV') 
+                      CALL BUDGET (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1, 'HENU_BU_RSV')
             END DO
       END IF
    END IF
@@ -194,24 +195,24 @@ IF (LCOLD .AND. LNUCL .AND. .NOT.LMEYERS .AND. NMOD_IFN.GE.1) THEN
 ! Call budgets
 !
    IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4,                        'HIND_BU_RTH')
-      IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6,                        'HIND_BU_RRV')
-      IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9,                        'HIND_BU_RRI')
+      IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH, 'HIND_BU_RTH')
+      IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RV, 'HIND_BU_RRV')
+      IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI, 'HIND_BU_RRI')
       IF (LBUDGET_SV) THEN
-                      CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,           'HIND_BU_RSV')
+                      CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI, 'HIND_BU_RSV')
          IF (NMOD_IFN.GE.1) THEN
             DO JL=1, NMOD_IFN
-                      CALL BUDGET ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP,              12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') 
+                      CALL BUDGET ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP,     NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV')
             END DO
          END IF
       END IF
 !
-      IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH')
-      IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC')
-      IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI')
+      IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH,'HINC_BU_RTH')
+      IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RC,'HINC_BU_RRC')
+      IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI,'HINC_BU_RRI')
       IF (LBUDGET_SV) THEN
-         CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV')
-         CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV')
+         CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
+         CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
       END IF
    END IF
 !
@@ -240,17 +241,17 @@ IF (LCOLD .AND. LNUCL .AND. LMEYERS) THEN
 ! Call budgets
 !
    IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4,             'HIND_BU_RTH')
-      IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6,             'HIND_BU_RRV')
-      IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9,             'HIND_BU_RRI')
-      IF (LBUDGET_SV) CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV')
-!
-      IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH')
-      IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC')
-      IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI')
+      IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH,               'HIND_BU_RTH')
+      IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RV,               'HIND_BU_RRV')
+      IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI,               'HIND_BU_RRI')
+      IF (LBUDGET_SV) CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV')
+!
+      IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH,'HINC_BU_RTH')
+      IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RC,'HINC_BU_RRC')
+      IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI,'HINC_BU_RRI')
       IF (LBUDGET_SV) THEN
-         CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV')
-         CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV')
+         CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
+         CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
       END IF
    END IF
 !
@@ -273,13 +274,13 @@ IF (LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN.GE.1) THEN
 ! Call budgets
 !
    IF (LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   4,                        'HONH_BU_RTH')
-     IF (LBUDGET_RV) CALL BUDGET (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   6,                        'HONH_BU_RRV')
-     IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   9,                        'HONH_BU_RRI')
+     IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_TH,                            'HONH_BU_RTH')
+     IF (LBUDGET_RV) CALL BUDGET (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RV,                            'HONH_BU_RRV')
+     IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RI,                            'HONH_BU_RRI')
      IF (LBUDGET_SV) THEN
-                     CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   12+NSV_LIMA_NI,           'HONH_BU_RSV')
+                     CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   NBUDGET_SV1-1+NSV_LIMA_NI,           'HONH_BU_RSV')
           DO JL=1, NMOD_CCN
-                     CALL BUDGET (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') 
+                     CALL BUDGET (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV')
           END DO
      END IF
   END IF
diff --git a/src/MNH/lima_phillips.f90 b/src/MNH/lima_phillips.f90
index 03af388b71ef40b0ad5e71b8ddea351a304c1483..3f654dc33906688113acbe0b12b66fe1a4aae9c0 100644
--- a/src/MNH/lima_phillips.f90
+++ b/src/MNH/lima_phillips.f90
@@ -470,19 +470,19 @@ END DO
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                              &
                   UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                              4,'HIND_BU_RTH')
+                                                              NBUDGET_TH,'HIND_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (                                              &
                   UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                              6,'HIND_BU_RRV')
+                                                              NBUDGET_RV,'HIND_BU_RRV')
   IF (LBUDGET_RI) CALL BUDGET (                                              &
                   UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                              9,'HIND_BU_RRI')
+                                                              NBUDGET_RI,'HIND_BU_RRI')
   IF (LBUDGET_SV) THEN
     CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NI,'HIND_BU_RSV')
+                                               NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV')
     IF (NMOD_IFN.GE.1) THEN
        DO JL=1, NMOD_IFN
-          CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') 
+          CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV')
        END DO
     END IF
   END IF
@@ -540,18 +540,18 @@ END DO
 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                   UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                              4,'HINC_BU_RTH')
+                                                              NBUDGET_TH,'HINC_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                   UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),&
-                                                              7,'HINC_BU_RRC')
+                                                              NBUDGET_RC,'HINC_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                   UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                              9,'HINC_BU_RRI')
+                                                              NBUDGET_RI,'HINC_BU_RRI')
   IF (LBUDGET_SV) THEN
     CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NC,'HINC_BU_RSV')
+                                               NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
     CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NI,'HINC_BU_RSV')
+                                               NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
   END IF
 END IF
 !
@@ -627,32 +627,32 @@ ELSE
   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
     IF (LBUDGET_TH) THEN
       ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,4,'HIND_BU_RTH')
-      CALL BUDGET (ZW,4,'HINC_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'HIND_BU_RTH')
+      CALL BUDGET (ZW,NBUDGET_TH,'HINC_BU_RTH')
     ENDIF
     IF (LBUDGET_RV) THEN
       ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,6,'HIND_BU_RRV')
+      CALL BUDGET (ZW,NBUDGET_RV,'HIND_BU_RRV')
     ENDIF
     IF (LBUDGET_RC) THEN
       ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,7,'HINC_BU_RRC')
+      CALL BUDGET (ZW,NBUDGET_RC,'HINC_BU_RRC')
     ENDIF
     IF (LBUDGET_RI) THEN
       ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,9,'HIND_BU_RRI')
-      CALL BUDGET (ZW,9,'HINC_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'HIND_BU_RRI')
+      CALL BUDGET (ZW,NBUDGET_RI,'HINC_BU_RRI')
     ENDIF
     IF (LBUDGET_SV) THEN
 !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV
       ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV')
       ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV')
-      CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV')
+      CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV')
       IF (NMOD_IFN.GE.1) THEN
          DO JL=1, NMOD_IFN
-            CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') 
+            CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV')
          END DO
       END IF
     END IF
diff --git a/src/MNH/lima_precip_scavenging.f90 b/src/MNH/lima_precip_scavenging.f90
index 351ee92f0222640114445e455096dcd65234ae2b..71de50a5e048d2814b37f93786e4679a745494be 100644
--- a/src/MNH/lima_precip_scavenging.f90
+++ b/src/MNH/lima_precip_scavenging.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 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.
@@ -559,13 +559,13 @@ IF (LBUDGET_SV) THEN
    IF (NMOD_CCN.GE.1) THEN
       DO JL=1, NMOD_CCN
          CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), &
-              12+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV') 
+              NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV')
       END DO
    END IF
    IF (NMOD_IFN.GE.1) THEN
       DO JL=1, NMOD_IFN
          CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), &
-              12+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV') 
+              NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV')
       END DO
    END IF
 END IF
diff --git a/src/MNH/lima_warm.f90 b/src/MNH/lima_warm.f90
index 1ac67f3ce0e7830f0112bad40bf766dbcb0fd783..e896e999a8d3e3134821a947a3f2d0a6839c3e6e 100644
--- a/src/MNH/lima_warm.f90
+++ b/src/MNH/lima_warm.f90
@@ -323,11 +323,11 @@ CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
                               PINPRC, PINPRR,               &
                               PINPRR3D    )
 !
-IF (LBUDGET_RC .AND. OSEDC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-IF (LBUDGET_RR .AND. ORAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
+IF (LBUDGET_RC .AND. OSEDC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC')
+IF (LBUDGET_RR .AND. ORAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR')
 IF (LBUDGET_SV) THEN
-  IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SEDI_BU_RSV')
-  IF (ORAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SEDI_BU_RSV')
+  IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'SEDI_BU_RSV')
+  IF (ORAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'SEDI_BU_RSV')
 END IF
 !
 ! 2.bis Deposition at 1st level above ground
@@ -343,8 +343,8 @@ IF (LDEPOC) THEN
      PINDEP(:,:) = XVDEPOC * PRCT(:,:,2) *  PRHODREF(:,:,2) /XRHOLW
   END WHERE
 !
-  IF ( LBUDGET_RC ) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7             ,'DEPO_BU_RRC')
-  IF ( LBUDGET_SV ) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DEPO_BU_RSV') 
+  IF ( LBUDGET_RC ) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,                'DEPO_BU_RRC')
+  IF ( LBUDGET_SV ) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DEPO_BU_RSV')
 END IF
 ! 
 !-------------------------------------------------------------------------------
@@ -360,13 +360,13 @@ IF (LACTI .AND. NMOD_CCN.GE.1) THEN
                         PRCM, PRVT, PRCT, PRRT,                          &
                         PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
 !
-   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC')
+   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH')
+   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV')
+   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC')
    IF (LBUDGET_SV) THEN
-      CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HENU_BU_RSV') ! RCN
+      CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'HENU_BU_RSV') ! RCN
          DO JL=1, NMOD_CCN
-            CALL BUDGET ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV') 
+            CALL BUDGET ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV')
          END DO
    END IF
 !
@@ -401,12 +401,12 @@ IF (ORAIN) THEN
                         PRVS, PRCS, PRRS, PCCS, PCRS, PTHS,         &
                         PEVAP3D                                     )
 !
-   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV')
-   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'REVA_BU_RRC')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR')
-   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH')
-   IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'REVA_BU_RSV')
-   IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'REVA_BU_RSV')
+   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV,'REVA_BU_RRV')
+   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'REVA_BU_RRC')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'REVA_BU_RRR')
+   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'REVA_BU_RTH')
+   IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'REVA_BU_RSV')
+   IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'REVA_BU_RSV')
 !
 !
 !-------------------------------------------------------------------------------
@@ -426,7 +426,7 @@ IF (ORAIN) THEN
 !
 ! Budget storage
    IF (LBUDGET_SV) &
-      CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,&
+      CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,&
                     &'BRKU_BU_RSV') 
 
 !
diff --git a/src/MNH/lima_warm_coal.f90 b/src/MNH/lima_warm_coal.f90
index aaae2a04be021958b9d559584d07004c012c40ea..ff32fb82922bd0eb4cae1109b199538bc69d7dba 100644
--- a/src/MNH/lima_warm_coal.f90
+++ b/src/MNH/lima_warm_coal.f90
@@ -262,7 +262,7 @@ IF (LRAIN) THEN
   ZW(:,:,:) = PCCS(:,:,:)
   IF (LBUDGET_SV) CALL BUDGET (                                 &
                    UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))&
-                   &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') 
+                   &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'SELF_BU_RSV')
 !
 !
 !-------------------------------------------------------------------------------
@@ -297,20 +297,20 @@ IF (LRAIN) THEN
    ZW(:,:,:) = PRCS(:,:,:)
    IF (LBUDGET_RC) CALL BUDGET (                                  &
                UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                            *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
+                            *PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC')
 
    ZW(:,:,:) = PRRS(:,:,:)
    IF (LBUDGET_RR) CALL BUDGET (                                  &
                UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                            *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
+                            *PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR')
    ZW(:,:,:) = PCRS(:,:,:)
    IF (LBUDGET_SV) THEN
       ZW(:,:,:) = PCRS(:,:,:)
       CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-               *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV')
+               *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'AUTO_BU_RSV')
       ZW(:,:,:) = PCCS(:,:,:)
       CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-               *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV')
+               *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'AUTO_BU_RSV')
    END IF
 !
 !
@@ -364,15 +364,15 @@ IF (LRAIN) THEN
    ZW(:,:,:) = PRCS(:,:,:)
    IF (LBUDGET_RC) CALL BUDGET (                                  &
                UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                              *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
+                              *PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC')
    ZW(:,:,:) = PRRS(:,:,:)
    IF (LBUDGET_RR) CALL BUDGET (                                  &
                UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                              *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
+                              *PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR')
    ZW(:,:,:) = PCCS(:,:,:)
    IF (LBUDGET_SV) CALL BUDGET (                                  &
                UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                  *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV')
+                  *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'ACCR_BU_RSV')
 !
 !
 !-------------------------------------------------------------------------------
@@ -422,7 +422,7 @@ IF (LRAIN) THEN
    ZW(:,:,:) = PCRS(:,:,:)
    IF (LBUDGET_SV) CALL BUDGET (                                  &
                UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                  *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV')
+                  *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'SCBU_BU_RSV')
 !
 END IF ! LRAIN
 !
@@ -473,18 +473,18 @@ ELSE
 !        ------------------------
 !
 !
-   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV')
+   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SELF_BU_RSV')
 !
-   IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
-   IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
-   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV')
-   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV')
+   IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,                'AUTO_BU_RRC')
+   IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,                'AUTO_BU_RRR')
+   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'AUTO_BU_RSV')
+   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'AUTO_BU_RSV')
 !
-   IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
-   IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
-   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV')
+   IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,                'ACCR_BU_RRC')
+   IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,                'ACCR_BU_RRR')
+   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'ACCR_BU_RSV')
 !
-   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV')
+   IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SCBU_BU_RSV')
 
 END IF ! IMICRO
 !
diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90
index 9ff02772fc696e682c0efc396edbb3c0b6780748..33d6f973fbc2407e4d9f72b8922e1d2e1179dc27 100644
--- a/src/MNH/modd_aircraft_balloon.f90
+++ b/src/MNH/modd_aircraft_balloon.f90
@@ -33,14 +33,17 @@
 !!              March, 2013 : O.Caumont, C.Lac : add vertical profiles
 !!              Oct,2016 : G.DELAUTIER LIMA
 !  P. Wautelet 08/02/2019: add missing NULL association for pointers
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 !
-USE MODD_TYPE_DATE
-!
+use modd_type_date, only: date_time
+
+implicit none
+
 TYPE FLYER
 !
 !
@@ -109,7 +112,7 @@ REAL                          :: P_CUR    ! current p (if 'AIRCRA' and 'ALTDEF'
 !
 !* data records
 !
-REAL, DIMENSION(:),    POINTER :: TIME      => NULL() ! t(n)  (n: recording instants)
+type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants)
 REAL, DIMENSION(:),    POINTER :: X         => NULL() ! X(n)
 REAL, DIMENSION(:),    POINTER :: Y         => NULL() ! Y(n)
 REAL, DIMENSION(:),    POINTER :: Z         => NULL() ! Z(n)
@@ -140,7 +143,6 @@ REAL, DIMENSION(:,:),  POINTER :: AER       => NULL() ! Extinction at 550 nm
 REAL, DIMENSION(:,:),  POINTER :: DST_WL    => NULL() ! Extinction by wavelength
 REAL, DIMENSION(:),    POINTER :: ZS        => NULL() ! zs(n)
 REAL, DIMENSION(:),    POINTER :: TSRAD     => NULL() ! Ts(n)
-REAL, DIMENSION(:,:),  POINTER :: DATIME    => NULL() ! record for diachro
 !
 REAL, DIMENSION(:)  ,   POINTER :: THW_FLUX => NULL() ! thw_flux(n)
 REAL, DIMENSION(:)  ,   POINTER :: RCW_FLUX => NULL() ! rcw_flux(n)
diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90
index 85fd9295bea449b2a57a47dfe866e77572cdab38..56e11dcee214fea7c535481f5f7a5032233b263b 100644
--- a/src/MNH/modd_budget.f90
+++ b/src/MNH/modd_budget.f90
@@ -44,6 +44,7 @@
 !!      S. Riette       11/2016  New budgets for ICE3/ICE4
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 19/07/2019: parameters to identify budget number
+!  P. Wautelet 15/11/2019: remove unused CBURECORD variable
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -54,6 +55,7 @@ implicit none
 
 public
 
+integer, parameter :: NBUDGET_RHO = 0  ! Reference number for budget of RhoJ
 integer, parameter :: NBUDGET_U   = 1  ! Reference number for budget of RhoJu  and/or LES budgets with u
 integer, parameter :: NBUDGET_V   = 2  ! Reference number for budget of RhoJv  and/or LES budgets with u
 integer, parameter :: NBUDGET_W   = 3  ! Reference number for budget of RhoJw  and/or LES budgets with u
@@ -94,8 +96,6 @@ CHARACTER(LEN=2), SAVE, DIMENSION(:,:),  & ! resulting string character of the
         ALLOCATABLE :: CBUACTION           ! transcription of the budget actions 
                                            ! (integer) read in  namelists or 
                                            ! set by default
-CHARACTER (LEN=NMNHNAMELGTMAX), SAVE, DIMENSION(:,:),& ! names of records on the FM file 
-                 ALLOCATABLE :: CBURECORD  ! for the budgets 
 !
 CHARACTER (LEN=99), SAVE, DIMENSION(:,:),& ! name of a process for a budget. It
                  ALLOCATABLE :: CBUCOMMENT ! will appear in the comment part of 
diff --git a/src/MNH/modd_les.f90 b/src/MNH/modd_les.f90
index c30666b2e4e2cdbb2fdce8ea65291c2bf0bcc51c..e830ed1a4331fd3716cda326390bb7b22f0085bd 100644
--- a/src/MNH/modd_les.f90
+++ b/src/MNH/modd_les.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ############### 
@@ -42,6 +42,7 @@
 !!       P. Aumond   Oct     ,2009  User multimaskS + 4th order
 !!       C.Lac       Oct     ,2014  Correction on user masks
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -136,9 +137,6 @@ INTEGER :: NLES_CURRENT_TCOUNT
 INTEGER :: NLES_CURRENT_TIMES
 ! current model NLES_TIMES (number of LES samplings)
 !
-REAL, DIMENSION(:,:), ALLOCATABLE :: XLES_CURRENT_TRAJT
-! trajt array for write_diachro routine
-!
 INTEGER :: NLES_CURRENT_IINF, NLES_CURRENT_ISUP, NLES_CURRENT_JINF, NLES_CURRENT_JSUP
 ! coordinates for write_diachro, set to NLESn_IINF(current model), etc...
 !
@@ -151,9 +149,6 @@ CHARACTER(LEN=4), DIMENSION(2) :: CLES_CURRENT_LBCX
 CHARACTER(LEN=4), DIMENSION(2) :: CLES_CURRENT_LBCY
 ! current model Y boundary conditions for 2 points correlations computations
 !
-REAL, DIMENSION(:,:), ALLOCATABLE :: XLES_CURRENT_DATIME 
-!  date array for diachro
-!
 REAL, DIMENSION(:),   ALLOCATABLE :: XLES_CURRENT_Z
 ! altitudes for diachro
 !
diff --git a/src/MNH/modd_les_budget.f90 b/src/MNH/modd_les_budget.f90
index 355b3890b566a508e94163f700d59bbacb432456..062eb355286b592ace756db804a5257fbe31d3f2 100644
--- a/src/MNH/modd_les_budget.f90
+++ b/src/MNH/modd_les_budget.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 modd 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ###############
       MODULE MODD_LES_BUDGET
 !     ###############
@@ -113,30 +108,30 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: X_LES_BU_SBG_Tke
 !
 !* index for each processus taken into account in the budgets
 !
-INTEGER :: NLES_TOTADV
-INTEGER :: NLES_RELA
-INTEGER :: NLES_RAD
-INTEGER :: NLES_GRAV
-INTEGER :: NLES_COR
-INTEGER :: NLES_MICR
-INTEGER :: NLES_HTURB
-INTEGER :: NLES_VTURB
-INTEGER :: NLES_FORC
-INTEGER :: NLES_PRES
-INTEGER :: NLES_DIFF
-INTEGER :: NLES_CURV
-INTEGER :: NLES_PREF
-INTEGER :: NLES_DP
-INTEGER :: NLES_TP
-INTEGER :: NLES_TR
-INTEGER :: NLES_DISS
-INTEGER :: NLES_TEND
-INTEGER :: NLES_MISC
-INTEGER :: NLES_ADVR
-INTEGER :: NLES_ADVM
-INTEGER :: NLES_NEST
-!
-INTEGER :: NLES_TOT
+integer, parameter :: NLES_TOTADV= 1
+integer, parameter :: NLES_RELA  = 2
+integer, parameter :: NLES_RAD   = 3
+integer, parameter :: NLES_GRAV  = 4
+integer, parameter :: NLES_COR   = 5
+integer, parameter :: NLES_MICR  = 6
+integer, parameter :: NLES_HTURB = 7
+integer, parameter :: NLES_VTURB = 8
+integer, parameter :: NLES_FORC  = 9
+integer, parameter :: NLES_PRES  = 10
+integer, parameter :: NLES_DIFF  = 11
+integer, parameter :: NLES_CURV  = 12
+integer, parameter :: NLES_PREF  = 13
+integer, parameter :: NLES_DP    = 14
+integer, parameter :: NLES_TP    = 15
+integer, parameter :: NLES_TR    = 16
+integer, parameter :: NLES_DISS  = 17
+integer, parameter :: NLES_TEND  = 18
+integer, parameter :: NLES_ADVR  = 19
+integer, parameter :: NLES_ADVM  = 20
+integer, parameter :: NLES_NEST  = 21
+integer, parameter :: NLES_MISC  = 22
+
+integer, parameter :: NLES_TOT   = 22
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90
index 9fe76c3f8f7eacbc68b7724d4f0df26562d791d3..88ac14ccec79b3747f23fce4c82ca684dc997b69 100644
--- a/src/MNH/modd_lesn.f90
+++ b/src/MNH/modd_lesn.f90
@@ -40,7 +40,8 @@
 !!       O.Thouron  June,     2008  New radiation diagnostics
 !!                    10/2016 (C.Lac) Add droplet deposition
 !  P. Wautelet 08/02/2019: add missing NULL association for pointers
-!!                    02/2019 (C. Lac) Add rain fraction as a LES diagnostic
+!  C. Lac         02/2019: add rain fraction as a LES diagnostic
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -63,8 +64,8 @@ TYPE LES_t
   INTEGER :: NSPECTRA_NI        ! number of wave lengths in I direction
   INTEGER :: NSPECTRA_NJ        ! number of wave lengths in J direction
 !
-  REAL, DIMENSION(:,:), POINTER :: XLES_DATIME=>NULL() !  date array for diachro
-  REAL, DIMENSION(:,:), POINTER :: XLES_TRAJT=>NULL()  !  sampling times array for diachro
+  type(date_time), dimension(:), pointer :: xles_dates => null() !Dates array
+  real,            dimension(:), pointer :: xles_times => null() !Times from the start of the segment
 !
   REAL, DIMENSION(:),   POINTER :: XLES_Z=>NULL()      ! altitudes
   REAL                              :: XLES_ZS     ! mean orography
@@ -670,8 +671,8 @@ INTEGER, POINTER :: NLES_DTCOUNT=>NULL()
 INTEGER, POINTER :: NLES_TCOUNT=>NULL()
 INTEGER, POINTER :: NSPECTRA_NI=>NULL()
 INTEGER, POINTER :: NSPECTRA_NJ=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XLES_DATIME=>NULL()
-REAL, DIMENSION(:,:), POINTER :: XLES_TRAJT=>NULL()
+type(date_time), dimension(:), pointer :: xles_dates => null()
+real,            dimension(:), pointer :: xles_times => null()
 REAL, DIMENSION(:),   POINTER :: XLES_Z=>NULL()
 REAL, POINTER :: XLES_ZS=>NULL()
 REAL,    DIMENSION(:,:,:), POINTER :: XCOEFLIN_LES=>NULL()
@@ -1099,8 +1100,8 @@ SUBROUTINE LES_GOTO_MODEL(KFROM, KTO)
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
 ! Save current state for allocated arrays
-LES_MODEL(KFROM)%XLES_DATIME=>XLES_DATIME
-LES_MODEL(KFROM)%XLES_TRAJT=>XLES_TRAJT
+les_model(kfrom)%xles_dates=>xles_dates
+les_model(kfrom)%xles_times=>xles_times
 LES_MODEL(KFROM)%XLES_Z=>XLES_Z
 LES_MODEL(KFROM)%XCOEFLIN_LES=>XCOEFLIN_LES
 LES_MODEL(KFROM)%NKLIN_LES=>NKLIN_LES
@@ -1527,8 +1528,8 @@ NLES_DTCOUNT=>LES_MODEL(KTO)%NLES_DTCOUNT
 NLES_TCOUNT=>LES_MODEL(KTO)%NLES_TCOUNT
 NSPECTRA_NI=>LES_MODEL(KTO)%NSPECTRA_NI
 NSPECTRA_NJ=>LES_MODEL(KTO)%NSPECTRA_NJ
-XLES_DATIME=>LES_MODEL(KTO)%XLES_DATIME
-XLES_TRAJT=>LES_MODEL(KTO)%XLES_TRAJT
+xles_dates=>les_model(kto)%xles_dates
+xles_times=>les_model(kto)%xles_times
 XLES_Z=>LES_MODEL(KTO)%XLES_Z
 XLES_ZS=>LES_MODEL(KTO)%XLES_ZS
 XCOEFLIN_LES=>LES_MODEL(KTO)%XCOEFLIN_LES
diff --git a/src/MNH/modd_seriesn.f90 b/src/MNH/modd_seriesn.f90
index 0078ed222a0d9db9bf9f232a32187e60021fdcec..03ab9f206df8701771193cbe8960cec8394ee320 100644
--- a/src/MNH/modd_seriesn.f90
+++ b/src/MNH/modd_seriesn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! NEC0 masdev4_7 2007/06/16 01:41:59
-!-----------------------------------------------------------------
 !     ####################
       MODULE MODD_SERIES_n
 !     ####################
@@ -37,12 +32,15 @@
 !!      Original      29/01/98
 !!                Oct. 10,1998 (Lafore) adaptation of Diagnostics 
 !!                                      to the sequential nesting version
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
+use modd_type_date,  only: date_time
+
 IMPLICIT NONE
 
 TYPE SERIES_t
@@ -68,8 +66,7 @@ TYPE SERIES_t
   REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES1=>NULL() ! 1st group: temporal serie (t)
   REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES2=>NULL() ! 2nd group:temporal serie (z,t)
   REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES3=>NULL() ! 3rd group:temporal serie (x,t)
-  REAL, DIMENSION(:,:)        , POINTER  :: XSTRAJT=>NULL() ! time trajectory
-  REAL, DIMENSION(:,:),          POINTER :: XSDATIME=>NULL() ! Dates of exp, seg and current
+  type(date_time), dimension(:), pointer :: tpsdates => NULL() ! dates
   CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT1=>NULL() ! strings
 !     associated with the 1st group
   CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT2=>NULL() ! with the 2nd
@@ -128,8 +125,7 @@ INTEGER, POINTER :: NSTEMP_SERIE3=>NULL()
 REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES1=>NULL()
 REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES2=>NULL()
 REAL, DIMENSION(:,:,:,:,:,:), POINTER  :: XSSERIES3=>NULL()
-REAL, DIMENSION(:,:),         POINTER  :: XSTRAJT=>NULL()
-REAL, DIMENSION(:,:),         POINTER  :: XSDATIME=>NULL()
+type(date_time), dimension(:), pointer :: tpsdates => NULL()
 CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT1=>NULL()
 CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT2=>NULL()
 CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT3=>NULL()
@@ -175,8 +171,7 @@ ENDIF
 SERIES_MODEL(KFROM)%XSSERIES1=>XSSERIES1
 SERIES_MODEL(KFROM)%XSSERIES2=>XSSERIES2
 SERIES_MODEL(KFROM)%XSSERIES3=>XSSERIES3
-SERIES_MODEL(KFROM)%XSTRAJT=>XSTRAJT
-SERIES_MODEL(KFROM)%XSDATIME=>XSDATIME
+series_model(kfrom)%tpsdates=>tpsdates
 SERIES_MODEL(KFROM)%CSCOMMENT1=>CSCOMMENT1
 SERIES_MODEL(KFROM)%CSCOMMENT2=>CSCOMMENT2
 SERIES_MODEL(KFROM)%CSCOMMENT3=>CSCOMMENT3
@@ -215,8 +210,7 @@ NSTEMP_SERIE3=>SERIES_MODEL(KTO)%NSTEMP_SERIE3
 XSSERIES1=>SERIES_MODEL(KTO)%XSSERIES1
 XSSERIES2=>SERIES_MODEL(KTO)%XSSERIES2
 XSSERIES3=>SERIES_MODEL(KTO)%XSSERIES3
-XSTRAJT=>SERIES_MODEL(KTO)%XSTRAJT
-XSDATIME=>SERIES_MODEL(KTO)%XSDATIME
+tpsdates=>series_model(kto)%tpsdates
 CSCOMMENT1=>SERIES_MODEL(KTO)%CSCOMMENT1
 CSCOMMENT2=>SERIES_MODEL(KTO)%CSCOMMENT2
 CSCOMMENT3=>SERIES_MODEL(KTO)%CSCOMMENT3
diff --git a/src/MNH/modd_type_profiler.f90 b/src/MNH/modd_type_profiler.f90
index 944e44307e28dfd270eca6ca185cee5c28c5676b..ed00d4799ed5d79f395ebd3a92331bece8b1269e 100644
--- a/src/MNH/modd_type_profiler.f90
+++ b/src/MNH/modd_type_profiler.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_type_profiler.f90,v $ $Revision: 1.2.4.1.2.1.10.2.2.1 $
-! MASDEV4_7 modd 2006/06/27 12:27:06
-!-----------------------------------------------------------------
 !     ############################
       MODULE MODD_TYPE_PROFILER
 !     ############################
@@ -22,9 +17,7 @@
 !!
 !!**  IMPLICIT ARGUMENTS
 !!    ------------------
-!!      NONE 
 !!
-IMPLICIT NONE
 !!
 !!    REFERENCE
 !!    --------- 
@@ -37,13 +30,16 @@ IMPLICIT NONE
 !!    -------------
 !!      Original    15/01/02
 !!     C.Lac 10/2016  Add visibility diagnostic
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
-!
-!
+use modd_type_date, only: date_time
+
+implicit none
+
 TYPE PROFILER
 !
 !
@@ -61,8 +57,8 @@ REAL                          :: STEP   ! storage time step
 CHARACTER(LEN=8),DIMENSION(:), POINTER   :: NAME=>NULL()   ! station name
 CHARACTER(LEN=8),DIMENSION(:), POINTER   :: TYPE=>NULL()   ! station type
 !
-REAL, DIMENSION(:),       POINTER :: TIME=>NULL()     ! t(n)  (n: recording instants)
-LOGICAL, DIMENSION(:),    POINTER :: ERROR=>NULL()  
+type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants)
+LOGICAL, DIMENSION(:),    POINTER :: ERROR=>NULL()
 REAL, DIMENSION(:),       POINTER :: X=>NULL()        ! X(n)
 REAL, DIMENSION(:),       POINTER :: Y=>NULL()        ! Y(n)
 REAL, DIMENSION(:),       POINTER :: LON=>NULL()      ! longitude(n)
@@ -70,7 +66,7 @@ REAL, DIMENSION(:),       POINTER :: LAT=>NULL()      ! latitude (n)
 REAL, DIMENSION(:),       POINTER :: ALT=>NULL()      ! altitude (n)
 REAL, DIMENSION(:,:,:),   POINTER :: ZON=>NULL()      ! zonal wind(n)
 REAL, DIMENSION(:,:,:),   POINTER :: MER=>NULL()      ! meridian wind(n)
-REAL, DIMENSION(:,:,:),   POINTER :: FF=>NULL()       ! wind intensity  
+REAL, DIMENSION(:,:,:),   POINTER :: FF=>NULL()       ! wind intensity
 REAL, DIMENSION(:,:,:),   POINTER :: DD=>NULL()       ! wind direction
 REAL, DIMENSION(:,:,:),   POINTER :: W=>NULL()        ! w(n)  (air vertical speed)
 REAL, DIMENSION(:,:,:),   POINTER :: P=>NULL()        ! p(n)
@@ -85,7 +81,6 @@ REAL, DIMENSION(:,:,:),   POINTER :: RHOD=>NULL()     ! density of dry air/moist
 REAL, DIMENSION(:,:,:,:), POINTER :: R=>NULL()        ! r*(n)
 REAL, DIMENSION(:,:,:,:), POINTER :: SV=>NULL()       ! Sv*(n)
 REAL, DIMENSION(:,:,:,:), POINTER :: AER=>NULL()      ! AER*(n) aerosol extinction
-REAL, DIMENSION(:,:),     POINTER :: DATIME=>NULL()   ! record for diachro
 !
 REAL, DIMENSION(:,:),     POINTER :: T2M=>NULL()      ! 2 m air temperature (°C)
 REAL, DIMENSION(:,:),     POINTER :: Q2M=>NULL()      ! 2 m humidity (kg/kg)
diff --git a/src/MNH/modd_type_station.f90 b/src/MNH/modd_type_station.f90
index 462358f2dd38cf66d8f8f52337baa5d89ba95a49..3456ac2d272e30cd9ce2e85fbd58f6d4dd4019a3 100644
--- a/src/MNH/modd_type_station.f90
+++ b/src/MNH/modd_type_station.f90
@@ -1,8 +1,9 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
-!     ######spl
+!-----------------------------------------------------------------
+!     ############################
       MODULE MODD_TYPE_STATION
 !     ############################
 !
@@ -28,12 +29,17 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    15/01/02
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 !
+use modd_type_date, only: date_time
+
+implicit none
+
 TYPE STATION
 !
 !
@@ -50,8 +56,8 @@ REAL                          :: STEP   ! storage time step
 !
 CHARACTER(LEN=8),DIMENSION(:), POINTER   :: NAME=>NULL()   ! station name
 CHARACTER(LEN=8),DIMENSION(:), POINTER   :: TYPE=>NULL()   ! station type
-REAL, DIMENSION(:),   POINTER :: TIME=>NULL()     ! t(n)  (n: recording instants)
-LOGICAL, DIMENSION(:),  POINTER :: ERROR=>NULL()  ! 
+type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants)
+LOGICAL, DIMENSION(:),  POINTER :: ERROR=>NULL()  !
 REAL, DIMENSION(:),     POINTER :: X=>NULL()      ! X(n)
 REAL, DIMENSION(:),     POINTER :: Y=>NULL()      ! Y(n)
 REAL, DIMENSION(:),     POINTER :: Z=>NULL()      ! Z(n)
@@ -67,7 +73,6 @@ REAL, DIMENSION(:,:,:), POINTER :: R=>NULL()      ! r*(n)
 REAL, DIMENSION(:,:,:), POINTER :: SV=>NULL()     ! Sv*(n)
 REAL, DIMENSION(:),     POINTER :: ZS=>NULL()     ! zs(n)
 REAL, DIMENSION(:,:),   POINTER :: TSRAD=>NULL()  ! Ts(n)
-REAL, DIMENSION(:,:),   POINTER :: DATIME=>NULL() ! record for diachro
 !
 REAL, DIMENSION(:,:),   POINTER :: T2M=>NULL()    ! 
 REAL, DIMENSION(:,:),   POINTER :: Q2M=>NULL()    ! 
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index 225d990414a1c5cd27362ee4e0a3051075f050d8..4c91d1ebaf870b6a8299a25f63adffdaf327997f 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -4,212 +4,104 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications
-! G. TANGUY 19/05/2014 : correctoin DATIME in case of time average
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  G. Tanguy   19/05/2014: correct DATIME in case of time average
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 20/09/2019: rewrite normalization of LES budgets
 !-----------------------------------------------------------------
 !#######################
 MODULE MODE_LES_DIACHRO
 !#######################
-!
+
 USE MODD_LUNIT
-!
+use modd_les_n, only: xles_dates, xles_times
+
+use mode_msg
+
+implicit none
+
+private
+
+public :: LES_DIACHRO, LES_DIACHRO_2PT, LES_DIACHRO_MASKS, LES_DIACHRO_SPEC, &
+          LES_DIACHRO_SURF, LES_DIACHRO_SURF_SV, LES_DIACHRO_SV, LES_DIACHRO_SV_MASKS
+
 CONTAINS
 !
 !---------------------------------------------------------------------
 !
 !########################################################
-SUBROUTINE MAKE_NORM(HUNIT, KC, ODIV, PA_NORM, PLES_NORM)
+subroutine Make_norm( pa_norm, ples_norm, kpower )
 !########################################################
-!
-USE MODD_PARAMETERS
-USE MODD_LES
-IMPLICIT NONE
-!
-CHARACTER(LEN=50),       INTENT(IN)    :: HUNIT     ! physical unit of field
-INTEGER,                 INTENT(IN)    :: KC        ! character counter
-LOGICAL,                 INTENT(INOUT) :: ODIV      ! flag to make a division
-REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PA_NORM   ! normalized field
-REAL, DIMENSION(:),      INTENT(IN)    :: PLES_NORM ! normalization coefficient
 
-INTEGER :: JK ! z counter
-INTEGER :: JT ! time counter
-INTEGER :: JP ! process counter
-INTEGER :: JN ! variable number counter (larger than 1 only for scalar var.)
-CHARACTER(LEN=50) :: YUNIT
-!
-!------------------------------------------------------------------------
-!
-YUNIT=HUNIT
-!
-IF ( ANY(PLES_NORM(:)==0.) ) THEN
-  PA_NORM(:,:,:,:)=XUNDEF
-  ODIV=.FALSE.
-  RETURN
-END IF
+use modd_les,        only: nles_current_times, nles_k
+use modd_parameters, only: XUNDEF
 
-DO JN=1,SIZE(PA_NORM,4)
-  IF (YUNIT(KC+1:KC+1)=='3') THEN
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT)**3
-          END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT)**3
-          END DO
-        END DO
-      END DO
-    END IF
-  ELSE IF  (YUNIT(KC+1:KC+1)=='2') THEN
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT)**2
-          END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT)**2
-          END DO
-        END DO
-      END DO
-    END IF
-  ELSE
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT)
-          END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT)
-          END DO
-        END DO
-      END DO
-    END IF
-  END IF
-END DO
-!
-ODIV=.FALSE.
-!
-END SUBROUTINE MAKE_NORM
-!
-!###########################################################
-SUBROUTINE MAKE_NORM_SV(HUNIT, KC, ODIV, PA_NORM, PLES_NORM)
-!###########################################################
-!
-USE MODD_PARAMETERS
-USE MODD_LES
-IMPLICIT NONE
-!
-CHARACTER(LEN=50),       INTENT(IN)    :: HUNIT     ! physical unit of field
-INTEGER,                 INTENT(IN)    :: KC        ! character counter
-LOGICAL,                 INTENT(INOUT) :: ODIV      ! flag to make a division
-REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PA_NORM   ! normalized field
-REAL, DIMENSION(:,:),    INTENT(IN)    :: PLES_NORM ! normalization coefficient
+real, dimension(:,:,:,:), intent(inout) :: pa_norm   ! normalized field
+real, dimension(:),       intent(in)    :: ples_norm ! normalization coefficient
+integer,                  intent(in)    :: kpower    ! normalization power
 
-INTEGER :: JK ! z counter
-INTEGER :: JT ! time counter
-INTEGER :: JP ! process counter
-INTEGER :: JSV! scalar variables counter
-CHARACTER(LEN=50) :: YUNIT
-!
-!-------------------------------------------------------------------
-!
-YUNIT=HUNIT
-!
-DO JSV=1,SIZE(PLES_NORM,2)
-  IF (ANY(PLES_NORM(:,JSV)==0.)) THEN
-    PA_NORM(:,:,:,JSV)=XUNDEF
-    CYCLE
-  END IF
-  IF (YUNIT(KC+1:KC+1)=='3') THEN
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV)**3
-          END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV)**3
-          END DO
-        END DO
-      END DO
-    END IF
-  ELSE IF  (YUNIT(KC+1:KC+1)=='2') THEN
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV)**2
-            END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV)**2
-            END DO
-        END DO
-      END DO
-    END IF
-  ELSE
-    IF (ODIV) THEN
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV)
-            END DO
-        END DO
-      END DO
-    ELSE
-      DO JP=1,SIZE(PA_NORM,3)
-        DO JT=1,NLES_CURRENT_TIMES
-          DO JK=1,NLES_K
-            IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) &
-            PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV)
-          END DO
-        END DO
-      END DO
-    END IF
-  END IF
-END DO
-!
-ODIV=.FALSE.
-!
-END SUBROUTINE MAKE_NORM_SV
+integer :: jk ! z counter
+integer :: jt ! time counter
+integer :: jp ! process counter
+integer :: jn ! variable number counter (larger than 1 only for scalar var.)
+
+if ( kpower == 0 ) return
+
+!normalization is not possible if some values are zero
+if ( any( ples_norm(: ) == 0. ) ) then
+  pa_norm(:, :, :, : ) = XUNDEF
+  return
+end if
+
+do jn = 1, size( pa_norm, 4 )
+  do jp = 1, size( pa_norm, 3 )
+    do jt = 1, nles_current_times
+      do jk = 1, nles_k
+        if ( pa_norm(jk, jt, jp, jn ) /= XUNDEF ) &
+          pa_norm(jk, jt, jp, jn ) = pa_norm(jk, jt, jp, jn ) * ples_norm(jt )**( -kpower )
+      end do
+    end do
+  end do
+end do
+
+end subroutine Make_norm
+
+!########################################################
+subroutine Make_norm_sv( pa_norm, ples_norm, kpower )
+!########################################################
+
+use modd_les,        only: nles_current_times, nles_k
+use modd_parameters, only: XUNDEF
+
+real, dimension(:,:,:,:), intent(inout) :: pa_norm   ! normalized field
+real, dimension(:,:),     intent(in)    :: ples_norm ! normalization coefficient
+integer,                  intent(in)    :: kpower    ! normalization power
+
+integer :: jk ! z counter
+integer :: jt ! time counter
+integer :: jp ! process counter
+integer :: jsv! scalar variables counter
+
+if ( kpower == 0 ) return
+
+!normalization is not possible if some values are zero
+do jsv = 1, size( ples_norm, 2 )
+  if ( any( ples_norm(:, jsv ) == 0. ) ) then
+    pa_norm(:, :, :, jsv) = xundef
+    cycle
+  end if
+
+  do jp = 1, size( pa_norm, 3 )
+    do jt = 1, nles_current_times
+      do jk = 1, nles_k
+        if ( pa_norm(jk, jt, jp, jsv) /= xundef ) &
+            pa_norm(jk, jt,jp, jsv ) = pa_norm(jk, jt, jp, jsv ) * ples_norm(jt, jsv )**( -kpower )
+      end do
+    end do
+  end do
+end do
+
+end subroutine Make_norm_sv
 !
 !     ###################################################
       SUBROUTINE LES_NORM_4D(HUNIT, PA_LES, PA_NORM, OSV)
@@ -258,69 +150,125 @@ LOGICAL, OPTIONAL,           INTENT(IN)  :: OSV     ! flag for scalar variables
 !
 !       0.2  declaration of local variables
 !
-INTEGER :: JC    ! character counter
-LOGICAL :: GDIV  ! flag to make a division
-INTEGER :: IKG   ! number of 'kg' in the field unit
-!
-CHARACTER(LEN=50) :: YUNIT
-!
+integer, parameter :: NMAXUNITS = 10
+
+integer, parameter :: NNORM_K  = 1
+integer, parameter :: NNORM_KG = 2
+integer, parameter :: NNORM_M  = 3
+integer, parameter :: NNORM_PA = 4
+integer, parameter :: NNORM_S  = 5
+integer, parameter :: NNORM_RV = 6
+integer, parameter :: NNORM_SV = 7
+integer, parameter :: NNORMS   = 7
+
+integer :: idx, ispace
+integer :: ikg   ! number of 'kg' in the field unit
+integer :: inunits
+integer :: ipower
+integer :: ipower_kg_1st
+integer :: ji
+integer, dimension ( NNORMS ) :: ipowers
+character( len = 8 ) :: yun, yname, ypower
+character( len = 8 ), dimension( NMAXUNITS ) :: yunits
+logical :: gsv
 !------------------------------------------------------------------------------
-YUNIT=HUNIT//'                                              '
-!
-PA_NORM = PA_LES
-!
-IKG=0
-!
-DO JC=1,50
-  IF (YUNIT(JC:JC)=='g') THEN
-    IKG=IKG+1
-  ELSE IF (YUNIT(JC:JC)==' ') THEN
-    EXIT
-  END IF
-END DO
-!
-GDIV=.FALSE.
-!
-DO JC=1,49
-  !
-  SELECT CASE (YUNIT(JC:JC))
-    CASE('m')
-      CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_M)
-    CASE('g')
-      IF (IKG==1) THEN
-        CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RHO)
-      ELSE
-        IF (PRESENT(OSV)) THEN
-          IF (OSV) THEN
-            IF (.NOT. GDIV) &
-            CALL MAKE_NORM_SV(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_SV)
-            GDIV=.FALSE.
-          ELSE
-            IF (.NOT. GDIV) &
-            CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RV)
-            GDIV=.FALSE.
-          END IF
-        ELSE 
-          IF (.NOT. GDIV) &
-          CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RV)
-          GDIV=.FALSE.
-        END IF
-      END IF
-    CASE('K')
-      CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_K)
-    CASE('s')
-      CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_S)
-    CASE('a')
-      CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_P)
-    CASE('/')
-      GDIV=.TRUE.
-    CASE(' ')
-      EXIT
-  END SELECT
-END DO
-!
-WHERE(PA_NORM==XUNDEF) PA_NORM = PA_LES
-!
+
+gsv = .false.
+if ( present( osv ) ) gsv = osv
+
+pa_norm(:, :, :, : ) = pa_les(:, :, :, : )
+
+!Parse units
+!Each unit is separated by blanks
+!First part: unit, second part: power (and sign of it)
+ipowers(: ) = 0
+inunits = 0
+ikg = 0
+idx = 1
+
+!Separate units
+do
+  ispace = scan( hunit(idx: ), ' ' )
+  if ( ispace == 0 ) then
+    inunits = inunits + 1
+    if (inunits > NMAXUNITS ) call Print_msg( NVERB_FATAL, 'GEN', 'LES_NORM_4D', 'inunits > NMAXUNITS' )
+    yunits(inunits ) = hunit(idx:)
+    exit
+  else if ( ispace == len(hunit(idx: )) ) then
+    exit
+  else
+    inunits = inunits + 1
+    if (inunits > NMAXUNITS ) call Print_msg( NVERB_FATAL, 'GEN', 'LES_NORM_4D', 'inunits > NMAXUNITS' )
+    yunits(inunits ) =  hunit( idx : idx+ispace-1 )
+    idx = idx + ispace
+  end if
+end do
+
+!Treat units and their power
+!kg are special: they can appear twice with opposite power signs (kg kg-1)
+!In that case, they are normalized with xles_norm_rv or xles_norm_sv
+do ji = 1, inunits
+  yun = yunits(ji )
+
+  !Non dimensional unit
+  if ( trim( yun ) == '-' .or. trim( yun ) == '1' .or. trim( yun ) == 'percent') then
+    cycle
+  end if
+
+  !Separate unit and its power
+  idx = scan( yun, '-1234567890' )
+  if ( idx == 0 ) then
+    yname = trim( yun )
+    ypower = ''
+    ipower = 1
+  else
+    yname  = yun( 1 : idx - 1 )
+    ypower = yun( idx : )
+    read (ypower,'(I8)') ipower
+  end if
+
+  select case( trim( yname ) )
+    case ( 'K' )
+      ipowers(NNORM_K  ) = ipowers(NNORM_K  ) + ipower
+    case ( 'kg' )
+      ikg = ikg + 1
+      if ( ikg == 1 ) ipower_kg_1st = ipower
+      ipowers(NNORM_KG ) = ipowers(NNORM_KG ) + ipower
+    case ( 'm' )
+      ipowers(NNORM_M  ) = ipowers(NNORM_M  ) + ipower
+    case ( 'Pa' )
+      ipowers(NNORM_PA ) = ipowers(NNORM_PA ) + ipower
+    case ( 's' )
+      ipowers(NNORM_S  ) = ipowers(NNORM_S  ) + ipower
+    case default
+      call Print_msg( NVERB_WARNING, 'IO', 'LES_NORM_4D', 'unknown unit: '//trim(yname)//'. Conversion could be wrong.' )
+  end select
+end do
+
+if ( ikg > 1 .and. ipowers(NNORM_KG ) /= 0 ) &
+  call Print_msg( NVERB_ERROR, 'IO', 'LES_NORM_4D', 'if kg appears more than one time, it should be admimensional' )
+
+if ( ikg > 2 ) &
+  call Print_msg( NVERB_ERROR, 'IO', 'LES_NORM_4D', 'kg should not appear more than 2 times' )
+
+if ( ikg == 2 ) then
+  if ( gsv ) then
+    ipowers(NNORM_SV ) = ipower_kg_1st
+  else
+    ipowers(NNORM_RV ) = ipower_kg_1st
+  end if
+end if
+
+if (ipowers(NNORM_K  ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_k,   ipowers(NNORM_K  ) )
+if (ipowers(NNORM_KG ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_rho, ipowers(NNORM_KG ) )
+if (ipowers(NNORM_M  ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_m,   ipowers(NNORM_M  ) )
+if (ipowers(NNORM_PA ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_p,   ipowers(NNORM_PA ) )
+if (ipowers(NNORM_S  ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_s,   ipowers(NNORM_S  ) )
+if (ipowers(NNORM_RV ) /= 0 ) call Make_norm   ( pa_norm, xles_norm_rv,  ipowers(NNORM_RV ) )
+if (ipowers(NNORM_SV ) /= 0 ) call Make_norm_sv( pa_norm, xles_norm_sv,  ipowers(NNORM_SV ) )
+
+where( pa_norm == XUNDEF ) pa_norm = pa_les
+
 END SUBROUTINE LES_NORM_4D
 !
 !------------------------------------------------------------------------------
@@ -477,8 +425,9 @@ SUBROUTINE LES_Z_NORM(OAVG,PTRAJZ,PWORK6)
 !* this subroutine interpolates the normalized field PWORK6 to the
 !  vertical normalized coordinate.
 !
-USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT
 USE MODD_LES
+USE MODD_PARAMETERS, ONLY: XUNDEF, JPVEXT
+use modd_time,       only: tdtseg
 !
 USE MODI_COEF_VER_INTERP_LIN
 USE MODI_VER_INTERP_LIN
@@ -515,8 +464,10 @@ REAL    :: ZMAX_NORM_M
 !* normalization height (usually maximum BL height)
 !
 IF (OAVG) THEN
-  ITEMP_MEAN_START = COUNT( XLES_CURRENT_TRAJT(:,1)<=XLES_TEMP_MEAN_START ) + 1
-  ITEMP_MEAN_END   = COUNT( XLES_CURRENT_TRAJT(:,1)<=XLES_TEMP_MEAN_END   )
+
+  ITEMP_MEAN_START = COUNT( xles_times(:)<=XLES_TEMP_MEAN_START ) + 1
+  ITEMP_MEAN_END   = COUNT( xles_times(:)<=XLES_TEMP_MEAN_END   )
+
   IF (ITEMP_MEAN_START > ITEMP_MEAN_END) THEN
     ITEMP_MEAN_START = 1
     ITEMP_MEAN_END   = NLES_CURRENT_TIMES
@@ -596,7 +547,7 @@ END SUBROUTINE LES_Z_NORM
 !------------------------------------------------------------------------------
 !
 !########################################################
-SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG)
+SUBROUTINE LES_TIME_AVG(PWORK6,tpdates,KRESP)
 !########################################################
 !
 ! this routine computes time averaging
@@ -604,16 +555,16 @@ SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG)
 ! Modifications:
 !  03/2018     (P.Wautelet)   replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
 !
+use modd_time,      only: tdtseg
 USE MODD_LES
-USE MODD_TYPE_DATE
+USE MODD_TYPE_DATE, only: date_time
 !
-USE MODE_DATETIME
+use mode_datetime,  only: Datetime_correctdate
 !
 IMPLICIT NONE
 !
-REAL, DIMENSION(:,:),         POINTER     :: PTRAJT ! time
-REAL, DIMENSION(:,:),         POINTER     :: PDATIME_AVG ! date
 REAL, DIMENSION(:,:,:,:,:,:), POINTER     :: PWORK6 ! contains physical field
+type(date_time), dimension(:), allocatable, intent(inout) :: tpdates
 INTEGER,                      INTENT(OUT) :: KRESP  ! return code (0 is OK)
 !------------------------------------------------------------------------------
 INTEGER                                :: JT       ! time counter
@@ -628,8 +579,6 @@ INTEGER :: JP                            ! process loop counter
 INTEGER :: JSV                           ! scalar loop counter
 INTEGER :: JX                            ! first  spatial or spectral coordinate loop counter
 INTEGER :: JY                            ! second spatial or spectral coordinate loop counter
-REAL, DIMENSION(16)  :: ZDATIME_SAVE ! date
-TYPE(DATE_TIME) :: TZDATE
 !------------------------------------------------------------------------------
 !
 IF (     XLES_TEMP_MEAN_END==XUNDEF   &
@@ -645,29 +594,13 @@ IF (IAVG<=0) THEN
   RETURN
 END IF
 !
-ZDATIME_SAVE(:)=PDATIME_AVG(:,1)
-DEALLOCATE(PTRAJT)
-DEALLOCATE(PDATIME_AVG)
+deallocate( tpdates )
 !
-ALLOCATE (PTRAJT(IAVG,1))
-ALLOCATE (PDATIME_AVG(16,IAVG))
+allocate( tpdates( iavg ) )
 ALLOCATE (ZWORK6(SIZE(PWORK6,1),SIZE(PWORK6,2),NLES_K,IAVG,SIZE(PWORK6,5),SIZE(PWORK6,6)))
 !
 ZWORK6(:,:,:,:,:,:) = 0.
 !
-PDATIME_AVG(1,:)=ZDATIME_SAVE(1)
-PDATIME_AVG(2,:)=ZDATIME_SAVE(2)
-PDATIME_AVG(3,:)=ZDATIME_SAVE(3)
-PDATIME_AVG(4,:)=ZDATIME_SAVE(4)
-PDATIME_AVG(5,:)=ZDATIME_SAVE(5)
-PDATIME_AVG(6,:)=ZDATIME_SAVE(6)
-PDATIME_AVG(7,:)=ZDATIME_SAVE(7)
-PDATIME_AVG(8,:)=ZDATIME_SAVE(8)
-PDATIME_AVG(9,:)=ZDATIME_SAVE(9)
-PDATIME_AVG(10,:)=ZDATIME_SAVE(10)
-PDATIME_AVG(11,:)=ZDATIME_SAVE(11)
-PDATIME_AVG(12,:)=ZDATIME_SAVE(12)
-!
 DO JAVG=1,IAVG
   ZLES_TEMP_MEAN_START=XLES_TEMP_MEAN_START + (JAVG-1) * XLES_TEMP_MEAN_STEP
   ZLES_TEMP_MEAN_END  =MIN(XLES_TEMP_MEAN_END, ZLES_TEMP_MEAN_START + XLES_TEMP_MEAN_STEP)
@@ -679,8 +612,8 @@ DO JAVG=1,IAVG
           DO JX=1,SIZE(PWORK6,1)
             ITIME=0
             DO JT=1,NLES_CURRENT_TIMES
-              IF ( XLES_CURRENT_TRAJT(JT,1) >= ZLES_TEMP_MEAN_START .AND. &
-                 XLES_CURRENT_TRAJT(JT,1) <= ZLES_TEMP_MEAN_END) THEN
+              IF ( xles_times(JT) >= ZLES_TEMP_MEAN_START .AND. &
+                   xles_times(JT) <= ZLES_TEMP_MEAN_END         ) THEN
                 IF (PWORK6(JX,JY,JK,JT,JSV,JP) /= XUNDEF) THEN
                  ZWORK6(JX,JY,JK,JAVG,JSV,JP) =  ZWORK6(JX,JY,JK,JAVG,JSV,JP) &
                                               + PWORK6(JX,JY,JK,JT,JSV,JP)
@@ -693,23 +626,19 @@ DO JAVG=1,IAVG
                             ZWORK6(JX,JY,JK,JAVG,JSV,JP) / ITIME
             END IF
             IF (ITIME == 0) THEN
-                   ZWORK6(JX,JY,JK,JAVG,JSV,JP)= XUNDEF 
+                   ZWORK6(JX,JY,JK,JAVG,JSV,JP)= XUNDEF
             END IF
           END DO
         END DO
       END DO
     END DO
   END DO
-  PTRAJT(JAVG,1)=(ZLES_TEMP_MEAN_START+ZLES_TEMP_MEAN_END)/2.
-  TZDATE%TDATE%YEAR  = PDATIME_AVG(5,JAVG)
-  TZDATE%TDATE%MONTH = PDATIME_AVG(6,JAVG)
-  TZDATE%TDATE%DAY   = PDATIME_AVG(7,JAVG)
-  TZDATE%TIME        = PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1)
-  CALL DATETIME_CORRECTDATE(TZDATE)
-  PDATIME_AVG(13,JAVG) = TZDATE%TDATE%YEAR
-  PDATIME_AVG(14,JAVG) = TZDATE%TDATE%MONTH
-  PDATIME_AVG(15,JAVG) = TZDATE%TDATE%DAY
-  PDATIME_AVG(16,JAVG) = TZDATE%TIME
+
+  tpdates(javg )%tdate%year  = tdtseg%tdate%year
+  tpdates(javg )%tdate%month = tdtseg%tdate%month
+  tpdates(javg )%tdate%day   = tdtseg%tdate%day
+  tpdates(javg )%time        = tdtseg%time + ( zles_temp_mean_start + zles_temp_mean_end ) / 2.
+  call Datetime_correctdate( tpdates(javg ) )
 END DO
 !
 DEALLOCATE(PWORK6)
@@ -726,9 +655,11 @@ END SUBROUTINE LES_TIME_AVG
 SUBROUTINE LES_DIACHRO(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
 USE MODD_GRID
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
 USE MODE_WRITE_DIACHRO, only: WRITE_DIACHRO
 !
 IMPLICIT NONE
@@ -748,8 +679,6 @@ CHARACTER(LEN=1),     INTENT(IN)       :: HAVG     ! flag to compute avg.
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME ! date
 !
 INTEGER, DIMENSION(1)                  :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                     :: YGROUP   ! group title
@@ -769,6 +698,7 @@ INTEGER :: JK                            ! vertical loop counter
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -788,8 +718,7 @@ ALLOCATE (ZTRAJY(1,1,1))
 ALLOCATE (ZTRAJZ(NLES_K,1,1))
 !
 ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -809,8 +738,7 @@ YUNIT (1) = HUNIT
 YGROUP    = HGROUP
 !
 ZWORK6(1,1,:,:,1,1) = ZFIELD (:,:)
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 !* normalization of vertical dimension
 !
@@ -822,7 +750,7 @@ END IF
 !* time average
 !
 IRESP = 0
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
 YTITLE(1) = YGROUP
@@ -831,10 +759,11 @@ YTITLE(1) = YGROUP
 !            ----------------------
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -843,9 +772,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE (ZWORK6)
-DEALLOCATE (ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO
@@ -854,10 +782,12 @@ END SUBROUTINE LES_DIACHRO
 SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !###########################################################
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
 USE MODD_GRID
-USE MODI_WRITE_DIACHRO
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -876,8 +806,6 @@ CHARACTER(LEN=1),       INTENT(IN)       :: HAVG     ! flag to compute avg.
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME ! date
 !
 INTEGER, DIMENSION(1)                  :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                     :: YGROUP   ! group title
@@ -897,6 +825,7 @@ INTEGER :: JSV                           ! scalar loop counter
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -915,8 +844,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,3)))
 ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,3)))
 ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,3)))
 ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,3),1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -936,8 +864,7 @@ YUNIT (1) = HUNIT
 YGROUP    = HGROUP
 !
 ZWORK6(1,1,:,:,:,1) = ZFIELD (:,:,:)
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 IF (GNORM) THEN
   IF (HUNIT(1:1)/=' ') YUNIT='-'
@@ -947,7 +874,7 @@ END IF
 !* time average
 !
 IRESP = 0
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
 YTITLE(1) = YGROUP
@@ -957,10 +884,11 @@ YTITLE(1) = YGROUP
 !
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -969,9 +897,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_SV
@@ -980,10 +907,12 @@ END SUBROUTINE LES_DIACHRO_SV
 SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#####################################################################
 !
+USE MODD_GRID
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
-USE MODD_GRID
-USE MODI_WRITE_DIACHRO
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1003,8 +932,6 @@ CHARACTER(LEN=1),                   INTENT(IN) :: HAVG     ! flag to compute avg
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME ! date
 !
 INTEGER,            DIMENSION(SIZE(PFIELD,3)) :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                            :: YGROUP   ! group title
@@ -1024,6 +951,7 @@ INTEGER :: JMASK                         ! Mask loop counter
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -1042,9 +970,7 @@ ALLOCATE (ZTRAJX(1,1,1))
 ALLOCATE (ZTRAJY(1,1,1))
 ALLOCATE (ZTRAJZ(NLES_K,1,1))
 ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,SIZE(PFIELD,3)))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
-
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -1065,9 +991,7 @@ YUNIT   (:) = HUNIT
 YGROUP      = HGROUP
 !
 ZWORK6(1,1,:,:,1,:) = ZFIELD (:,:,:)
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
-
+tzdates(:) = xles_dates(:)
 !
 IF (GNORM) THEN
   IF (HUNIT(1:1)/=' ') YUNIT='-'
@@ -1078,7 +1002,7 @@ END IF
 !* time average
 !
 IRESP = 0
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
 YTITLE  (:) = YGROUP//HTITLE(:)
@@ -1088,10 +1012,11 @@ YTITLE  (:) = YGROUP//HTITLE(:)
 !            ----------------------
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -1100,9 +1025,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_MASKS
@@ -1111,10 +1035,12 @@ END SUBROUTINE LES_DIACHRO_MASKS
 SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################################
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
 USE MODD_GRID
-USE MODI_WRITE_DIACHRO
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1134,8 +1060,6 @@ CHARACTER(LEN=1),                     INTENT(IN) :: HAVG     ! flag to compute a
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME! date
 !
 INTEGER,            DIMENSION(SIZE(PFIELD,3)) :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                            :: YGROUP   ! group title
@@ -1157,6 +1081,7 @@ INTEGER :: JMASK                         ! mask loop counter
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -1175,8 +1100,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,4)))
 ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,4)))
 ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,4)))
 ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,4),SIZE(PFIELD,3)))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -1201,8 +1125,7 @@ DO JSV=1,SIZE(PFIELD,4)
     ZWORK6(1,1,:,:,JSV,JP) = ZFIELD (:,:,JP,JSV)
   END DO
 END DO
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 IF (GNORM) THEN
   IF (HUNIT(1:1)/=' ') YUNIT='-'
@@ -1213,7 +1136,7 @@ END IF
 !* time average
 !
 IRESP = 0
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
 YTITLE  (:) = YGROUP//HTITLE(:)
@@ -1223,10 +1146,11 @@ YTITLE  (:) = YGROUP//HTITLE(:)
 !
 !
 IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -1235,9 +1159,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_SV_MASKS
@@ -1247,10 +1170,12 @@ END SUBROUTINE LES_DIACHRO_SV_MASKS
 SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#############################################################
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
 USE MODD_GRID
-USE MODI_WRITE_DIACHRO
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1270,8 +1195,6 @@ CHARACTER(LEN=1),     INTENT(IN)       :: HAVG     ! flag to compute avg.
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME ! DATE
 !
 INTEGER, DIMENSION(1)                  :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                     :: YGROUP   ! group title
@@ -1287,6 +1210,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH  ! cartesian area relatively to the
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !-------------------------------------------------------------------------------
 !
 GAVG =(HAVG=='A' .OR. HAVG=='H')
@@ -1304,8 +1228,7 @@ ALLOCATE (ZTRAJX(1,1,1))
 ALLOCATE (ZTRAJY(1,1,1))
 ALLOCATE (ZTRAJZ(1,1,1))
 ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,1,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -1323,13 +1246,12 @@ YUNIT (1) = HUNIT
 YGROUP    = HGROUP
 !
 ZWORK6(1,1,1,:,1,1) = PFIELD (:)
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 !* time average
 !
 IRESP = 0
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
 YTITLE(1) = HGROUP
@@ -1338,10 +1260,11 @@ YTITLE(1) = HGROUP
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -1350,9 +1273,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_SURF
@@ -1361,10 +1283,12 @@ END SUBROUTINE LES_DIACHRO_SURF
 SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !################################################################
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
 USE MODD_GRID
-USE MODI_WRITE_DIACHRO
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1383,8 +1307,6 @@ CHARACTER(LEN=1),       INTENT(IN)       :: HAVG     ! flag to compute avg.
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark:
 REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES
-REAL,    DIMENSION(:,:),   POINTER     :: ZTRAJT ! time
-REAL,    DIMENSION(:,:),   POINTER     :: ZDATIME ! date
 INTEGER, DIMENSION(1)                  :: IGRID    ! grid indicator
 CHARACTER(LEN= 10)                     :: YGROUP   ! group title
 CHARACTER(LEN=100), DIMENSION(1)       :: YCOMMENT ! comment string
@@ -1399,6 +1321,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH  ! cartesian area relatively to the
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
 LOGICAL :: GNORM                         ! flag to compute normalizations
+type(date_time), dimension(:), allocatable :: tzdates
 !-------------------------------------------------------------------------------
 !
 GAVG =(HAVG=='A' .OR. HAVG=='H')
@@ -1415,9 +1338,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,2)))
 ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,2)))
 ALLOCATE (ZTRAJZ(1,1,SIZE(PFIELD,2)))
 ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,SIZE(PFIELD,2),1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
-
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -1436,14 +1357,11 @@ YGROUP    = HGROUP
 !
 IRESP = 0
 ZWORK6(1,1,1,:,:,1) = PFIELD (:,:)
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:)
-!
-
+tzdates(:) = xles_dates(:)
 !
 !* time average
 !
-IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 !
 !
 IF (HAVG/=' ')  YGROUP=HAVG//'_'//YGROUP
@@ -1453,10 +1371,11 @@ YTITLE(1) = HGROUP
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH,                                    &
-                   PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ                   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ                 )
 !
 !
 !*      3.0  Deallocations
@@ -1465,9 +1384,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6,     &
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_SURF_SV
@@ -1479,11 +1397,13 @@ SUBROUTINE LES_DIACHRO_2PT(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
-USE MODD_GRID
 USE MODD_CONF
-USE MODI_WRITE_DIACHRO
+USE MODD_GRID
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1511,9 +1431,6 @@ REAL, DIMENSION(SIZE(PFIELDY,1),SIZE(PFIELDY,2)) :: ZAVG_FIELDY
 INTEGER                          :: JT       ! time counter
 INTEGER                          :: JK       ! level counter
 INTEGER                          :: IRESP    ! return code
-REAL, DIMENSION(:,:),POINTER     :: ZTRAJT   ! time
-REAL, DIMENSION(:,:),POINTER     :: ZDATIME   ! date
-
 !
 REAL, DIMENSION(:,:,:,:,:,:), POINTER :: ZWORK6 ! contains physical field
 !
@@ -1523,6 +1440,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH  ! cartesian area relatively to the
 CHARACTER(len=6) :: YSTRING
 !
 LOGICAL :: GAVG                          ! flag to compute time averagings
+type(date_time), dimension(:), allocatable :: tzdates
 !-------------------------------------------------------------------------------
 !
 IF (HAVG/=' '.AND. HAVG/='A') RETURN
@@ -1535,8 +1453,7 @@ IF (GAVG .AND. (XLES_TEMP_MEAN_START==XUNDEF .OR. XLES_TEMP_MEAN_END==XUNDEF)) R
 !            ----------------------------------------------------------
 !
 ALLOCATE(ZWORK6(SIZE(PFIELDX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IGRID(:)=1
 !
@@ -1562,12 +1479,13 @@ DO JT=1,SIZE(PFIELDX,3)
       ZWORK6(:,1,JK,JT,2,1) = 0.
     END DO
 END DO
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
+
+tzdates(:) = xles_dates(:)
+
 !* time average
 !
 IF (GAVG) THEN
-  CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+  CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
   YGROUP    = 'T_'//YGROUP
 END IF
 !
@@ -1576,20 +1494,19 @@ END IF
 !            ----------------------
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 !
 !
-DEALLOCATE (ZTRAJT)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 DEALLOCATE(ZWORK6)
 !
 IF (L2D) RETURN
 !
 ALLOCATE(ZWORK6(1,SIZE(PFIELDY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
 IIL = 1
 IIH = 1
@@ -1602,8 +1519,8 @@ DO JT=1,SIZE(PFIELDY,3)
       ZWORK6(1,:,JK,JT,2,1) = 0.
     END DO
 END DO
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
+
+tzdates(:) = xles_dates(:)
 !
 YGROUP    = 'CJ_'//HGROUP
 YTITLE(:) = YGROUP
@@ -1614,18 +1531,17 @@ YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT
 !* time average
 !
 IF (GAVG) THEN
-  CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+  CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
   YGROUP    = 'T_'//YGROUP
 END IF
 !
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 !
-DEALLOCATE (ZTRAJT)
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZDATIME)
-
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_2PT
@@ -1638,11 +1554,13 @@ SUBROUTINE LES_DIACHRO_SPEC(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
-USE MODD_GRID
 USE MODD_CONF
-USE MODI_WRITE_DIACHRO
+USE MODD_GRID
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LES
+use modd_type_date,     only: date_time
+
+USE MODE_WRITE_DIACHRO
 !
 IMPLICIT NONE
 !
@@ -1667,8 +1585,6 @@ CHARACTER(LEN=100), DIMENSION(1) :: YUNIT    ! physical unit
 INTEGER                          :: IRESP    ! return code
 !
 REAL, DIMENSION(:,:,:,:,:,:), POINTER     :: ZWORK6 ! contains physical field
-REAL, DIMENSION(:,:),         POINTER     :: ZTRAJT ! time
-REAL, DIMENSION(:,:),         POINTER     :: ZDATIME ! date
 
 !
 INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH  ! cartesian area relatively to the
@@ -1677,6 +1593,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH  ! cartesian area relatively to the
 CHARACTER(len=6) :: YSTRING
 INTEGER          :: JT       ! time counter
 INTEGER          :: JK       ! level counter
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -1695,12 +1612,9 @@ IKH=NSPECTRA_K
 !* spectra in X direction
 !
 ALLOCATE(ZWORK6(SIZE(PSPECTRAX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
-
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 IIL = NLES_CURRENT_IINF
 IIH = NLES_CURRENT_ISUP
@@ -1720,24 +1634,25 @@ WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAX )
 YCOMMENT(:) = " DOMEGAX="//YSTRING//' '//HCOMMENT
 !
 !
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 !
 !
 !* time average
 !
 IRESP=0
-CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 YGROUP    = 'T_'//YGROUP
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZTRAJT)
-DEALLOCATE(ZDATIME)
+deallocate( tzdates )
 !
 !* spectra in Y direction
 !
@@ -1745,11 +1660,9 @@ DEALLOCATE(ZDATIME)
 IF (L2D) RETURN
 !
 ALLOCATE(ZWORK6(1,SIZE(PSPECTRAY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1))
-ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1))
-ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES))
+allocate( tzdates( NLES_CURRENT_TIMES ) )
 !
-ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:)
-ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:)
+tzdates(:) = xles_dates(:)
 !
 IIL = 1
 IIH = 1
@@ -1768,25 +1681,25 @@ YTITLE(:) = YGROUP
 WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAY )
 YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT
 !
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 !
 !
 !* time average
 !
-CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME)
+CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP )
 YGROUP    = 'T_'//YGROUP
 !
 IF (IRESP==0) &
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6,     &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE.,   &
-                   IIL,IIH,IJL,IJH,IKL,IKH                                     )                   
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates,               &
+                    ZWORK6, YTITLE, YUNIT, YCOMMENT,                                  &
+                    OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE.,                   &
+                    KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH  )
 !
 DEALLOCATE(ZWORK6)
-DEALLOCATE(ZTRAJT)
-DEALLOCATE(ZDATIME)
-
+deallocate( tzdates )
 !
 !-------------------------------------------------------------------------------
 END SUBROUTINE LES_DIACHRO_SPEC
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 644c8855f929dabdee5ff4fa1e74ac00229eedfa..e1073f233c28c2b4640134fab9ab554b18b422e0 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -264,6 +264,7 @@ END MODULE MODI_MODEL_n
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !  J. Escobar  09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T
 !  J. Escobar  09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -636,11 +637,11 @@ IF (KTCOUNT == 1) THEN
   !
   !                 b) LS fields
   !
-    CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSUM,   'MODEL_n::XLSUM'   )
-    CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSVM,   'MODEL_n::XLSVM'   )
-    CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSWM,   'MODEL_n::XLSWM'   )
-    CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSTHM,  'MODEL_n::XLSTHM'  )
-    CALL ADD2DFIELD_ll( TLSFIELD_ll, XLSZWSM, 'MODEL_n::XLSZWSM' )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSUM,   'MODEL_n::XLSUM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSVM,   'MODEL_n::XLSVM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSWM,   'MODEL_n::XLSWM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSTHM,  'MODEL_n::XLSTHM'  )
+    CALL ADD2DFIELD_ll( TLSFIELD2D_ll, XLSZWSM, 'MODEL_n::XLSZWSM' )
     IF (NRR >= 1) THEN
       CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' )
     ENDIF
@@ -1975,7 +1976,6 @@ ZTIME1 = ZTIME2
 !
 IF (LFLYER)                                                                   &
   CALL AIRCRAFT_BALLOON(XTSTEP,                                               &
-                      TDTEXP, TDTMOD, TDTSEG, TDTCUR,                         &
                       XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI,              &
                       XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD,  &
                       XRHODREF,XCIT,PSEA=ZSEA(:,:))
@@ -1988,7 +1988,6 @@ IF (LFLYER)                                                                   &
 !
 IF (LSTATION)                                                            &
   CALL STATION_n(XTSTEP,                                                 &
-                 TDTEXP, TDTMOD, TDTSEG, TDTCUR,                         &
                  XXHAT, XYHAT, XZZ,                                      &
                  XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST   )
 !
@@ -1999,7 +1998,6 @@ IF (LSTATION)                                                            &
 !
 IF (LPROFILER)                                                           &
   CALL PROFILER_n(XTSTEP,                                                &
-                  TDTEXP, TDTMOD, TDTSEG, TDTCUR,                        &
                   XXHAT, XYHAT, XZZ,XRHODREF,                            &
                   XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
                   XAER, XCLDFR, XCIT)
@@ -2026,7 +2024,7 @@ ZTIME1 = ZTIME2
 !
 IF ( .NOT. LIO_NO_WRITE ) THEN
   IF (NBUMOD==IMI .AND. CBUTYPE/='NONE') THEN
-    CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,TDTMOD,XTSTEP,NSV)
+    CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,XTSTEP,NSV)
   END IF
 END IF
 !
diff --git a/src/MNH/mpdata.f90 b/src/MNH/mpdata.f90
index 961d2d98aec37e1372714ba152a3aca51743734d..a0e2c921dca860fbaecd41418156acb71e7710e6 100644
--- a/src/MNH/mpdata.f90
+++ b/src/MNH/mpdata.f90
@@ -164,6 +164,7 @@ REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZFADVV  !  budget
 REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZFADVW  ! purpose
 REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZRVARS  !   only
 !
+integer,            dimension(7)                          :: irx
 CHARACTER (LEN=3) , DIMENSION(7)                          :: YRX
 CHARACTER (LEN=20)                                        :: YBURX
 LOGICAL           , DIMENSION(7)                          :: LBUDGET_R
@@ -197,6 +198,13 @@ LBUDGET_R(5) = LBUDGET_RS
 LBUDGET_R(6) = LBUDGET_RG
 LBUDGET_R(7) = LBUDGET_RH
 !
+irx(1) = NBUDGET_RV
+irx(2) = NBUDGET_RC
+irx(3) = NBUDGET_RR
+irx(4) = NBUDGET_RI
+irx(5) = NBUDGET_RS
+irx(6) = NBUDGET_RG
+irx(7) = NBUDGET_RH
 !
 !-------------------------------------------------------------------------------
 !
@@ -263,11 +271,11 @@ LBUDGET_R(7) = LBUDGET_RH
 !
   IF (LBUDGET_TH)  THEN
     ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:)
-    CALL BUDGET (ZRVARS,4,'ADVX_BU_RTH')
+    CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVX_BU_RTH')
     ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:)
-    CALL BUDGET (ZRVARS,4,'ADVY_BU_RTH')
+    CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVY_BU_RTH')
     ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:)
-    CALL BUDGET (ZRVARS,4,'ADVZ_BU_RTH')
+    CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVZ_BU_RTH')
   END IF
 !
 !-------------------------------------------------------------------------------
@@ -327,13 +335,13 @@ LBUDGET_R(7) = LBUDGET_RH
     IF (LBUDGET_R(JRR)) THEN
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:)
       YBURX = 'ADVX_BU_'//YRX(JRR)
-      CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX)
+      CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX)
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:)
       YBURX = 'ADVY_BU_'//YRX(JRR)
-      CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX)
+      CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX)
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:)
       YBURX = 'ADVZ_BU_'//YRX(JRR)
-      CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX)
+      CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX)
     END IF
   END DO
 !
@@ -393,11 +401,11 @@ LBUDGET_R(7) = LBUDGET_RH
 !  
     IF (LBUDGET_TKE)  THEN
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:)
-      CALL BUDGET (ZRVARS,5,'ADVX_BU_RTKE')
+      CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVX_BU_RTKE')
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:)
-      CALL BUDGET (ZRVARS,5,'ADVY_BU_RTKE')
+      CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVY_BU_RTKE')
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:)
-      CALL BUDGET (ZRVARS,5,'ADVZ_BU_RTKE')
+      CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVZ_BU_RTKE')
     END IF
   END IF
 !
diff --git a/src/MNH/mpdata_scalar.f90 b/src/MNH/mpdata_scalar.f90
index ae29c69b09e8cd4baaf5cddcbb511f7780a9843c..6214a8c3eceb949318df76a8b0a73afdb229b594 100644
--- a/src/MNH/mpdata_scalar.f90
+++ b/src/MNH/mpdata_scalar.f90
@@ -236,11 +236,11 @@ IKU=SIZE(PSVM,3)
 !
     IF (LBUDGET_SV)  THEN
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:)
-      CALL BUDGET (ZRVARS,JSV+12,'ADVX_BU_RSV')
+      CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVX_BU_RSV')
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:)
-      CALL BUDGET (ZRVARS,JSV+12,'ADVY_BU_RSV')
+      CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVY_BU_RSV')
       ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:)
-      CALL BUDGET (ZRVARS,JSV+12,'ADVZ_BU_RSV')
+      CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVZ_BU_RSV')
     END IF
 !
   END DO
diff --git a/src/MNH/nudging.f90 b/src/MNH/nudging.f90
index 78f0d7894095029980f9e470d7e751ac753acfd9..28d18b0e87cffd206e53a5c65a66ef416959e37e 100644
--- a/src/MNH/nudging.f90
+++ b/src/MNH/nudging.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 newsrc 2006/05/24 18:05:52
-!-----------------------------------------------------------------
 !     ###################
       MODULE MODI_NUDGING
 !     ###################
@@ -129,10 +124,10 @@ IF (OUSERV) &
 !*       2.     BUDGET CALLS
 !   	        ------------
 !
-IF (LBUDGET_U)   CALL BUDGET (PRUS,1,'NUD_BU_RU')
-IF (LBUDGET_V)   CALL BUDGET (PRVS,2,'NUD_BU_RV')
-IF (LBUDGET_W)   CALL BUDGET (PRWS,3,'NUD_BU_RW')
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'NUD_BU_RTH')
-IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),6,'NUD_BU_RRV')
+IF (LBUDGET_U)   CALL BUDGET (PRUS,NBUDGET_U,'NUD_BU_RU')
+IF (LBUDGET_V)   CALL BUDGET (PRVS,NBUDGET_V,'NUD_BU_RV')
+IF (LBUDGET_W)   CALL BUDGET (PRWS,NBUDGET_W,'NUD_BU_RW')
+IF (LBUDGET_TH)  CALL BUDGET (PRTHS,NBUDGET_TH,'NUD_BU_RTH')
+IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'NUD_BU_RRV')
 !
 END SUBROUTINE NUDGING
diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90
index 23751bff843dc1a983d8ad0f1cde32eeb59fb3dd..800f23a1bd42fae53e71a20a94449c3dec34e324 100644
--- a/src/MNH/num_diff.f90
+++ b/src/MNH/num_diff.f90
@@ -440,21 +440,21 @@ END IF
 !*       3.     STORES FIELDS IN BUDGET ARRAYS
 !           ------------------------------
 !
-IF (LBUDGET_U .AND. ONUMDIFU )   CALL BUDGET (PRUS,1,'DIF_BU_RU')
-IF (LBUDGET_V .AND. ONUMDIFU )   CALL BUDGET (PRVS,2,'DIF_BU_RV')
-IF (LBUDGET_W .AND. ONUMDIFU )   CALL BUDGET (PRWS,3,'DIF_BU_RW')
-IF (LBUDGET_TH .AND. ONUMDIFTH )  CALL BUDGET (PRTHS,4,'DIF_BU_RTH')
-IF (LBUDGET_TKE .AND. ONUMDIFTH ) CALL BUDGET (PRTKES,5,'DIF_BU_RTKE')
-IF (LBUDGET_RV .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,1),6,'DIF_BU_RRV')
-IF (LBUDGET_RC .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,2),7,'DIF_BU_RRC')
-IF (LBUDGET_RR .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,3),8,'DIF_BU_RRR')
-IF (LBUDGET_RI .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,4),9,'DIF_BU_RRI')
-IF (LBUDGET_RS .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,5),10,'DIF_BU_RRS')
-IF (LBUDGET_RG .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,6),11,'DIF_BU_RRG')
-IF (LBUDGET_RH .AND. ONUMDIFTH )  CALL BUDGET (PRRS(:,:,:,7),12,'DIF_BU_RRH')
-IF (LBUDGET_SV .AND. ONUMDIFSV ) THEN
+IF ( LBUDGET_U   .AND. ONUMDIFU  ) CALL BUDGET( PRUS,              NBUDGET_U,   'DIF_BU_RU'   )
+IF ( LBUDGET_V   .AND. ONUMDIFU  ) CALL BUDGET( PRVS,              NBUDGET_V,   'DIF_BU_RV'   )
+IF ( LBUDGET_W   .AND. ONUMDIFU  ) CALL BUDGET( PRWS,              NBUDGET_W,   'DIF_BU_RW'   )
+IF ( LBUDGET_TH  .AND. ONUMDIFTH ) CALL BUDGET( PRTHS,             NBUDGET_TH,  'DIF_BU_RTH'  )
+IF ( LBUDGET_TKE .AND. ONUMDIFTH ) CALL BUDGET( PRTKES,            NBUDGET_TKE, 'DIF_BU_RTKE' )
+IF ( LBUDGET_RV  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 1 ), NBUDGET_RV,  'DIF_BU_RRV'  )
+IF ( LBUDGET_RC  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 2 ), NBUDGET_RC,  'DIF_BU_RRC'  )
+IF ( LBUDGET_RR  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 3 ), NBUDGET_RR,  'DIF_BU_RRR'  )
+IF ( LBUDGET_RI  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 4 ), NBUDGET_RI,  'DIF_BU_RRI'  )
+IF ( LBUDGET_RS  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 5 ), NBUDGET_RS,  'DIF_BU_RRS'  )
+IF ( LBUDGET_RG  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 6 ), NBUDGET_RG,  'DIF_BU_RRG'  )
+IF ( LBUDGET_RH  .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 7 ), NBUDGET_RH,  'DIF_BU_RRH'  )
+IF ( LBUDGET_SV  .AND. ONUMDIFSV ) THEN
   DO JSV=1,KSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'DIF_BU_RSV')
+    CALL BUDGET( PRSVS(:, :, :, JSV ), NBUDGET_SV1 - 1 + JSV, 'DIF_BU_RSV' )
   END DO
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index bedad9ddef9e7eac9f877bc31387c3100c1ef29e..e9beceaa387a7a84ff6bf6d8dc2e4e4ae4998d65 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -789,7 +789,7 @@ END IF
 !*        1.6   budget storage
 !               --------------
 !
-IF (CRAD/='NONE' .AND. LBUDGET_TH) CALL BUDGET (XRTHS,4,'RAD_BU_RTH')
+IF (CRAD/='NONE' .AND. LBUDGET_TH) CALL BUDGET (XRTHS,NBUDGET_TH,'RAD_BU_RTH')
 !
 CALL SECOND_MNH2(ZTIME2)
 !
@@ -1050,13 +1050,13 @@ END IF
 !  budget storage
 !
 IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
-  IF (LBUDGET_TH) CALL BUDGET (XRTHS,4,'DCONV_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),6,'DCONV_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),7,'DCONV_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),9,'DCONV_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET (XRTHS,NBUDGET_TH,'DCONV_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),NBUDGET_RV,'DCONV_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),NBUDGET_RC,'DCONV_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),NBUDGET_RI,'DCONV_BU_RRI')
   IF (LCHTRANS .AND. LBUDGET_SV) THEN
     DO JSV = 1, SIZE(XRSVS,4)
-      CALL BUDGET (XRSVS(:,:,:,JSV),JSV+12,'DCONV_BU_RSV')
+      CALL BUDGET (XRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'DCONV_BU_RSV')
     END DO
   END IF
 END IF
diff --git a/src/MNH/pressure.f90 b/src/MNH/pressure.f90
index 0ec507eec7ee8fb1fe94c7bacc2836524e3dc88e..c84dfaf95a1e8900f737d7bfe829bdb67297ca5c 100644
--- a/src/MNH/pressure.f90
+++ b/src/MNH/pressure.f90
@@ -610,9 +610,9 @@ ENDIF
 !*       7.    STORAGE OF THE FIELDS IN BUDGET ARRAYS
 !              --------------------------------------
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'PRES_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'PRES_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index b4c3096c367839114be4329438e174c08f608d4c..976f428bd8115d713280f6b212f5461a138a022b 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -677,9 +677,9 @@ ENDIF
 !*       7.    STORAGE OF THE FIELDS IN BUDGET ARRAYS
 !              --------------------------------------
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'PRES_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'PRES_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index a463a4ad712b60b1a0dfabcc444ed12fe91e4b55..ce7a3f0b758036b8e485499aebcb6954304d05f4 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ##########################
@@ -10,18 +10,11 @@ MODULE MODI_PROFILER_n
 INTERFACE
 !
       SUBROUTINE PROFILER_n(PTSTEP,                               &
-                            TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                             PXHAT, PYHAT, PZ,PRHODREF,            &
                             PU, PV, PW, PTH, PR, PSV, PTKE,       &
                             PTS,PP, PAER, PCLDFR, PCIT)
 !
-USE MODD_TYPE_DATE
-!
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -49,7 +42,6 @@ END MODULE MODI_PROFILER_n
 !
 !  ########################################################
       SUBROUTINE PROFILER_n(PTSTEP,                               &
-                            TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                             PXHAT, PYHAT, PZ,PRHODREF,            &
                             PU, PV, PW, PTH, PR, PSV, PTKE,       &
                             PTS, PP, PAER, PCLDFR, PCIT)
@@ -90,33 +82,31 @@ END MODULE MODI_PROFILER_n
 !!     C.Lac 10/2016  Add visibility diagnostic
 !!     March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
-!! --------------------------------------------------------------------------
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
+! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_TYPE_DATE
-USE MODD_PROFILER_n
-USE MODD_SUB_PROFILER_n
-USE MODD_TIME
-USE MODD_PARAMETERS
+USE MODD_CONF
 USE MODD_CST
-USE MODD_GRID
 USE MODD_DIAG_IN_RUN
-USE MODD_CONF
+USE MODD_GRID
+USE MODD_SUB_PROFILER_n
 USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_PARAM_n,        ONLY : CCLOUD
+USE MODD_PROFILER_n
+USE MODD_TIME,           only: tdtexp
+USE MODD_TIME_n,         only: tdtcur
 !
-USE MODE_DATETIME
 USE MODE_ll
 !
-USE MODI_WATER_SUM
-USE MODI_RADAR_RAIN_ICE
+USE MODI_GPS_ZENITH_GRID
 USE MODI_LIDAR
+USE MODI_RADAR_RAIN_ICE
 USE MODI_WATER_SUM
-USE MODI_GPS_ZENITH_GRID
-USE MODD_PARAM_n, ONLY : CCLOUD
-!
 !
 IMPLICIT NONE
 !
@@ -125,10 +115,6 @@ IMPLICIT NONE
 !
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -160,7 +146,6 @@ INTEGER :: IKE
 INTEGER :: IIU
 INTEGER :: IJU
 INTEGER :: IKU
-REAL    :: ZTIMEEXP
 !
 !
 REAL, DIMENSION(SIZE(PXHAT))        :: ZXHATM ! mass point coordinates
@@ -257,7 +242,6 @@ IF ( TPROFILER%T_CUR == XUNDEF ) TPROFILER%T_CUR = TPROFILER%STEP - PTSTEP
 !
 TPROFILER%T_CUR = TPROFILER%T_CUR + PTSTEP
 !
-CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
 IF ( TPROFILER%T_CUR >= TPROFILER%STEP - 1.E-10 ) THEN
   GSTORE = .TRUE.
   TPROFILER%T_CUR = TPROFILER%T_CUR - TPROFILER%STEP
@@ -268,23 +252,14 @@ ELSE
 END IF
 !
 IF (GSTORE) THEN
-  TPROFILER%TIME(IN)      = (IN-1) * TPROFILER%STEP + ZTIMEEXP
-  TPROFILER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR
-  TPROFILER%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH
-  TPROFILER%DATIME( 3,IN) = TPDTEXP%TDATE%DAY
-  TPROFILER%DATIME( 4,IN) = TPDTEXP%TIME
-  TPROFILER%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR
-  TPROFILER%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH
-  TPROFILER%DATIME( 7,IN) = TPDTSEG%TDATE%DAY
-  TPROFILER%DATIME( 8,IN) = TPDTSEG%TIME
-  TPROFILER%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR
-  TPROFILER%DATIME(10,IN) = TPDTMOD%TDATE%MONTH
-  TPROFILER%DATIME(11,IN) = TPDTMOD%TDATE%DAY
-  TPROFILER%DATIME(12,IN) = TPDTMOD%TIME
-  TPROFILER%DATIME(13,IN) = TPDTCUR%TDATE%YEAR
-  TPROFILER%DATIME(14,IN) = TPDTCUR%TDATE%MONTH
-  TPROFILER%DATIME(15,IN) = TPDTCUR%TDATE%DAY
-  TPROFILER%DATIME(16,IN) = TPDTCUR%TIME
+#if 0
+  tprofiler%tpdates(in)%date%year  = tdtexp%date%year
+  tprofiler%tpdates(in)%date%month = tdtexp%date%month
+  tprofiler%tpdates(in)%date%day   = tdtexp%date%day
+  tprofiler%tpdates(in)%time       = tdtexp%time + ( in - 1 ) * tprofiler%step
+#else
+  tprofiler%tpdates(in) = tdtcur
+#endif
 END IF
 !
 !
@@ -410,7 +385,6 @@ IF ((SIZE(PR,4) >= 2) .AND. NSV_C2R2END /= 0 ) THEN
 END IF
 !
 IF (GSTORE) THEN
- IF (TPROFILER%TIME(IN) /= XUNDEF) THEN
   DO I=1,NUMBPROFILER
     IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TPROFILER%ERROR(I))) THEN
       !
@@ -608,8 +582,6 @@ ENDDO
 !
 END IF
 !
-END IF
-!
 !----------------------------------------------------------------------------
 !----------------------------------------------------------------------------
 !
diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90
index 07060753098a0018b03b7cd6d72bfe9f2a1e8705..cc4ef656de762010425b6441919e77ecfdf5f418 100644
--- a/src/MNH/rain_c2r2_khko.f90
+++ b/src/MNH/rain_c2r2_khko.f90
@@ -515,7 +515,7 @@ IF (ORAIN) THEN
 ENDIF
 !
 IF (LBUDGET_SV) &         
-  CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),&
+  CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,&
                     &'BRKU_BU_RSV') ! RCR
             
 !-------------------------------------------------------------------------------
@@ -888,12 +888,12 @@ END IF
 !
 !*       3.4   budget storage
 !
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC')
 IF (LBUDGET_SV) THEN
-  CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCN
-  CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCC
+  CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG,  'HENU_BU_RSV') ! RCN
+  CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,'HENU_BU_RSV') ! RCC
 END IF
 !
 END SUBROUTINE C2R2_KHKO_NUCLEATION
@@ -1088,12 +1088,12 @@ END IF
 !*             budget storage
 !
 !
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC')
 IF (LBUDGET_SV) THEN
-  CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCN
-  CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCC
+  CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG,  'HENU_BU_RSV') ! RCN
+  CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'HENU_BU_RSV') ! RCC
 END IF
 
   END SUBROUTINE AER_NUCLEATION
@@ -1175,7 +1175,7 @@ IF( IMICRO >= 1 ) THEN
   ZW(:,:,:) = PCCS(:,:,:)
   IF (LBUDGET_SV) CALL BUDGET (                                 &
                    UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))&
-                   &*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'SELF_BU_RSV') ! RCC
+                   &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'SELF_BU_RSV') ! RCC
 !
 !*       4.2   Autoconversion of cloud droplets
 !              using a Berry-Reinhardt parameterization
@@ -1204,16 +1204,16 @@ IF( IMICRO >= 1 ) THEN
   ZW(:,:,:) = PRCS(:,:,:)
   IF (LBUDGET_RC) CALL BUDGET (                                            &
                UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))       &
-                            *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
+                            *PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC')
 
   ZW(:,:,:) = PRRS(:,:,:)
   IF (LBUDGET_RR) CALL BUDGET (                                            &
                UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))       &
-                            *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
+                            *PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR')
   ZW(:,:,:) = PCRS(:,:,:)
   IF (LBUDGET_SV) CALL BUDGET (                                       &
                UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))  &
-               &*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV') ! RCR
+               &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV') ! RCR
 !
 !
 !*       4.3    Accretion sources
@@ -1263,15 +1263,15 @@ IF( IMICRO >= 1 ) THEN
   ZW(:,:,:) = PRCS(:,:,:)
   IF (LBUDGET_RC) CALL BUDGET (                                            &
                UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))       &
-                              *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
+                              *PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC')
   ZW(:,:,:) = PRRS(:,:,:)
   IF (LBUDGET_RR) CALL BUDGET (                                            &
                UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))       &
-                              *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
+                              *PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR')
   ZW(:,:,:) = PCCS(:,:,:)
   IF (LBUDGET_SV) CALL BUDGET (                                            &
                UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))       &
-                  *PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'ACCR_BU_RSV') ! RCC
+                  *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'ACCR_BU_RSV') ! RCC
 
 !
 !*       4.4   Self collection - Coalescence/Break-up
@@ -1323,7 +1323,7 @@ IF( IMICRO >= 1 ) THEN
   PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
 !
   IF (LBUDGET_SV) CALL BUDGET(PCRS(:,:,:)*PRHODJ(:,:,:)&
-       &,15+(NSV_C2R2BEG-1),'SCBU_BU_RSV') ! RCR
+       &,NBUDGET_SV1-1+NSV_C2R2BEG+2,'SCBU_BU_RSV') ! RCR
 !
   DEALLOCATE(ZRCT)
   DEALLOCATE(ZRRT)
@@ -1354,20 +1354,20 @@ ELSE
 !
 !*       4.5    Budgets are forwarded
 !
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
        &'SELF_BU_RSV') ! RCC
 !
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
-  IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR')
+  IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,&
        &'AUTO_BU_RSV') ! RCR
 !
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR')
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
        &'ACCR_BU_RSV') ! RCC
 !
-  IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,&
        &'SCBU_BU_RSV') ! RCR
 END IF
 !
@@ -1447,11 +1447,11 @@ IF( IMICRO >= 1 ) THEN
 !
 !*       4.1.2   budget storage
 !
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
                                &'SELF_BU_RSV') ! RCC
-  IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
-  IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC')
+  IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR')
 !
 !*       4.2.1    Accretion sources
 !
@@ -1487,24 +1487,24 @@ IF( IMICRO >= 1 ) THEN
 !
 !*       4.2.2   budget storage
 !
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
                                &'ACCR_BU_RSV') ! RCC
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR')
 !
 ELSE
 !
 !*       4.3    Budgets are forwarded
 !
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,&
                                &'SELF_BU_RSV') ! RCC
-  IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC')
-  IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR')
-  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC')
+  IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR')
+  IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
                                &'ACCR_BU_RSV') ! RCC
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR')
 
 END IF
 !
@@ -1715,10 +1715,10 @@ ELSE ! KHKO
   END WHERE
 ENDIF
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH')
-IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'CEVA_BU_RSV')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV,'REVA_BU_RRV')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'REVA_BU_RRR')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'REVA_BU_RTH')
+IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'CEVA_BU_RSV')
 !
   END SUBROUTINE C2R2_KHKO_EVAPORATION
 !
@@ -1929,12 +1929,12 @@ END DO
 !*       2.5     budget storage
 !
 IF (LBUDGET_RC.AND.OSEDC)                                              &
-               CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
+                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR')
 IF (LBUDGET_SV) THEN
-  IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),&
+  IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,&
                     &'SEDI_BU_RSV') ! RCC
-  CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),&
+  CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,&
                     &'SEDI_BU_RSV') ! RCR
 END IF
 !
@@ -1955,9 +1955,9 @@ END IF
 !*       2.7     budget storage
 !
 IF ( LBUDGET_RC .AND. LDEPOC ) &
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC')
 IF ( LBUDGET_SV .AND. LDEPOC ) &
-   CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'DEPO_BU_RSV') 
+   CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,'DEPO_BU_RSV')
 !
   END SUBROUTINE C2R2_KHKO_SEDIMENTATION
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index 23d5a06c51b12c89c3b16d9c55cd4ed8c6ced3ac..a86f384b1897094e5aa356dc6f91ceb96e1e2243 100644
--- a/src/MNH/rain_ice.f90
+++ b/src/MNH/rain_ice.f90
@@ -248,8 +248,10 @@ END MODULE MODI_RAIN_ICE
 !*       0.    DECLARATIONS
 !              ------------
 !
-use MODD_BUDGET,         only: LBU_ENABLE, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, &
-                               LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH
+use MODD_BUDGET,         only: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, &
+                               LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, &
+                               NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 use MODD_CONF,           only: LCHECK
 use MODD_CST,            only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, &
                                XALPI, XBETAI, XGAMI, XMD, XMV, XTT
@@ -945,87 +947,87 @@ IF( IMICRO >= 0 ) THEN
 ! Reordered for compability with flexible structures like in AROME
 
  ! rain_ice_slow
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HON_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HON_BU_RRC')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HON_BU_RRI')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'SFR_BU_RTH')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SFR_BU_RRR')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SFR_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPS_BU_RTH')
+ IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPS_BU_RRV')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DEPS_BU_RRS')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AGGS_BU_RRI')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AGGS_BU_RRS')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AUTS_BU_RRI')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AUTS_BU_RRS')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPG_BU_RTH')
+ IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPG_BU_RRV')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DEPG_BU_RRG')
 
  IF (OWARM) THEN ! rain_ice_warm
-   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR')
-   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR')
-   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH')
-   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR')
+   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR')
+   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR')
+   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH')
+   IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR')
  ENDIF
 
  !rain_ice_fast_rs
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'RIM_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'RIM_BU_RRC')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'RIM_BU_RRS')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'RIM_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'ACC_BU_RTH')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACC_BU_RRR')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'ACC_BU_RRS')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'ACC_BU_RRG')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'CMEL_BU_RRS')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CMEL_BU_RRG')
 
  !rain_ice_fast_rg
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG')
- IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI')
- IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH')
- IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR')
- IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'CFRZ_BU_RTH')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'CFRZ_BU_RRR')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'CFRZ_BU_RRI')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CFRZ_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETG_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETG_BU_RRC')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETG_BU_RRR')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETG_BU_RRI')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETG_BU_RRS')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETG_BU_RRG')
+ IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETG_BU_RRH')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DRYG_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'DRYG_BU_RRC')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'DRYG_BU_RRR')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'DRYG_BU_RRI')
+ IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DRYG_BU_RRS')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DRYG_BU_RRG')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'GMLT_BU_RTH')
+ IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'GMLT_BU_RRR')
+ IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'GMLT_BU_RRG')
 
  IF(KRR==7) THEN ! rain_ice_fast_rh
-   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH')
-   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR')
-   IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI')
-   IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS')
-   IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG')
-   IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH')
-   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH')
-   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR')
-   IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH')
+   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETH_BU_RTH')
+   IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETH_BU_RRC')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETH_BU_RRR')
+   IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETH_BU_RRI')
+   IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETH_BU_RRS')
+   IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETH_BU_RRG')
+   IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETH_BU_RRH')
+   IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HMLT_BU_RTH')
+   IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'HMLT_BU_RRR')
+   IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'HMLT_BU_RRH')
  ENDIF
 
  !rain_ice_fast_ri
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI')
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH')
- IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC')
- IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'IMLT_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'IMLT_BU_RRC')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'IMLT_BU_RRI')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'BERFI_BU_RTH')
+ IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'BERFI_BU_RRC')
+ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'BERFI_BU_RRI')
 !
 END IF
 !
diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90
index 37e0c3d04d21f1f9b59f0f52c58eb84633ad6d6f..645869054d24eadaa79d8f031101830ccf847844 100644
--- a/src/MNH/rain_ice_elec.f90
+++ b/src/MNH/rain_ice_elec.f90
@@ -1107,144 +1107,144 @@ ELSE
 ! Reordered for compability with flexible structures like in AROME
 
 ! rain_ice_slow
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HON_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HON_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HON_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'SFR_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SFR_BU_RRR')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SFR_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPS_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPS_BU_RRV')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DEPS_BU_RRS')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AGGS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AGGS_BU_RRS')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AUTS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AUTS_BU_RRS')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPG_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPG_BU_RRV')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DEPG_BU_RRG')
 !
   IF (OWARM) THEN ! rain_ice_warm
-    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR')
-    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR')
-    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH')
-    IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV')
-    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR')
+    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR')
+    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR')
+    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR')
   ENDIF
 !
 ! rain_ice_fast_rs
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'RIM_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'RIM_BU_RRC')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'RIM_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'RIM_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'ACC_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACC_BU_RRR')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'ACC_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'ACC_BU_RRG')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'CMEL_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CMEL_BU_RRG')
 
 ! rain_ice_fast_rg
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG')
-  IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'CFRZ_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'CFRZ_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'CFRZ_BU_RRI')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CFRZ_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETG_BU_RRG')
+  IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETG_BU_RRH')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DRYG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'DRYG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'DRYG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'DRYG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DRYG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DRYG_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'GMLT_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'GMLT_BU_RRR')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'GMLT_BU_RRG')
 
   IF(KRR==7) THEN ! rain_ice_fast_rh
-    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH')
-    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR')
-    IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI')
-    IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS')
-    IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG')
-    IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH')
-    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH')
-    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR')
-    IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH')
+    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETH_BU_RTH')
+    IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETH_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETH_BU_RRR')
+    IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETH_BU_RRI')
+    IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETH_BU_RRS')
+    IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETH_BU_RRG')
+    IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETH_BU_RRH')
+    IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HMLT_BU_RTH')
+    IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'HMLT_BU_RRR')
+    IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'HMLT_BU_RRH')
   ENDIF
 
 ! rain_ice_fast_ri
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI')
-  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'IMLT_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'IMLT_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'IMLT_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'BERFI_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'BERFI_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'BERFI_BU_RRI')
 !
   IF (LBUDGET_SV) THEN
 ! rain_ice_slow
-      CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG,  'DEPS_BU_RSV')
-      CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'DEPS_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'DEPS_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'AGGS_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'AGGS_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'AUTS_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'AUTS_BU_RSV')
-      CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG,  'DEPG_BU_RSV')
-      CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'DEPG_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+5,'DEPG_BU_RSV')
+      CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG,  'DEPS_BU_RSV')
+      CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'DEPS_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'DEPS_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'AGGS_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'AGGS_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'AUTS_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'AUTS_BU_RSV')
+      CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG,  'DEPG_BU_RSV')
+      CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'DEPG_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+5,'DEPG_BU_RSV')
 !
 ! rain_ice_warm
       IF (OWARM) THEN 
-        CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'AUTO_BU_RSV')
-        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'AUTO_BU_RSV')
-        CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'ACCR_BU_RSV')
-        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'ACCR_BU_RSV')
-        CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG,  'REVA_BU_RSV')
-        CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'REVA_BU_RSV')
-        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'REVA_BU_RSV')
+        CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'AUTO_BU_RSV')
+        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'AUTO_BU_RSV')
+        CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'ACCR_BU_RSV')
+        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'ACCR_BU_RSV')
+        CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG,  'REVA_BU_RSV')
+        CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'REVA_BU_RSV')
+        CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'REVA_BU_RSV')
       END IF
 !
 ! rain_ice_fast_rs
-      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'RIM_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'RIM_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'RIM_BU_RSV')
-      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'ACC_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'ACC_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'ACC_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'CMEL_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'CMEL_BU_RSV')
+      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'RIM_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'RIM_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'RIM_BU_RSV')
+      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'ACC_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'ACC_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'ACC_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'CMEL_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'CMEL_BU_RSV')
 !
 ! rain_ice_fast_rg
-      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'CFRZ_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'CFRZ_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'CFRZ_BU_RSV')
-      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'WETG_BU_RSV')
-      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'WETG_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'WETG_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'WETG_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'WETG_BU_RSV')
-      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'DRYG_BU_RSV')
-      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'DRYG_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'DRYG_BU_RSV')
-      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'DRYG_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'DRYG_BU_RSV')
-      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'GMLT_BU_RSV')
-      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND,  'GMLT_BU_RSV')
+      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'CFRZ_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'CFRZ_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'CFRZ_BU_RSV')
+      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'WETG_BU_RSV')
+      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'WETG_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'WETG_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'WETG_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'WETG_BU_RSV')
+      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'DRYG_BU_RSV')
+      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'DRYG_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'DRYG_BU_RSV')
+      CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'DRYG_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'DRYG_BU_RSV')
+      CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'GMLT_BU_RSV')
+      CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND,  'GMLT_BU_RSV')
 !
 ! rain_ice_fast_ri
-      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'IMLT_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'IMLT_BU_RSV')
-      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'BERFI_BU_RSV')
-      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'BERFI_BU_RSV')
+      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'IMLT_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'IMLT_BU_RSV')
+      CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'BERFI_BU_RSV')
+      CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'BERFI_BU_RSV')
 !
   END IF
 END IF
@@ -1974,20 +1974,20 @@ REAL :: ZVR, ZVI, ZVS, ZVG, ZETA0, ZK, ZRE0
 !*       2.3     budget storage
 !
   IF (LBUDGET_RC .AND. OSEDIC) &
-                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'SEDI_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SEDI_BU_RRG')
   IF ( KRR == 7 .AND. LBUDGET_RH) &
-                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'SEDI_BU_RRH')
 !
   IF (LBUDGET_SV) THEN
-    CALL BUDGET (PQCS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+1,'SEDI_BU_RSV')
-    CALL BUDGET (PQRS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+2,'SEDI_BU_RSV')
-    CALL BUDGET (PQIS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+3,'SEDI_BU_RSV')
-    CALL BUDGET (PQSS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+4,'SEDI_BU_RSV')
-    CALL BUDGET (PQGS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+5,'SEDI_BU_RSV')
+    CALL BUDGET (PQCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'SEDI_BU_RSV')
+    CALL BUDGET (PQRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'SEDI_BU_RSV')
+    CALL BUDGET (PQIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'SEDI_BU_RSV')
+    CALL BUDGET (PQSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'SEDI_BU_RSV')
+    CALL BUDGET (PQGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+5,'SEDI_BU_RSV')
   END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_SEDIMENTATION_SPLIT
@@ -2369,13 +2369,13 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !
 !*       2.3     budget storage
 !
   IF (LBUDGET_RC .AND. OSEDIC) &
-                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'SEDI_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SEDI_BU_RRG')
   IF (KRR == 7 .AND. LBUDGET_RH) &     
-                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'SEDI_BU_RRH')
 
 !
   END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
@@ -2485,9 +2485,9 @@ END IF
 !
 !*       3.1.3   budget storage
 !
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HENU_BU_RRI')
 !
   END SUBROUTINE RAIN_ICE_ELEC_NUCLEATION
 !
@@ -2532,19 +2532,19 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'HON_BU_RTH')
+                                                        NBUDGET_TH,'HON_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              7,'HON_BU_RRC')
+                                                        NBUDGET_RC,'HON_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'HON_BU_RRI')
+                                                        NBUDGET_RI,'HON_BU_RRI')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0),&
-                                              12+NSV_ELECBEG+1,'HON_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+1,'HON_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECBEG+3,'HON_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+3,'HON_BU_RSV')
   END IF
 !
 !*       3.5.2   compute the spontaneous freezing source: RRHONG & QRHONG
@@ -2568,19 +2568,19 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'SFR_BU_RTH')
+                                                        NBUDGET_TH,'SFR_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'SFR_BU_RRR')
+                                                        NBUDGET_RR,'SFR_BU_RRR')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'SFR_BU_RRG')
+                                                        NBUDGET_RG,'SFR_BU_RRG')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0),&
-                                              12+NSV_ELECBEG+2,'HON_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+2,'HON_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECEND,  'HON_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECEND,  'HON_BU_RSV')
   END IF
 
 !
@@ -2623,21 +2623,21 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'DEPS_BU_RTH')
+                                                      NBUDGET_TH,'DEPS_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (                                                &
                  UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),  &
-                                                              6,'DEPS_BU_RRV')
+                                                      NBUDGET_RV,'DEPS_BU_RRV')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'DEPS_BU_RRS')
+                                                      NBUDGET_RS,'DEPS_BU_RRS')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS)          &
-                        *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'DEPS_BU_RSV')
+                        *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'DEPS_BU_RSV')
     CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS)          &
-                        *PRHODJ(:,:,:), 12+NSV_ELECEND ,'DEPS_BU_RSV')
+                        *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'DEPS_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECBEG+4,'DEPS_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+4,'DEPS_BU_RSV')
   END IF
 !
 !*       3.5.3.4  compute the aggregation on r_s: RIAGGS & QIAGGS
@@ -2669,16 +2669,16 @@ IMPLICIT NONE
 !
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'AGGS_BU_RRI')
+                                                        NBUDGET_RI,'AGGS_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'AGGS_BU_RRS')
+                                                        NBUDGET_RS,'AGGS_BU_RRS')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'AGGS_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'AGGS_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+4,'AGGS_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+4,'AGGS_BU_RSV')
   END IF
 !
   CALL ELEC_IAGGS_B()                                   ! QIAGGS_boun
@@ -2689,9 +2689,9 @@ IMPLICIT NONE
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'NIIS_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'NIIS_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+4,'NIIS_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+4,'NIIS_BU_RSV')
   END IF
 !
 !*       3.5.3.5  compute the autoconversion of r_i for r_s production: 
@@ -2719,16 +2719,16 @@ IMPLICIT NONE
   DEALLOCATE(ZCRIAUTI)
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'AUTS_BU_RRI')
+                                                      NBUDGET_RI,'AUTS_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'AUTS_BU_RRS')
+                                                      NBUDGET_RS,'AUTS_BU_RRS')
 !
   IF (LBU_RSV) THEN
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                         12+NSV_ELECBEG+3,'AUTS_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_ELECBEG+3,'AUTS_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                         12+NSV_ELECBEG+4,'AUTS_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_ELECBEG+4,'AUTS_BU_RSV')
   END IF
 !
 !*       3.5.3.6  compute the deposition on r_g: RVDEPG & QVDEPG
@@ -2757,21 +2757,21 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'DEPG_BU_RTH')
+                                                      NBUDGET_TH,'DEPG_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (                                                &
                  UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),  &
-                                                              6,'DEPG_BU_RRV')
+                                                      NBUDGET_RV,'DEPG_BU_RRV')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'DEPG_BU_RRG')
+                                                      NBUDGET_RG,'DEPG_BU_RRG')
 !
   IF (LBU_RSV) THEN
     CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS)          &
-                        *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'DEPG_BU_RSV')
+                        *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'DEPG_BU_RSV')
     CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS)          &
-                        *PRHODJ(:,:,:), 12+NSV_ELECEND ,'DEPG_BU_RSV')
+                        *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'DEPG_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                                 12+NSV_ELECEND,'DEPG_BU_RSV')
+                                                 NBUDGET_SV1-1+NSV_ELECEND,'DEPG_BU_RSV')
   END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_SLOW
@@ -2840,16 +2840,16 @@ REAL :: ZCRIAUTC             ! Critical cloud mixing ratio
 !
       IF (LBUDGET_RC) CALL BUDGET (                                            &
                        UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                7,'AUTO_BU_RRC')
+                                                      NBUDGET_RC,'AUTO_BU_RRC')
       IF (LBUDGET_RR) CALL BUDGET (                                            &
                        UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'AUTO_BU_RRR')
+                                                      NBUDGET_RR,'AUTO_BU_RRR')
 !
       IF (LBUDGET_SV) THEN
         CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECBEG+1,'AUTO_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+1,'AUTO_BU_RSV')
         CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECBEG+2,'AUTO_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECBEG+2,'AUTO_BU_RSV')
       END IF
 !
 !
@@ -2874,16 +2874,16 @@ REAL :: ZCRIAUTC             ! Critical cloud mixing ratio
 !
     IF (LBUDGET_RC) CALL BUDGET (                                            &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              7,'ACCR_BU_RRC')
+                                                    NBUDGET_RC,'ACCR_BU_RRC')
     IF (LBUDGET_RR) CALL BUDGET (                                            &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              8,'ACCR_BU_RRR')
+                                                    NBUDGET_RR,'ACCR_BU_RRR')
 !
     IF (LBU_RSV) THEN
       CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECBEG+1,'ACCR_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECBEG+1,'ACCR_BU_RSV')
       CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECBEG+2,'ACCR_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECBEG+2,'ACCR_BU_RSV')
     END IF
 !
 !
@@ -2916,23 +2916,23 @@ REAL :: ZCRIAUTC             ! Critical cloud mixing ratio
 !
     IF (LBUDGET_TH) CALL BUDGET (                                              &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'REVA_BU_RTH')
+                                                      NBUDGET_TH,'REVA_BU_RTH')
     IF (LBUDGET_RV) CALL BUDGET (                                              &
                  UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),  &
-                                                              6,'REVA_BU_RRV')
+                                                      NBUDGET_RV,'REVA_BU_RRV')
     IF (LBUDGET_RR) CALL BUDGET (                                              &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'REVA_BU_RRR')
+                                                      NBUDGET_RR,'REVA_BU_RRR')
     ZW(:,:,:)=PEVAP3D(:,:,:)
     PEVAP3D(:,:,:)=UNPACK(ZZW(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))
 !
     IF (LBUDGET_SV) THEN
       CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS)          &
-                          *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'REVA_BU_RSV')
+                          *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'REVA_BU_RSV')
       CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS)          &
-                          *PRHODJ(:,:,:), 12+NSV_ELECEND ,'REVA_BU_RSV')
+                          *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'REVA_BU_RSV')
       CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+2,'REVA_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+2,'REVA_BU_RSV')
     END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_WARM
@@ -3069,25 +3069,25 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                               &
                UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),   &
-                                                             4,'RIM_BU_RTH')
+                                                      NBUDGET_TH,'RIM_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                               &
                    UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                             7,'RIM_BU_RRC')
+                                                      NBUDGET_RC,'RIM_BU_RRC')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                    UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                            10,'RIM_BU_RRS')
+                                                      NBUDGET_RS,'RIM_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                    UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                            11,'RIM_BU_RRG')
+                                                      NBUDGET_RG,'RIM_BU_RRG')
 !
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                           12+NSV_ELECBEG+1,'RIM_BU_RSV')
+                                           NBUDGET_SV1-1+NSV_ELECBEG+1,'RIM_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                           12+NSV_ELECBEG+4,'RIM_BU_RSV')
+                                           NBUDGET_SV1-1+NSV_ELECBEG+4,'RIM_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                             12+NSV_ELECEND,'RIM_BU_RSV')
+                                             NBUDGET_SV1-1+NSV_ELECEND,'RIM_BU_RSV')
   END IF
 !
   DEALLOCATE(GRIM)
@@ -3247,24 +3247,24 @@ IMPLICIT NONE
   DEALLOCATE(GACC)
   IF (LBUDGET_TH) CALL BUDGET (                                               &
                UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),   &
-                                                             4,'ACC_BU_RTH')
+                                                      NBUDGET_TH,'ACC_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                               &
                    UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                             8,'ACC_BU_RRR')
+                                                      NBUDGET_RR,'ACC_BU_RRR')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                    UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                            10,'ACC_BU_RRS')
+                                                      NBUDGET_RS,'ACC_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                    UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                            11,'ACC_BU_RRG')
+                                                      NBUDGET_RG,'ACC_BU_RRG')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECBEG+2,'ACC_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECBEG+2,'ACC_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECBEG+4,'ACC_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECBEG+4,'ACC_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECEND,'ACC_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECEND,'ACC_BU_RSV')
   END IF
 !
 !*       5.3    Conversion-Melting of the aggregates: RSMLT & QSMLT
@@ -3303,16 +3303,16 @@ IMPLICIT NONE
 !
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'CMEL_BU_RRS')
+                                                      NBUDGET_RS,'CMEL_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'CMEL_BU_RRG')
+                                                      NBUDGET_RG,'CMEL_BU_RRG')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+4,'CMEL_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+4,'CMEL_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECEND,'CMEL_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECEND,'CMEL_BU_RSV')
   END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_FAST_RS
@@ -3368,24 +3368,24 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'CFRZ_BU_RTH')
+                                                      NBUDGET_TH,'CFRZ_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'CFRZ_BU_RRR')
+                                                      NBUDGET_RR,'CFRZ_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'CFRZ_BU_RRI')
+                                                      NBUDGET_RI,'CFRZ_BU_RRI')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'CFRZ_BU_RRG')
+                                                      NBUDGET_RG,'CFRZ_BU_RRG')
 !
   IF (LBU_RSV) THEN
     CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+2,'CFRZ_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+2,'CFRZ_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'CFRZ_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'CFRZ_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECEND,'CFRZ_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECEND,'CFRZ_BU_RSV')
   END IF
 !
 !
@@ -3751,39 +3751,39 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'WETG_BU_RTH')
+                                                      NBUDGET_TH,'WETG_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              7,'WETG_BU_RRC')
+                                                      NBUDGET_RC,'WETG_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                                &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'WETG_BU_RRR')
+                                                      NBUDGET_RR,'WETG_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'WETG_BU_RRI')
+                                                      NBUDGET_RI,'WETG_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'WETG_BU_RRS')
+                                                      NBUDGET_RS,'WETG_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'WETG_BU_RRG')
+                                                      NBUDGET_RG,'WETG_BU_RRG')
   IF ( KRR == 7 ) THEN
     IF (LBUDGET_RH) CALL BUDGET (                                              &
                      UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             12,'WETG_BU_RRH')
+                                                      NBUDGET_RH,'WETG_BU_RRH')
   END IF
 !
   IF (LBU_RSV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+1,'WETG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+1,'WETG_BU_RSV')
     CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+2,'WETG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+2,'WETG_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'WETG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'WETG_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+4,'WETG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+4,'WETG_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECEND,'WETG_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECEND,'WETG_BU_RSV')
   END IF
 !
   WHERE (ZRGT(:) > XRTMIN(6) .AND. ZZT(:) < XTT .AND. & ! Dry
@@ -3806,34 +3806,34 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'DRYG_BU_RTH')
+                                                      NBUDGET_TH,'DRYG_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              7,'DRYG_BU_RRC')
+                                                      NBUDGET_RC,'DRYG_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                                &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'DRYG_BU_RRR')
+                                                      NBUDGET_RR,'DRYG_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'DRYG_BU_RRI')
+                                                      NBUDGET_RI,'DRYG_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'DRYG_BU_RRS')
+                                                      NBUDGET_RS,'DRYG_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'DRYG_BU_RRG')
+                                                      NBUDGET_RG,'DRYG_BU_RRG')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+1,'DRYG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+1,'DRYG_BU_RSV')
     CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+2,'DRYG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+2,'DRYG_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'DRYG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'DRYG_BU_RSV')
     CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+4,'DRYG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+4,'DRYG_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECEND,'DRYG_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECEND,'DRYG_BU_RSV')
   END IF
 !
 !
@@ -3853,9 +3853,9 @@ IMPLICIT NONE
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+1,'INCG_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+1,'INCG_BU_RSV')
     CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECEND,'INCG_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECEND,'INCG_BU_RSV')
   END IF
 !
 !
@@ -3892,19 +3892,19 @@ IMPLICIT NONE
 !
     IF (LBUDGET_TH) CALL BUDGET (                                              &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'GMLT_BU_RTH')
+                                                      NBUDGET_TH,'GMLT_BU_RTH')
     IF (LBUDGET_RR) CALL BUDGET (                                              &
                        UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'GMLT_BU_RRR')
+                                                      NBUDGET_RR,'GMLT_BU_RRR')
     IF (LBUDGET_RG) CALL BUDGET (                                              &
                        UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                               11,'GMLT_BU_RRG')
+                                                      NBUDGET_RG,'GMLT_BU_RRG')
 !
     IF (LBUDGET_SV) THEN
       CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                            12+NSV_ELECBEG+2,'GMLT_BU_RSV')
+                                            NBUDGET_SV1-1+NSV_ELECBEG+2,'GMLT_BU_RSV')
       CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                              12+NSV_ELECEND,'GMLT_BU_RSV')
+                                              NBUDGET_SV1-1+NSV_ELECEND,'GMLT_BU_RSV')
     END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_FAST_RG
@@ -4133,25 +4133,25 @@ IMPLICIT NONE
 
   IF (LBUDGET_TH) CALL BUDGET (                                              &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                              4,'WETH_BU_RTH')
+                                                            NBUDGET_TH,'WETH_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                          &
                  UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              7,'WETH_BU_RRC')
+                                                            NBUDGET_RC,'WETH_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                          &
                  UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              8,'WETH_BU_RRR')
+                                                            NBUDGET_RR,'WETH_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                          &
                  UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              9,'WETH_BU_RRI')
+                                                            NBUDGET_RI,'WETH_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                          &
                  UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                             10,'WETH_BU_RRS')
+                                                            NBUDGET_RS,'WETH_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                          &
                  UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                             11,'WETH_BU_RRG')
+                                                            NBUDGET_RG,'WETH_BU_RRG')
   IF (LBUDGET_RH) CALL BUDGET (                                          &
                  UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                             12,'WETH_BU_RRH')
+                                                            NBUDGET_RH,'WETH_BU_RRH')
 !
   IF (IHAIL > 0) THEN
 !
@@ -4192,13 +4192,13 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                              &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                             4,'HMLT_BU_RTH')
+                                                            NBUDGET_TH,'HMLT_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                              &
                      UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                              8,'HMLT_BU_RRR')
+                                                            NBUDGET_RR,'HMLT_BU_RRR')
   IF (LBUDGET_RH) CALL BUDGET (                                              &
                      UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                             12,'HMLT_BU_RRH')
+                                                            NBUDGET_RH,'HMLT_BU_RRH')
 !
   END SUBROUTINE RAIN_ICE_ELEC_FAST_RH
 !
@@ -4230,19 +4230,19 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                              4,'IMLT_BU_RTH')
+                                                              NBUDGET_TH,'IMLT_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              7,'IMLT_BU_RRC')
+                                                              NBUDGET_RC,'IMLT_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'IMLT_BU_RRI')
+                                                              NBUDGET_RI,'IMLT_BU_RRI')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+1,'IMLT_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+1,'IMLT_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                          12+NSV_ELECBEG+3,'IMLT_BU_RSV')
+                                          NBUDGET_SV1-1+NSV_ELECBEG+3,'IMLT_BU_RSV')
   END IF
 !
 !*       7.2    Bergeron-Findeisen effect: RCBERI
@@ -4272,19 +4272,19 @@ IMPLICIT NONE
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),  &
-                                                             4,'BERFI_BU_RTH')
+                                                             NBUDGET_TH,'BERFI_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             7,'BERFI_BU_RRC')
+                                                             NBUDGET_RC,'BERFI_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),   &
-                                                             9,'BERFI_BU_RRI')
+                                                             NBUDGET_RI,'BERFI_BU_RRI')
 !
   IF (LBUDGET_SV) THEN
     CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                         12+NSV_ELECBEG+1,'BERFI_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_ELECBEG+1,'BERFI_BU_RSV')
     CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), &
-                                         12+NSV_ELECBEG+3,'BERFI_BU_RSV')
+                                         NBUDGET_SV1-1+NSV_ELECBEG+3,'BERFI_BU_RSV')
   END IF
 !
   END SUBROUTINE RAIN_ICE_ELEC_FAST_RI
diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90
index 7c2b0aeb7a600ad27138e4e99475ae6029b53dd8..33a65180b9bed5b508857cd14a7ddf961b3e3fa2 100644
--- a/src/MNH/rain_ice_fast_rg.f90
+++ b/src/MNH/rain_ice_fast_rg.f90
@@ -28,7 +28,8 @@ SUBROUTINE RAIN_ICE_FAST_RG(KRR, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST,
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 use MODD_CST,            only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
 use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXG, XCXS, XDG, XRTMIN
 use MODD_RAIN_ICE_PARAM, only: NDRYLBDAG, NDRYLBDAR, NDRYLBDAS, X0DEPG, X1DEPG, XCOLEXIG, XCOLEXSG, XCOLIG, XCOLSG, XDRYINTP1G, &
@@ -106,16 +107,16 @@ REAL,    DIMENSION(size(PRHODREF),7) :: ZZW1              ! Work arrays
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'CFRZ_BU_RTH')
+                                                        NBUDGET_TH,'CFRZ_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'CFRZ_BU_RRR')
+                                                        NBUDGET_RR,'CFRZ_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'CFRZ_BU_RRI')
+                                                        NBUDGET_RI,'CFRZ_BU_RRI')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             11,'CFRZ_BU_RRG')
+                                                        NBUDGET_RG,'CFRZ_BU_RRG')
 !
 !*       6.2    compute the Dry growth case
 !
@@ -346,26 +347,26 @@ REAL,    DIMENSION(size(PRHODREF),7) :: ZZW1              ! Work arrays
  END IF
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'WETG_BU_RTH')
+                                                        NBUDGET_TH,'WETG_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              7,'WETG_BU_RRC')
+                                                        NBUDGET_RC,'WETG_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'WETG_BU_RRR')
+                                                        NBUDGET_RR,'WETG_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'WETG_BU_RRI')
+                                                        NBUDGET_RI,'WETG_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             10,'WETG_BU_RRS')
+                                                        NBUDGET_RS,'WETG_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             11,'WETG_BU_RRG')
+                                                        NBUDGET_RG,'WETG_BU_RRG')
   IF ( KRR == 7 ) THEN
-    IF (LBUDGET_RH) CALL BUDGET (                                                 &
+    IF (LBUDGET_RH) CALL BUDGET (                                               &
                      UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             12,'WETG_BU_RRH')
+                                                        NBUDGET_RH,'WETG_BU_RRH')
   END IF
 
 !
@@ -382,22 +383,22 @@ REAL,    DIMENSION(size(PRHODREF),7) :: ZZW1              ! Work arrays
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                    &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'DRYG_BU_RTH')
+                                                        NBUDGET_TH,'DRYG_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              7,'DRYG_BU_RRC')
+                                                        NBUDGET_RC,'DRYG_BU_RRC')
   IF (LBUDGET_RR) CALL BUDGET (                                                 &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'DRYG_BU_RRR')
+                                                        NBUDGET_RR,'DRYG_BU_RRR')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'DRYG_BU_RRI')
+                                                        NBUDGET_RI,'DRYG_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             10,'DRYG_BU_RRS')
+                                                        NBUDGET_RS,'DRYG_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             11,'DRYG_BU_RRG')
+                                                        NBUDGET_RG,'DRYG_BU_RRG')
 !
 !      WHERE ( PZT(:) > XTT ) ! RSWETG case only
 !        PRSS(:) = PRSS(:) - ZZW1(:,6)
@@ -426,13 +427,13 @@ REAL,    DIMENSION(size(PRHODREF),7) :: ZZW1              ! Work arrays
   END WHERE
     IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                                4,'GMLT_BU_RTH')
+                                                          NBUDGET_TH,'GMLT_BU_RTH')
     IF (LBUDGET_RR) CALL BUDGET (                                                 &
                        UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                                8,'GMLT_BU_RRR')
+                                                          NBUDGET_RR,'GMLT_BU_RRR')
     IF (LBUDGET_RG) CALL BUDGET (                                                 &
                        UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                               11,'GMLT_BU_RRG')
+                                                          NBUDGET_RG,'GMLT_BU_RRG')
 !
 END SUBROUTINE RAIN_ICE_FAST_RG
 
diff --git a/src/MNH/rain_ice_fast_rh.f90 b/src/MNH/rain_ice_fast_rh.f90
index cedf7ceb49ac1a4c725839c600fd18d0fb74e4ce..5b83463e8c0f44180a8d9d0272ff717e6ae81647 100644
--- a/src/MNH/rain_ice_fast_rh.f90
+++ b/src/MNH/rain_ice_fast_rh.f90
@@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_FAST_RH(OMICRO, PRHODREF, PRVT, PRCT, PRIT, PRST, PRGT, PRHT
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 use MODD_CST,            only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
 use MODD_RAIN_ICE_DESCR, only: XBG, XBS, XCEXVT, XCXG, XCXH, XCXS, XDH, XLBEXH, XLBH, XRTMIN
 use MODD_RAIN_ICE_PARAM, only: NWETLBDAG, NWETLBDAH, NWETLBDAS, X0DEPH, X1DEPH, &
@@ -302,25 +303,25 @@ REAL,    DIMENSION(size(PRHODREF),6) :: ZZW1              ! Work arrays
   END IF
     IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),&
-                                                                4,'WETH_BU_RTH')
+                                                          NBUDGET_TH,'WETH_BU_RTH')
     IF (LBUDGET_RC) CALL BUDGET (                                                 &
                        UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                                7,'WETH_BU_RRC')
+                                                          NBUDGET_RC,'WETH_BU_RRC')
     IF (LBUDGET_RR) CALL BUDGET (                                                 &
                        UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'WETH_BU_RRR')
+                                                          NBUDGET_RR,'WETH_BU_RRR')
     IF (LBUDGET_RI) CALL BUDGET (                                                 &
                        UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                                9,'WETH_BU_RRI')
+                                                          NBUDGET_RI,'WETH_BU_RRI')
     IF (LBUDGET_RS) CALL BUDGET (                                                 &
                        UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                               10,'WETH_BU_RRS')
+                                                          NBUDGET_RS,'WETH_BU_RRS')
     IF (LBUDGET_RG) CALL BUDGET (                                                 &
                        UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                               11,'WETH_BU_RRG')
+                                                          NBUDGET_RG,'WETH_BU_RRG')
     IF (LBUDGET_RH) CALL BUDGET (                                                 &
                        UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                               12,'WETH_BU_RRH')
+                                                          NBUDGET_RH,'WETH_BU_RRH')
 !
 !
 ! ici LRECONVH et un flag pour autoriser une reconversion partielle de
@@ -377,13 +378,13 @@ REAL,    DIMENSION(size(PRHODREF),6) :: ZZW1              ! Work arrays
 
     IF (LBUDGET_TH) CALL BUDGET (                                                 &
                    UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),&
-                                                                4,'HMLT_BU_RTH')
+                                                          NBUDGET_TH,'HMLT_BU_RTH')
     IF (LBUDGET_RR) CALL BUDGET (                                                 &
                        UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'HMLT_BU_RRR')
+                                                          NBUDGET_RR,'HMLT_BU_RRR')
     IF (LBUDGET_RH) CALL BUDGET (                                                 &
                        UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
-                                                               12,'HMLT_BU_RRH')
+                                                          NBUDGET_RH,'HMLT_BU_RRH')
 !
 END SUBROUTINE RAIN_ICE_FAST_RH
 
diff --git a/src/MNH/rain_ice_fast_ri.f90 b/src/MNH/rain_ice_fast_ri.f90
index 782f79c9eaffbbb699c155fbb85e0872d27e23c7..67b9c233147989511a5042aa1bdd7f918016d80c 100644
--- a/src/MNH/rain_ice_fast_ri.f90
+++ b/src/MNH/rain_ice_fast_ri.f90
@@ -23,7 +23,8 @@ SUBROUTINE RAIN_ICE_FAST_RI(OMICRO, PRHODREF, PRIT, PRHODJ, PZT, PSSI, PLSFACT,
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RI, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RI, &
+                               NBUDGET_TH, NBUDGET_RC, NBUDGET_RI
 use MODD_CST,            only: XTT
 use MODD_RAIN_ICE_DESCR, only: XDI, XLBEXI, XLBI, XRTMIN
 use MODD_RAIN_ICE_PARAM, only: X0DEPI, X2DEPI
@@ -66,13 +67,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW  ! Work array
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'IMLT_BU_RTH')
+                                                        NBUDGET_TH,'IMLT_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              7,'IMLT_BU_RRC')
+                                                        NBUDGET_RC,'IMLT_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'IMLT_BU_RRI')
+                                                        NBUDGET_RI,'IMLT_BU_RRI')
 !
 !*       7.2    Bergeron-Findeisen effect: RCBERI
 !
@@ -86,13 +87,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW  ! Work array
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                             4,'BERFI_BU_RTH')
+                                                        NBUDGET_TH,'BERFI_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                 &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             7,'BERFI_BU_RRC')
+                                                        NBUDGET_RC,'BERFI_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             9,'BERFI_BU_RRI')
+                                                        NBUDGET_RI,'BERFI_BU_RRI')
 !
 END SUBROUTINE RAIN_ICE_FAST_RI
 
diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
index 5f5f9713eba6e28af53732ca458c168ad098f5fb..49d7cec95fa059d58a00b62f6161b822c9f941a5 100644
--- a/src/MNH/rain_ice_fast_rs.f90
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_FAST_RS(PTSTEP, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRST, PR
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RS, LBUDGET_RG, &
+                               NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG
 use MODD_CST,            only: XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
 use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXS, XRTMIN
 use MODD_RAIN_ICE_PARAM, only: NACCLBDAR, NACCLBDAS, NGAMINC, X0DEPS, X1DEPS, XACCINTP1R, XACCINTP1S, XACCINTP2R, XACCINTP2S, &
@@ -169,16 +170,16 @@ REAL,    DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays
   END IF
   IF (LBUDGET_TH) CALL BUDGET (                                               &
                UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                             4,'RIM_BU_RTH')
+                                                      NBUDGET_TH,'RIM_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                               &
                    UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             7,'RIM_BU_RRC')
+                                                      NBUDGET_RC,'RIM_BU_RRC')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                    UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                            10,'RIM_BU_RRS')
+                                                      NBUDGET_RS,'RIM_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                    UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                            11,'RIM_BU_RRG')
+                                                      NBUDGET_RG,'RIM_BU_RRG')
 !
 !*       5.2    rain accretion onto the aggregates
 !
@@ -312,16 +313,16 @@ REAL,    DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays
   END IF
   IF (LBUDGET_TH) CALL BUDGET (                                               &
                UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                             4,'ACC_BU_RTH')
+                                                        NBUDGET_TH,'ACC_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                               &
                    UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             8,'ACC_BU_RRR')
+                                                        NBUDGET_RR,'ACC_BU_RRR')
   IF (LBUDGET_RS) CALL BUDGET (                                               &
                    UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                            10,'ACC_BU_RRS')
+                                                        NBUDGET_RS,'ACC_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                               &
                    UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                            11,'ACC_BU_RRG')
+                                                        NBUDGET_RG,'ACC_BU_RRG')
 !
 !*       5.3    Conversion-Melting of the aggregates
 !
@@ -346,10 +347,10 @@ REAL,    DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays
   END WHERE
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             10,'CMEL_BU_RRS')
+                                                             NBUDGET_RS,'CMEL_BU_RRS')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             11,'CMEL_BU_RRG')
+                                                             NBUDGET_RG,'CMEL_BU_RRG')
 !
 END SUBROUTINE RAIN_ICE_FAST_RS
 
diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90
index 959c7bb0ddc7511b04aec3aedc3ed7e664fac883..bcc4e79fded2e35f938f375001cffe45f89485b1 100644
--- a/src/MNH/rain_ice_nucleation.f90
+++ b/src/MNH/rain_ice_nucleation.f90
@@ -25,7 +25,8 @@ SUBROUTINE RAIN_ICE_NUCLEATION(KIB, KIE, KJB, KJE, KKTB, KKTE,KRR,PTSTEP,&
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,          only: LBUDGET_RI, LBUDGET_RV, LBUDGET_TH
+use MODD_BUDGET,          only: LBUDGET_RI, LBUDGET_RV, LBUDGET_TH, &
+                                NBUDGET_TH, NBUDGET_RV, NBUDGET_RI
 use MODD_CST,             only: XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPD, XCPV, XGAMI, XGAMW, &
                                 XLSTT, XMD, XMV, XP00, XRD, XTT
 use MODD_RAIN_ICE_PARAM,  only: XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20
@@ -166,9 +167,9 @@ END IF
 !
 !*       3.1.3   budget storage
 !
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HENU_BU_RRI')
 !
 END SUBROUTINE RAIN_ICE_NUCLEATION
 
diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90
index 321d59013269728a3a969e9a78fea2f9899c07e9..22b85cbcc5d7dd2e174969327ef95dc7320be80c 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -246,7 +246,9 @@ END MODULE MODI_RAIN_ICE_RED
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_BUDGET,         ONLY: LBU_ENABLE,LBUDGET_RC,LBUDGET_RR,LBUDGET_RI,LBUDGET_RS,LBUDGET_RG,LBUDGET_RH,LBUDGET_RV,LBUDGET_TH
+USE MODD_BUDGET,         ONLY: LBU_ENABLE,                                                                                     &
+                               LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 USE MODD_CST,            ONLY: XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT
 USE MODD_PARAMETERS,     ONLY: JPVEXT,XUNDEF
 USE MODD_PARAM_ICE,      ONLY: CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER, &
@@ -588,15 +590,15 @@ IF(.NOT. LSEDIM_AFTER) THEN
   !*       2.2     budget storage
   !
   IF (LBUDGET_RC .AND. OSEDIC) &
-                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG')
+                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG')
   IF ( KRR == 7 .AND. LBUDGET_RH) &
-                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH')
+                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH')
   IF ( LBUDGET_RC .AND. LDEPOSC ) &
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC')
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -1124,9 +1126,9 @@ IF(LBU_ENABLE) THEN
   PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
   PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HENU_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'HENU_BU_RRV')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HENU_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'HENU_BU_RRV')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HENU_BU_RRI')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1135,9 +1137,9 @@ IF(LBU_ENABLE) THEN
   PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
   PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HON_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'HON_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HON_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'HON_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HON_BU_RRI')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1146,9 +1148,9 @@ IF(LBU_ENABLE) THEN
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
   PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'SFR_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'SFR_BU_RRR')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'SFR_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SFR_BU_RRR')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'SFR_BU_RRG')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1157,9 +1159,9 @@ IF(LBU_ENABLE) THEN
   PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:)
   PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPS_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPS_BU_RRV')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPS_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPS_BU_RRV')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DEPS_BU_RRS')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1167,8 +1169,8 @@ IF(LBU_ENABLE) THEN
   END DO
   PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:)
   PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:)
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AGGS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'AGGS_BU_RRS')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1176,8 +1178,8 @@ IF(LBU_ENABLE) THEN
   END DO
   PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:)
   PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:)
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AUTS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'AUTS_BU_RRS')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1186,9 +1188,9 @@ IF(LBU_ENABLE) THEN
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
   PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPG_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPG_BU_RRV')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DEPG_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPG_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPG_BU_RRV')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DEPG_BU_RRG')
 
   IF(OWARM) THEN
     ZW(:,:,:) = 0.
@@ -1197,8 +1199,8 @@ IF(LBU_ENABLE) THEN
     END DO
     PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:)
     PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR')
+    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'AUTO_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'AUTO_BU_RRR')
 
     ZW(:,:,:) = 0.
     DO JL=1,IMICRO
@@ -1206,8 +1208,8 @@ IF(LBU_ENABLE) THEN
     END DO
     PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:)
     PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR')
+    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'ACCR_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACCR_BU_RRR')
 
     ZW(:,:,:) = 0.
     DO JL=1,IMICRO
@@ -1216,9 +1218,9 @@ IF(LBU_ENABLE) THEN
     PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:)
     PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:)
     PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:)
-    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'REVA_BU_RTH')
-    IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'REVA_BU_RRV')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'REVA_BU_RRR')
+    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'REVA_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'REVA_BU_RRV')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'REVA_BU_RRR')
   ENDIF
 
   ZW(:,:,:) = 0.
@@ -1241,10 +1243,10 @@ IF(LBU_ENABLE) THEN
   END DO
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
   PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'RIM_BU_RRC')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'RIM_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'RIM_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'RIM_BU_RRC')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'RIM_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'RIM_BU_RRG')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1266,10 +1268,10 @@ IF(LBU_ENABLE) THEN
   END DO
   PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:)
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACC_BU_RRR')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'ACC_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'ACC_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACC_BU_RRR')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'ACC_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'ACC_BU_RRG')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1283,10 +1285,10 @@ IF(LBU_ENABLE) THEN
   END DO
   PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:)
   PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CMEL_BU_RRG')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CMEL_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'CMEL_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CMEL_BU_RRG')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CMEL_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CMEL_BU_RRR')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1307,10 +1309,10 @@ IF(LBU_ENABLE) THEN
   END DO
   PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:)
   PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CFRZ_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CFRZ_BU_RRI')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CFRZ_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CFRZ_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CFRZ_BU_RRI')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CFRZ_BU_RRG')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1338,12 +1340,12 @@ IF(LBU_ENABLE) THEN
   END DO
   PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:)
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETG_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETG_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETG_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETG_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'WETG_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'WETG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'WETG_BU_RRG')
 
   IF(KRR==7) THEN
     ZW(:,:,:) = 0.
@@ -1352,8 +1354,8 @@ IF(LBU_ENABLE) THEN
     END DO
     PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:)
     PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG')
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'GHCV_BU_RRH')
+    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'GHCV_BU_RRG')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'GHCV_BU_RRH')
   END IF
 
   ZW(:,:,:) = 0.
@@ -1382,12 +1384,12 @@ IF(LBU_ENABLE) THEN
   END DO
   PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:)
   PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYG_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYG_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYG_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYG_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DRYG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DRYG_BU_RRG')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1396,9 +1398,9 @@ IF(LBU_ENABLE) THEN
   PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
   PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'GMLT_BU_RTH')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'GMLT_BU_RRR')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GMLT_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'GMLT_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'GMLT_BU_RRR')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'GMLT_BU_RRG')
 
   IF(KRR==7) THEN
     ZW(:,:,:) = 0.
@@ -1433,12 +1435,12 @@ IF(LBU_ENABLE) THEN
     END DO
     PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:)
     PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH')
-    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETH_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETH_BU_RRR')
-    IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETH_BU_RRI')
-    IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETH_BU_RRS')
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH')
+    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETH_BU_RTH')
+    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETH_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETH_BU_RRR')
+    IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETH_BU_RRI')
+    IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'WETH_BU_RRS')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'WETH_BU_RRH')
 
     ZW(:,:,:) = 0.
     DO JL=1,IMICRO
@@ -1446,8 +1448,8 @@ IF(LBU_ENABLE) THEN
     END DO
     PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:)
     PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG')
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH')
+    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'HGCV_BU_RRG')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'HGCV_BU_RRH')
 
     ZW(:,:,:) = 0.
     DO JL=1,IMICRO
@@ -1487,13 +1489,13 @@ IF(LBU_ENABLE) THEN
     END DO
     PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:)
     PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:)
-    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH')
-    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYH_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYH_BU_RRR')
-    IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYH_BU_RRI')
-    IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYH_BU_RRS')
-    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYH_BU_RRG')
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH')
+    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYH_BU_RTH')
+    IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYH_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYH_BU_RRR')
+    IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYH_BU_RRI')
+    IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DRYH_BU_RRS')
+    IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DRYH_BU_RRG')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'DRYH_BU_RRH')
 
     ZW(:,:,:) = 0.
     DO JL=1,IMICRO
@@ -1502,9 +1504,9 @@ IF(LBU_ENABLE) THEN
     PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:)
     PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:)
     PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HMLT_BU_RTH')
-    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'HMLT_BU_RRR')
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HMLT_BU_RRH')
+    IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HMLT_BU_RTH')
+    IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'HMLT_BU_RRR')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'HMLT_BU_RRH')
   ENDIF
 
   ZW(:,:,:) = 0.
@@ -1514,9 +1516,9 @@ IF(LBU_ENABLE) THEN
   PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:)
   PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'IMLT_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'IMLT_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'IMLT_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'IMLT_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'IMLT_BU_RRI')
 
   ZW(:,:,:) = 0.
   DO JL=1,IMICRO
@@ -1525,9 +1527,9 @@ IF(LBU_ENABLE) THEN
   PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:)
   PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:))
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'BERFI_BU_RTH')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'BERFI_BU_RRC')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'BERFI_BU_RRI')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'BERFI_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'BERFI_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'BERFI_BU_RRI')
 ENDIF
 !
 !***     7.3    Final tendencies
@@ -1543,15 +1545,15 @@ IF (KRR==7) THEN
 ENDIF
 PTHS(:,:,:) = ZW_THS(:,:,:)
 IF(LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CORR_BU_RTH')
-  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'CORR_BU_RRV')
-  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CORR_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CORR_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CORR_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CORR_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CORR_BU_RRG')
+  IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CORR_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'CORR_BU_RRV')
+  IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CORR_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CORR_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CORR_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'CORR_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CORR_BU_RRG')
   IF (KRR==7) THEN
-    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'CORR_BU_RRH')
+    IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'CORR_BU_RRH')
   ENDIF
 ENDIF
 !
@@ -1627,13 +1629,13 @@ IF(LSEDIM_AFTER) THEN
   !*       8.2     budget storage
   !
   IF (LBUDGET_RC .AND. OSEDIC) &
-                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC')
-  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR')
-  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI')
-  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS')
-  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG')
+                  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG')
   IF ( KRR == 7 .AND. LBUDGET_RH) &
-                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH')
+                  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH')
   !
   !sedimentation of rain fraction
   CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP)
diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90
index 3007adf386b93b66948b6452297b6ce4a1d29934..349004ee8bcbd504b6bb0d1410061d49f5352278 100644
--- a/src/MNH/rain_ice_sedimentation_split.f90
+++ b/src/MNH/rain_ice_sedimentation_split.f90
@@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT(KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 use MODD_CST,            only: XCPD, XP00, XRD, XRHOLW
 use MODD_PARAM_ICE,      only: XVDEPOSC
 use MODD_RAIN_ICE_DESCR, only: XCC, XCONC_LAND, xconc_sea, xconc_urban, XDC, XCEXVT, &
@@ -582,13 +583,13 @@ IF (KRR == 7 .AND. (ILENALLOCH .GT. 0 )) DEALLOCATE(ZRHODREFH,ZRHS,ILISTH)
 !*       2.3     budget storage
 !
 IF (LBUDGET_RC .AND. OSEDIC) &
-                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG')
 IF ( KRR == 7 .AND. LBUDGET_RH) &
-                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH')
 !
 !
 !
@@ -607,7 +608,7 @@ END IF
 !*       2.5     budget storage
 !
 IF ( LBUDGET_RC .AND. ODEPOSC ) &
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC')
 !
 
   END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT
diff --git a/src/MNH/rain_ice_sedimentation_stat.f90 b/src/MNH/rain_ice_sedimentation_stat.f90
index 3156ab84cf81a4df23261990ae54482257b8b646..895e2365687feb5eb637796d017c0f2b82d33729 100644
--- a/src/MNH/rain_ice_sedimentation_stat.f90
+++ b/src/MNH/rain_ice_sedimentation_stat.f90
@@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT( KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH
 use MODD_CST,            only: XRHOLW
 use MODD_PARAM_ICE,      only: LDEPOSC, XVDEPOSC
 use MODD_RAIN_ICE_PARAM, only: XEXSEDG, XEXSEDH, XEXCSEDI, XEXSEDR, XEXSEDS, &
@@ -548,13 +549,13 @@ PINPRR3D (:,:,:) = 0.
 !*       2.3     budget storage
 !
 IF (LBUDGET_RC .AND. OSEDIC) &
-                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+                CALL BUDGET( PRCS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RC, 'SEDI_BU_RRC' )
+IF (LBUDGET_RR) CALL BUDGET( PRRS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RR, 'SEDI_BU_RRR' )
+IF (LBUDGET_RI) CALL BUDGET( PRIS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RI, 'SEDI_BU_RRI' )
+IF (LBUDGET_RS) CALL BUDGET( PRSS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RS, 'SEDI_BU_RRS' )
+IF (LBUDGET_RG) CALL BUDGET( PRGS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RG, 'SEDI_BU_RRG' )
 IF ( KRR == 7 .AND. LBUDGET_RH) &
-                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+                CALL BUDGET( PRHS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RH, 'SEDI_BU_RRH' )
 !
 !
 !*       2.4  DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND
@@ -572,7 +573,7 @@ END IF
 !*       2.5     budget storage
 !
 IF ( LBUDGET_RC .AND. LDEPOSC ) &
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+   CALL BUDGET( PRCS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RC, 'DEPO_BU_RRC' )
 !
 END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
 
diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90
index eb46ad5318796fa2e160df3f11f9714c914484c5..844d8301670c79c70714b7623e3b5d1909223b27 100644
--- a/src/MNH/rain_ice_slow.f90
+++ b/src/MNH/rain_ice_slow.f90
@@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SLOW(OMICRO, PINVTSTEP, PRHODREF,                      &
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, &
+                               NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG
 use MODD_CST,            only: XALPI, XBETAI, XCI, XCPV, XGAMI, XLSTT, XMNH_HUGE_12_LOG, XP00, XRV, XTT
 use MODD_RAIN_ICE_DESCR, only: XCEXVT, XLBDAS_MAX, XLBEXG, XLBEXS, XLBG, XLBS, XRTMIN
 use MODD_RAIN_ICE_PARAM, only: X0DEPG, X0DEPS, X1DEPG, X1DEPS, XACRIAUTI, XALPHA3, XBCRIAUTI, XBETA3, XCOLEXIS, XCRIAUTI, &
@@ -91,13 +92,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
-                                                              4,'HON_BU_RTH')
+                                                        NBUDGET_TH,'HON_BU_RTH')
   IF (LBUDGET_RC) CALL BUDGET (                                                &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
-                                                              7,'HON_BU_RRC')
+                                                        NBUDGET_RC,'HON_BU_RRC')
   IF (LBUDGET_RI) CALL BUDGET (                                                &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
-                                                              9,'HON_BU_RRI')
+                                                        NBUDGET_RI,'HON_BU_RRI')
 !
 !*       3.3     compute the spontaneous freezing source: RRHONG
 !
@@ -111,13 +112,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
 !
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
-                                                              4,'SFR_BU_RTH')
+                                                        NBUDGET_TH,'SFR_BU_RTH')
   IF (LBUDGET_RR) CALL BUDGET (                                                &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
-                                                              8,'SFR_BU_RRR')
+                                                        NBUDGET_RR,'SFR_BU_RRR')
   IF (LBUDGET_RG) CALL BUDGET (                                                &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
-                                                             11,'SFR_BU_RRG')
+                                                        NBUDGET_RG,'SFR_BU_RRG')
 !
 !*       3.4    compute the deposition, aggregation and autoconversion sources
 !
@@ -162,13 +163,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
-                                                              4,'DEPS_BU_RTH')
+                                                      NBUDGET_TH,'DEPS_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (                                                &
                  UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),  &
-                                                              6,'DEPS_BU_RRV')
+                                                      NBUDGET_RV,'DEPS_BU_RRV')
   IF (LBUDGET_RS) CALL BUDGET (                                                &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
-                                                             10,'DEPS_BU_RRS')
+                                                      NBUDGET_RS,'DEPS_BU_RRS')
 !
 !*       3.4.4  compute the aggregation on r_s: RIAGGS
 !
@@ -183,10 +184,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
   END WHERE
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'AGGS_BU_RRI')
+                                                        NBUDGET_RI,'AGGS_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             10,'AGGS_BU_RRS')
+                                                        NBUDGET_RS,'AGGS_BU_RRS')
 !
 !*       3.4.5  compute the autoconversion of r_i for r_s production: RIAUTS
 !
@@ -201,10 +202,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
   END WHERE
   IF (LBUDGET_RI) CALL BUDGET (                                                 &
                      UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              9,'AUTS_BU_RRI')
+                                                        NBUDGET_RI,'AUTS_BU_RRI')
   IF (LBUDGET_RS) CALL BUDGET (                                                 &
                      UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             10,'AUTS_BU_RRS')
+                                                        NBUDGET_RS,'AUTS_BU_RRS')
 !
 !*       3.4.6  compute the deposition on r_g: RVDEPG
 !
@@ -224,13 +225,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
   END WHERE
   IF (LBUDGET_TH) CALL BUDGET (                                                 &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'DEPG_BU_RTH')
+                                                        NBUDGET_TH,'DEPG_BU_RTH')
   IF (LBUDGET_RV) CALL BUDGET (                                                 &
                  UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),   &
-                                                              6,'DEPG_BU_RRV')
+                                                        NBUDGET_RV,'DEPG_BU_RRV')
   IF (LBUDGET_RG) CALL BUDGET (                                                 &
                      UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                             11,'DEPG_BU_RRG')
+                                                        NBUDGET_RG,'DEPG_BU_RRG')
 !
 END SUBROUTINE RAIN_ICE_SLOW
 
diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90
index 54a8c315ce30eeab59a7a5fec15e733613710758..15f61b57067a485162324ead8a01ad9c22dacd48 100644
--- a/src/MNH/rain_ice_warm.f90
+++ b/src/MNH/rain_ice_warm.f90
@@ -25,7 +25,8 @@ SUBROUTINE RAIN_ICE_WARM(OMICRO, KMICRO, K1, K2, K3,
 !*      0. DECLARATIONS
 !          ------------
 !
-use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RV, LBUDGET_TH
+use MODD_BUDGET,         only: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, &
+                               NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR
 use MODD_CST,            only: XALPW, XBETAW, XCL, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
 use MODD_PARAM_ICE,      only: CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP
 use MODD_RAIN_ICE_DESCR, only: XCEXVT, XRTMIN
@@ -99,10 +100,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array
 !
       IF (LBUDGET_RC) CALL BUDGET (                                               &
                        UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                                7,'AUTO_BU_RRC')
+                                                          NBUDGET_RC,'AUTO_BU_RRC')
       IF (LBUDGET_RR) CALL BUDGET (                                               &
                        UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                                8,'AUTO_BU_RRR')
+                                                          NBUDGET_RR,'AUTO_BU_RRR')
 !
 !*       4.3    compute the accretion of r_c for r_r production: RCACCR
 !
@@ -153,10 +154,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array
 
     IF (LBUDGET_RC) CALL BUDGET (                                               &
                      UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              7,'ACCR_BU_RRC')
+                                                        NBUDGET_RC,'ACCR_BU_RRC')
     IF (LBUDGET_RR) CALL BUDGET (                                               &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'ACCR_BU_RRR')
+                                                        NBUDGET_RR,'ACCR_BU_RRR')
 !
 !*       4.4    compute the evaporation of r_r: RREVAV
 !
@@ -230,13 +231,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array
 
     IF (LBUDGET_TH) CALL BUDGET (                                               &
                  UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
-                                                              4,'REVA_BU_RTH')
+                                                        NBUDGET_TH,'REVA_BU_RTH')
     IF (LBUDGET_RV) CALL BUDGET (                                               &
                  UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),   &
-                                                              6,'REVA_BU_RRV')
+                                                        NBUDGET_RV,'REVA_BU_RRV')
     IF (LBUDGET_RR) CALL BUDGET (                                               &
                      UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'REVA_BU_RRR')
+                                                        NBUDGET_RR,'REVA_BU_RRR')
 
     DO JL = 1, KMICRO
       PEVAP3D(K1(JL), K2(JL), K3(JL)) = ZZW( JL )
diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90
index e057e1223321a3a8f3f6a1748d82da97d3a72b12..e9c05ea10b1a13d97eed562531ce3e1cac1b9c59 100644
--- a/src/MNH/rel_forcingn.f90
+++ b/src/MNH/rel_forcingn.f90
@@ -249,8 +249,8 @@ END IF
 !
 !*       3.     BUDGET CALLS
 !   	        ------------
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'2DREL_BU_RTH')
-IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),6,'2DREL_BU_RRV')
+IF (LBUDGET_TH)  CALL BUDGET (PRTHS,NBUDGET_TH,'2DREL_BU_RTH')
+IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'2DREL_BU_RRV')
 !----------------------------------------------------------------------------
 !
 END SUBROUTINE REL_FORCING_n
diff --git a/src/MNH/relax2fw_ion.f90 b/src/MNH/relax2fw_ion.f90
index 001f00385fe034e52ef3128f4b0776ea90707f00..cae86dedffd855da3c36911bbe488fe8578bc611 100644
--- a/src/MNH/relax2fw_ion.f90
+++ b/src/MNH/relax2fw_ion.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-2019 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.
+!-----------------------------------------------------------------
 !     ########################
       MODULE MODI_RELAX2FW_ION
 !     ########################
@@ -102,16 +103,16 @@ END MODULE MODI_RELAX2FW_ION
 !*       0.    DECLARATIONS
 !              ------------
 !
+use modd_budget,     only: lbudget_sv, NBUDGET_SV1
+USE MODD_CONF
+USE MODD_ELEC_n,     ONLY: XCION_POS_FW, XCION_NEG_FW
+USE MODD_NSV,        ONLY: NSV_ELECBEG, NSV_ELECEND
 USE MODD_PARAMETERS
-USE MODD_CONF 
-USE MODD_BUDGET 
-USE MODD_NSV, ONLY: NSV_ELECBEG, NSV_ELECEND
-USE MODD_ELEC_n, ONLY: XCION_POS_FW, XCION_NEG_FW
 !
 USE MODE_ll
 !
-USE MODI_SHUMAN     
-USE MODI_BUDGET     
+USE MODI_BUDGET
+USE MODI_SHUMAN
 !
 IMPLICIT NONE
 !
@@ -212,10 +213,8 @@ END IF
 !	        ------------------------------
 !
 IF (LBUDGET_SV) THEN
-  JSV = NSV_ELECBEG
-  CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV')
-  JSV = NSV_ELECEND
-  CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV')
+  CALL BUDGET( PRSVS(:, :, :, NSV_ELECBEG ), NBUDGET_SV1 - 1 + NSV_ELECBEG, 'REL_BU_RSV' )
+  CALL BUDGET( PRSVS(:, :, :, NSV_ELECEND ), NBUDGET_SV1 - 1 + NSV_ELECEND, 'REL_BU_RSV' )
 END IF
 !
 !
diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90
index 13e62a4ab64a002543ff228b84df9a69e1ad9855..df1c4133a85c62aa643f58e17e4a6c9b768dcef4 100644
--- a/src/MNH/relaxation.f90
+++ b/src/MNH/relaxation.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_RELAXATION 
 !     ######################
@@ -706,21 +707,21 @@ END DO
 !	        ------------------------------
 !
 CALL EXTRAPOL('W ', PRUS)
-IF (LBUDGET_U) CALL BUDGET  (PRUS,1,'REL_BU_RU')
-IF (LBUDGET_V) CALL BUDGET  (PRVS,2,'REL_BU_RV')
-IF (LBUDGET_W) CALL BUDGET  (PRWS,3,'REL_BU_RW')
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'REL_BU_RTH')
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'REL_BU_RTKE')
-IF (LBUDGET_RV)  CALL BUDGET (PRRS(:,:,:,1),6,'REL_BU_RRV')
-IF (LBUDGET_RC)  CALL BUDGET (PRRS(:,:,:,2),7,'REL_BU_RRC')
-IF (LBUDGET_RR)  CALL BUDGET (PRRS(:,:,:,3),8,'REL_BU_RRR')
-IF (LBUDGET_RI)  CALL BUDGET (PRRS(:,:,:,4),9,'REL_BU_RRI')
-IF (LBUDGET_RS)  CALL BUDGET (PRRS(:,:,:,5),10,'REL_BU_RRS')
-IF (LBUDGET_RG)  CALL BUDGET (PRRS(:,:,:,6),11,'REL_BU_RRG')
-IF (LBUDGET_RH)  CALL BUDGET (PRRS(:,:,:,7),12,'REL_BU_RRH')
-IF (LBUDGET_SV) THEN
+IF ( LBUDGET_U   ) CALL BUDGET( PRUS,                 NBUDGET_U,             'REL_BU_RU')
+IF ( LBUDGET_V   ) CALL BUDGET( PRVS,                 NBUDGET_V,             'REL_BU_RV')
+IF ( LBUDGET_W   ) CALL BUDGET( PRWS,                 NBUDGET_W,             'REL_BU_RW')
+IF ( LBUDGET_TH  ) CALL BUDGET( PRTHS,                NBUDGET_TH,            'REL_BU_RTH')
+IF ( LBUDGET_TKE ) CALL BUDGET( PRTKES,               NBUDGET_TKE,           'REL_BU_RTKE')
+IF ( LBUDGET_RV  ) CALL BUDGET( PRRS(:, :, :, 1 ),    NBUDGET_RV,            'REL_BU_RRV')
+IF ( LBUDGET_RC  ) CALL BUDGET( PRRS(:, :, :, 2 ),    NBUDGET_RC,            'REL_BU_RRC')
+IF ( LBUDGET_RR  ) CALL BUDGET( PRRS(:, :, :, 3 ),    NBUDGET_RR,            'REL_BU_RRR')
+IF ( LBUDGET_RI  ) CALL BUDGET( PRRS(:, :, :, 4 ),    NBUDGET_RI,            'REL_BU_RRI')
+IF ( LBUDGET_RS  ) CALL BUDGET( PRRS(:, :, :, 5 ),    NBUDGET_RS,            'REL_BU_RRS')
+IF ( LBUDGET_RG  ) CALL BUDGET( PRRS(:, :, :, 6 ),    NBUDGET_RG,            'REL_BU_RRG')
+IF ( LBUDGET_RH  ) CALL BUDGET( PRRS(:, :, :, 7 ),    NBUDGET_RH,            'REL_BU_RRH')
+IF ( LBUDGET_SV  ) THEN
   DO JSV=1,KSV 
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV')
+                   CALL BUDGET( PRSVS(:, :, :, JSV ), NBUDGET_SV1 - 1 + JSV, 'REL_BU_RSV' )
   END DO
 END IF
 !
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 6116fa3f90a75778e6a4285035708a6add594dfc..f0257f5f08430f7651d2051edae09ad6c0440a1c 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -271,8 +271,10 @@ END MODULE MODI_RESOLVED_CLOUD
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_BUDGET,         ONLY: LBUDGET_TH, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, &
-                               LBUDGET_SV
+USE MODD_BUDGET,         ONLY: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, &
+                               LBUDGET_SV,                                                                                     &
+                               NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, &
+                               NBUDGET_SV1
 USE MODD_CH_AEROSOL,     ONLY: LORILAM
 USE MODD_DUST,           ONLY: LDUST
 USE MODD_CST,            ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XMNH_TINY, XP00, XRD, XRHOLW, XTT
@@ -764,29 +766,29 @@ END SELECT
 !            ----------------------
 !
 IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
- IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), NBUDGET_TH,'NEGA_BU_RTH')
+ IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV,'NEGA_BU_RRV')
+ IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC,'NEGA_BU_RRC')
 END IF
-IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
+IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), NBUDGET_RR,'NEGA_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:), NBUDGET_RI,'NEGA_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:), NBUDGET_RS,'NEGA_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:), NBUDGET_RG,'NEGA_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:), NBUDGET_RH,'NEGA_BU_RRH')
 IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV')
-   IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV')
-   IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV')
+   IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'NEGA_BU_RSV')
+   IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'NEGA_BU_RSV')
+   IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'NEGA_BU_RSV')
    IF (NMOD_CCN.GE.1) THEN
       DO JL=1, NMOD_CCN
          CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') 
+              PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV')
       END DO
    END IF
    IF (NMOD_IFN.GE.1) THEN
       DO JL=1, NMOD_IFN
          CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* &
-              PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') 
+              PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV')
       END DO
    END IF
 END IF
@@ -1153,9 +1155,9 @@ IF ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') ) THEN
         ZSVS(:,:,:,JSV) = 0.0
       END WHERE
     ENDDO
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NECON_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NECON_BU_RRV')
- IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NECON_BU_RRC')
+ IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), NBUDGET_TH,'NECON_BU_RTH')
+ IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV,'NECON_BU_RRV')
+ IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC,'NECON_BU_RRC')
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90
index 71ceb8c62dcef75d0bafe62c656747b82f5d598b..535a783271b01d0fc10c22348684a1f1092b447d 100644
--- a/src/MNH/resolved_elecn.f90
+++ b/src/MNH/resolved_elecn.f90
@@ -612,18 +612,18 @@ END DO
 !
 !*       3.4     store the budget terms
 !
-IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV, 'NEGA_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC, 'NEGA_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), NBUDGET_RR, 'NEGA_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,NBUDGET_RI, 'NEGA_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:), NBUDGET_RS, 'NEGA_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:), NBUDGET_RG, 'NEGA_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:), NBUDGET_RH, 'NEGA_BU_RRH')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), NBUDGET_TH, 'NEGA_BU_RTH')
 !
 IF (LBUDGET_SV) THEN
   DO JSV = NSV_ELECBEG, NSV_ELECEND
-    CALL BUDGET (PSVS(:,:,:,JSV) * PRHODJ(:,:,:), 12+JSV, 'NEGA_BU_RSV')
+    CALL BUDGET (PSVS(:,:,:,JSV) * PRHODJ(:,:,:), NBUDGET_SV1-1+JSV, 'NEGA_BU_RSV')
   END DO
 END IF
 !
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index c592e4b540e9bab63c7a48062de2430efad3081b..96487fcaa6d249df646e94c072d9278a0f8f6283 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -40,33 +40,31 @@
 !!  01/2018      (G.Delautier) SURFEX 8.1
 !!  03/2018     (P.Wautelet)   replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
 !            ------------
 !
+USE MODD_CONF,          ONLY: NVERB
+USE MODD_CONF_n,        ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH
+USE MODD_FIELD_n,       ONLY: XTHT,XWT,XUT,XPABST,XRT
+USE MODD_GRID_n,        ONLY: XZZ
+USE MODD_LUNIT_n,       ONLY: TLUOUT
+USE MODD_MNH_SURFEX_n
+USE MODD_PARAMETERS
+USE MODD_PRECIP_n,      ONLY: XINPRC,XINPRR,XINPRS,XINPRG,XINPRH, &
+                              XACPRC,XACPRR,XACPRS,XACPRG,XACPRH
+USE MODD_REF,           ONLY: XRHODREFZ
 USE MODD_SERIES
 USE MODD_SERIES_n
-USE MODD_PARAMETERS
-USE MODD_CONF, ONLY: NVERB
-USE MODD_REF, ONLY: XRHODREFZ
-USE MODD_TIME, ONLY: TDTEXP
+USE MODD_TIME_n,        ONLY: TDTCUR
 USE MODD_TYPE_DATE
-USE MODD_CONF_n,   ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH
-USE MODD_FIELD_n,  ONLY: XTHT,XWT,XUT,XPABST,XRT
-USE MODD_GRID_n,   ONLY: XZZ
-USE MODD_LUNIT_n,  ONLY: TLUOUT
-USE MODD_PRECIP_n, ONLY: XINPRC,XINPRR,XINPRS,XINPRG,XINPRH, &
-                         XACPRC,XACPRR,XACPRS,XACPRG,XACPRH
-USE MODD_TIME_n, ONLY: TDTCUR
-! SURFACE FIELDS
-USE MODI_GET_SURF_VAR_n
 !
-USE MODE_DATETIME
 USE MODE_ll
 USE MODE_MSG
 !
-USE MODD_MNH_SURFEX_n
+USE MODI_GET_SURF_VAR_n
 !
 IMPLICIT NONE
 !
@@ -92,7 +90,6 @@ INTEGER  :: IRESP  ! Return code of FM-routines
 INTEGER  :: ISER
 CHARACTER (LEN=5), DIMENSION(3) :: YSUF
 LOGICAL, DIMENSION(SIZE(LINBOX,1),SIZE(LINBOX,2),3) :: GINBOX
-TYPE (DATE_TIME)  :: TZDTCUR ! current date and time
 !SURFACE FIELDS
 REAL,    DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2))  :: ZTS, ZTMNW, ZTBOT, ZCT,ZHML
 INTEGER                                        :: ILOOP, JLOOP, KI
@@ -168,13 +165,7 @@ IF(NVERB>=5) WRITE(ILUOUT,*) &
 !
 NSCOUNTD=NSCOUNTD+1
 !
-TZDTCUR=TDTCUR
-!
-CALL DATETIME_DISTANCE(TDTEXP,TZDTCUR,XSTRAJT(NSCOUNTD,1))
-XSDATIME(13,NSCOUNTD)= TZDTCUR%TDATE%YEAR
-XSDATIME(14,NSCOUNTD)= TZDTCUR%TDATE%MONTH
-XSDATIME(15,NSCOUNTD)= TZDTCUR%TDATE%DAY
-XSDATIME(16,NSCOUNTD)= TZDTCUR%TIME
+tpsdates(nscountd) = tdtcur
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90
index 5e76f58c51e5632ec4c68795e8c7457b3d025a16..b8f8aca936bebe8dffaef772ef67fd568ebc1f0d 100644
--- a/src/MNH/shallow_mf_pack.f90
+++ b/src/MNH/shallow_mf_pack.f90
@@ -372,12 +372,12 @@ END DO
 
 !!! 7. call to MesoNH budgets
 
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'MAFL_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'MAFL_BU_RRV')
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'MAFL_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'MAFL_BU_RV')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'MAFL_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'MAFL_BU_RRV')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'MAFL_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'MAFL_BU_RV')
 DO JSV=1,ISV 
- IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),12+JSV,'MAFL_BU_RSV')
+ IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'MAFL_BU_RSV')
 END DO                 
   
 !!! 8. Prints the fluxes in output file
diff --git a/src/MNH/slow_terms.f90 b/src/MNH/slow_terms.f90
index 3699b5af85b71d9d9c82ee26263c61e84a62f8c7..62ffffc269f1a2eb1b2d6fa19107cb8adcf3fa04 100644
--- a/src/MNH/slow_terms.f90
+++ b/src/MNH/slow_terms.f90
@@ -324,7 +324,7 @@ PRRS(:,:,:) = ZW1(:,:,:) / PTSTEP
 ! 
 !*       2.5     budget storage
 !
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SEDI_BU_RRR')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SEDI_BU_RRR')
 !
 !-------------------------------------------------------------------------------
 !
@@ -348,8 +348,8 @@ END WHERE
 !
 !*       3.2     budget storage
 !
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR')
 !
 !-------------------------------------------------------------------------------
 !
@@ -379,8 +379,8 @@ END IF
 !
 !*       4.2     budget storage
 !
-IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR')
+IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR')
 !
 !-------------------------------------------------------------------------------
 !
@@ -436,9 +436,9 @@ END WHERE
 !
 !*       5.8     budget storage
 !
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR')
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR')
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90
index 2fa1ab92cfafb6252f3ea28062feacf644b2420d..33f1fa4a9ffea8542d8f8dfa55fafb3393a80b49 100644
--- a/src/MNH/stationn.f90
+++ b/src/MNH/stationn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ##########################
@@ -10,18 +10,11 @@ MODULE MODI_STATION_n
 INTERFACE
 !
       SUBROUTINE STATION_n(PTSTEP,                               &
-                           TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                            PXHAT, PYHAT, PZ,                     &
                            PU, PV, PW, PTH, PR, PSV, PTKE,       &
                            PTS,PP ) 
 !
-USE MODD_TYPE_DATE
-!
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -45,9 +38,8 @@ END MODULE MODI_STATION_n
 !
 !     ########################################################
       SUBROUTINE STATION_n(PTSTEP,                           &
-                       TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR,   &
                        PXHAT, PYHAT, PZ,                     &
-                       PU, PV, PW, PTH, PR, PSV, PTKE,   &
+                       PU, PV, PW, PTH, PR, PSV, PTKE,       &
                        PTS, PP )
 !     ########################################################
 !
@@ -86,23 +78,24 @@ END MODULE MODI_STATION_n
 !!     C.Lac       04/2013 : Add I/J positioning                   
 !!     P.Wautelet 28/03/2018 : Replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
-!! --------------------------------------------------------------------------
-!       
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
+! --------------------------------------------------------------------------
+!
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_TYPE_DATE
-USE MODD_STATION_n
-USE MODD_SUB_STATION_n
-USE MODD_DIAG_IN_RUN
-USE MODD_PARAMETERS
+USE MODD_CONF
 USE MODD_CST
+USE MODD_DIAG_IN_RUN
 USE MODD_GRID
-USE MODD_TIME
-USE MODD_CONF
+USE MODD_PARAMETERS
+USE MODD_STATION_n
+USE MODD_SUB_STATION_n
+use modd_time,          only: tdtexp
+use modd_time_n,        only: tdtcur
+USE MODD_TYPE_DATE
 !
-USE MODE_DATETIME
 USE MODE_ll
 !
 USE MODI_WATER_SUM
@@ -116,10 +109,6 @@ IMPLICIT NONE
 !
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTEXP! experiment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTMOD! model start date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTSEG! segment date and time
-TYPE(DATE_TIME),          INTENT(IN)     :: TPDTCUR! current date and time
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
 REAL, DIMENSION(:),       INTENT(IN)     :: PYHAT  ! y coordinate
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
@@ -144,7 +133,6 @@ INTEGER :: IIE        !
 INTEGER :: IJE        !   
 INTEGER :: IIU        ! 
 INTEGER :: IJU        ! 
-REAL    :: ZTIMEEXP   ! 
 !
 REAL, DIMENSION(SIZE(PXHAT))        :: ZXHATM ! mass point coordinates
 REAL, DIMENSION(SIZE(PYHAT))        :: ZYHATM ! mass point coordinates
@@ -199,7 +187,6 @@ IF ( TSTATION%T_CUR == XUNDEF ) TSTATION%T_CUR = TSTATION%STEP - PTSTEP
 !
 TSTATION%T_CUR = TSTATION%T_CUR + PTSTEP
 !
-CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
 IF ( TSTATION%T_CUR >= TSTATION%STEP - 1.E-10 ) THEN
      GSTORE = .TRUE.
      TSTATION%T_CUR = TSTATION%T_CUR - TSTATION%STEP
@@ -210,24 +197,14 @@ ELSE
 END IF
 !
 IF (GSTORE) THEN
-  !
-     TSTATION%TIME(IN)      = (IN-1) * TSTATION%STEP + ZTIMEEXP
-     TSTATION%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR
-     TSTATION%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH
-     TSTATION%DATIME( 3,IN) = TPDTEXP%TDATE%DAY
-     TSTATION%DATIME( 4,IN) = TPDTEXP%TIME
-     TSTATION%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR
-     TSTATION%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH
-     TSTATION%DATIME( 7,IN) = TPDTSEG%TDATE%DAY
-     TSTATION%DATIME( 8,IN) = TPDTSEG%TIME
-     TSTATION%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR
-     TSTATION%DATIME(10,IN) = TPDTMOD%TDATE%MONTH
-     TSTATION%DATIME(11,IN) = TPDTMOD%TDATE%DAY
-     TSTATION%DATIME(12,IN) = TPDTMOD%TIME
-     TSTATION%DATIME(13,IN) = TPDTCUR%TDATE%YEAR
-     TSTATION%DATIME(14,IN) = TPDTCUR%TDATE%MONTH
-     TSTATION%DATIME(15,IN) = TPDTCUR%TDATE%DAY
-     TSTATION%DATIME(16,IN) = TPDTCUR%TIME
+#if 0
+  tstation%tpdates(in)%date%year  = tdtexp%date%year
+  tstation%tpdates(in)%date%month = tdtexp%date%month
+  tstation%tpdates(in)%date%day   = tdtexp%date%day
+  tstation%tpdates(in)%time       = tdtexp%time + ( in - 1 ) * tstation%step
+#else
+  tstation%tpdates(in) = tdtcur
+#endif
 END IF
 !
 !
@@ -339,10 +316,7 @@ END IF
 !            --------------
 !
 IF (GSTORE) THEN
-
-  IF (TSTATION%TIME(IN) /= XUNDEF) THEN     
-
- DO I=1,NUMBSTAT                  
+  DO I=1,NUMBSTAT
      !
      IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TSTATION%ERROR(I))) THEN
        IF (TSTATION%K(I)/= XUNDEF) THEN
@@ -498,8 +472,6 @@ IF (GSTORE) THEN
   !
  ENDDO
   !
- END IF
-  !
 END IF
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90
index ebb68aa19c3a01084b0c45b3032cf0bd5e053359..bb417e018c51c88157c4cd4c4d9d122e2f14ffd3 100644
--- a/src/MNH/tke_eps_sources.f90
+++ b/src/MNH/tke_eps_sources.f90
@@ -375,18 +375,18 @@ IF (LBUDGET_TKE) THEN
 ! add the dynamical production
 !
   PRTKES(:,:,:) = PRTKES(:,:,:) + PDP(:,:,:) * PRHODJ(:,:,:)
-  CALL BUDGET (PRTKES(:,:,:),5,'DP_BU_RTKE')
+  CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DP_BU_RTKE')
 !
 ! add the thermal production
 !
   PRTKES(:,:,:) = PRTKES(:,:,:) + PTP(:,:,:) * PRHODJ(:,:,:)
-  CALL BUDGET (PRTKES(:,:,:),5,'TP_BU_RTKE')
+  CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'TP_BU_RTKE')
 !
 ! add the dissipation
 !
 PRTKES(:,:,:) = PRTKES(:,:,:) - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
                 (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:)
-CALL BUDGET (PRTKES(:,:,:),5,'DISS_BU_RTKE')
+CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DISS_BU_RTKE')
 END IF 
 !
 !*       2.5  computes the final RTKE and stores the whole turbulent transport
@@ -395,7 +395,7 @@ PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  PRTKESM(:,:,:)
 !
 ! stores the whole turbulent transport
 !
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),5,'TR_BU_RTKE')
+IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'TR_BU_RTKE')
 !
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index f875c2e36bdd074f37656d2b0130be0f6760396c..96dbe560b3b6620a18e63716a24394f266eef498 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -1,4 +1,4 @@
-  !MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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.
@@ -923,34 +923,34 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI,               &
           PDYP,PTHP,PSIGS,PWTH,PWRC,PWSV                 )
 !
 
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VTURB_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VTURB_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'VTURB_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VTURB_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VTURB_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'VTURB_BU_RW')
 IF (LBUDGET_TH)  THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH')
+    CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),NBUDGET_TH,'VTURB_BU_RTH')
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH')
+    CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),NBUDGET_TH,'VTURB_BU_RTH')
   ELSE
-    CALL BUDGET (PRTHLS,4,'VTURB_BU_RTH')
+    CALL BUDGET (PRTHLS,NBUDGET_TH,'VTURB_BU_RTH')
   END IF
 END IF
 IF (LBUDGET_SV) THEN
   DO JSV = 1,NSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'VTURB_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_RV) THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1) THEN
-    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'VTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),NBUDGET_RV,'VTURB_BU_RRV')
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'VTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),NBUDGET_RV,'VTURB_BU_RRV')
   ELSE 
-    CALL BUDGET (PRRS(:,:,:,1),6,'VTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'VTURB_BU_RRV')
   END IF
 END IF  
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'VTURB_BU_RRC')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VTURB_BU_RRI')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'VTURB_BU_RRC')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'VTURB_BU_RRI')
 !
 !
 IF (HTURBDIM=='3DIM') THEN
@@ -972,35 +972,35 @@ IF (HTURBDIM=='3DIM') THEN
 END IF
 !
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'HTURB_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'HTURB_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,3,'HTURB_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'HTURB_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'HTURB_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'HTURB_BU_RW')
 IF (LBUDGET_TH)  THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
     CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) &
-                                                  ,4,'HTURB_BU_RTH')
+                                                  ,NBUDGET_TH,'HTURB_BU_RTH')
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH')
+    CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),NBUDGET_TH,'HTURB_BU_RTH')
   ELSE
-    CALL BUDGET (PRTHLS,4,'HTURB_BU_RTH')
+    CALL BUDGET (PRTHLS,NBUDGET_TH,'HTURB_BU_RTH')
   END IF
 END IF
 IF (LBUDGET_SV) THEN
   DO JSV = 1,NSV
-    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'HTURB_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'HTURB_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_RV) THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1) THEN
-    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'HTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),NBUDGET_RV,'HTURB_BU_RRV')
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'HTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),NBUDGET_RV,'HTURB_BU_RRV')
   ELSE 
-    CALL BUDGET (PRRS(:,:,:,1),6,'HTURB_BU_RRV')
+    CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'HTURB_BU_RRV')
   END IF
 END IF  
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'HTURB_BU_RRC')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'HTURB_BU_RRI')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'HTURB_BU_RRC')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'HTURB_BU_RRI')
 !
 !----------------------------------------------------------------------------
 !
@@ -1024,11 +1024,11 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,PLEM,ZLEPS,PDYP,ZTRH,     &
 IF (LBUDGET_TH)  THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
     CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) &
-                                                ,4,'DISSH_BU_RTH')
+                                                ,NBUDGET_TH,'DISSH_BU_RTH')
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET (PRTHLS+ZLOCPEXNM* PRRS(:,:,:,2),4,'DISSH_BU_RTH')
+    CALL BUDGET (PRTHLS+ZLOCPEXNM* PRRS(:,:,:,2),NBUDGET_TH,'DISSH_BU_RTH')
   ELSE
-    CALL BUDGET (PRTHLS,4,'DISSH_BU_RTH')
+    CALL BUDGET (PRTHLS,NBUDGET_TH,'DISSH_BU_RTH')
   END IF
 END IF
 !
@@ -1131,9 +1131,9 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN
   END WHERE
  END DO
 !
- IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV')
- IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC')
+ IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), NBUDGET_TH,'NETUR_BU_RTH')
+ IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'NETUR_BU_RRV')
+ IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'NETUR_BU_RRC')
 END IF
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/two_way.f90 b/src/MNH/two_way.f90
index 64f72579c3d267f8fee4317d90886a6a21d8b22d..ba399f93a870d44ac1d787362caff4a5756f707d 100644
--- a/src/MNH/two_way.f90
+++ b/src/MNH/two_way.f90
@@ -165,21 +165,21 @@ CALL GOTO_MODEL(KMI)
 !*       2.    BUDGET COMPUTATION
 !              ------------------
 !
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'NEST_BU_RU')
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'NEST_BU_RV')
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'NEST_BU_RW')
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'NEST_BU_RTH')
+IF (LBUDGET_U)  CALL BUDGET (PRUS,NBUDGET_U,'NEST_BU_RU')
+IF (LBUDGET_V)  CALL BUDGET (PRVS,NBUDGET_V,'NEST_BU_RV')
+IF (LBUDGET_W)  CALL BUDGET (PRWS,NBUDGET_W,'NEST_BU_RW')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'NEST_BU_RTH')
 DO JRR=1,KRR
-  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,JRR),6,'NEST_BU_RRV')
-  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,JRR),7,'NEST_BU_RRC')
-  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,JRR),8,'NEST_BU_RRR')
-  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,JRR),9,'NEST_BU_RRI')
-  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,JRR),10,'NEST_BU_RRS')
-  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,JRR),11,'NEST_BU_RRG')
-  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,JRR),12,'NEST_BU_RRH')
+  IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RV,'NEST_BU_RRV')
+  IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RC,'NEST_BU_RRC')
+  IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RR,'NEST_BU_RRR')
+  IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RI,'NEST_BU_RRI')
+  IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RS,'NEST_BU_RRS')
+  IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RG,'NEST_BU_RRG')
+  IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RH,'NEST_BU_RRH')
 ENDDO
 DO JSV=1,KSV
-  IF (LBUDGET_SV)              CALL BUDGET (PRSVS(:,:,:,JSV),12+JSV,'NEST_BU_RSV')
+  IF (LBUDGET_SV)              CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEST_BU_RSV')
 END DO
 !------------------------------------------------------------------------------
 !
diff --git a/src/MNH/viscosity.f90 b/src/MNH/viscosity.f90
index 3b348d47d3fcd02ab1cf41e01de0606a5498808f..54d2170c1a52324b5db3370b510595760f113a42 100644
--- a/src/MNH/viscosity.f90
+++ b/src/MNH/viscosity.f90
@@ -193,7 +193,7 @@ IF (OVISC_TH) THEN
 !
 END IF
 !
-IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'VISC_BU_RU')
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'VISC_BU_RTH')
 !
 !-------------------------------------------------------------------------------
 !
@@ -211,13 +211,13 @@ IF (OVISC_R .AND. (SIZE(PRT,1) > 0)) THEN
 !
 END IF
 !
-IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'VISC_BU_RRV')
-IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'VISC_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'VISC_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VISC_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'VISC_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'VISC_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'VISC_BU_RRH')
+IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'VISC_BU_RRV')
+IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'VISC_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'VISC_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'VISC_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'VISC_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'VISC_BU_RRG')
+IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'VISC_BU_RRH')
 !
 !-------------------------------------------------------------------------------
 !
@@ -236,7 +236,7 @@ END IF
 !
 IF (LBUDGET_SV) THEN
   DO  IK = 1, KSV
-    CALL BUDGET (PRSVS(:,:,:,IK), 12+IK, 'VISC_BU_RSV')
+    CALL BUDGET (PRSVS(:,:,:,IK), NBUDGET_SV1-1+IK, 'VISC_BU_RSV')
   END DO
 END IF
 !
@@ -334,8 +334,8 @@ ENDIF
   ENDIF
 END IF
 !
-IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VISC_BU_RU')
-IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VISC_BU_RV')
-IF (LBUDGET_W) CALL BUDGET (PRWS,2,'VISC_BU_RW')
+IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VISC_BU_RU')
+IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VISC_BU_RV')
+IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_V,'VISC_BU_RW')
 !
 END SUBROUTINE VISCOSITY
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 591807663ac0732ae61886606f3afb3b52c2d925..39f17c64e9220882468ff50c22dab88f199be883 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -63,9 +63,10 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !!     Oct 2016 : G.Delautier LIMA
 !!     August 2016 (M.Leriche) Add mass concentration of aerosol species
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!     P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array)
-!!
-!! --------------------------------------------------------------------------
+!  P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array)
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
+! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
@@ -173,7 +174,6 @@ TYPE(FLYER),        INTENT(IN)       :: TPFLYER
 !
 !*      0.2  declaration of local variables for diachro
 !
-REAL, DIMENSION(:,:),         ALLOCATABLE :: ZTRAJT ! localization of the
 REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJX ! temporal series
 REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJY ! in t,x,y and z.
 REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJZ !
@@ -231,23 +231,21 @@ IF (LORILAM) IPROC = IPROC + JPMODE*3
 IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (SIZE(TPFLYER%TSRAD)>0) IPROC = IPROC + 1
 !
-ALLOCATE (ZTRAJT(  SIZE(TPFLYER%TIME),1))
-ALLOCATE (ZTRAJX(1,SIZE(TPFLYER%TIME),1))
-ALLOCATE (ZTRAJY(1,SIZE(TPFLYER%TIME),1))
-ALLOCATE (ZTRAJZ(1,SIZE(TPFLYER%TIME),1))
-ALLOCATE (ZWORK6(1,1,1,SIZE(TPFLYER%TIME),1,IPROC))
+ALLOCATE (ZTRAJX(1,size(tpflyer%tpdates),1))
+ALLOCATE (ZTRAJY(1,size(tpflyer%tpdates),1))
+ALLOCATE (ZTRAJZ(1,size(tpflyer%tpdates),1))
+ALLOCATE (ZWORK6(1,1,1,size(tpflyer%tpdates),1,IPROC))
 ALLOCATE (YCOMMENT(IPROC))
 ALLOCATE (YTITLE  (IPROC))
 ALLOCATE (YUNIT   (IPROC))
 ALLOCATE (IGRID   (IPROC))
-ALLOCATE (ZWORKZ6(1,1,IKU,SIZE(TPFLYER%TIME),1,IPROCZ))
+ALLOCATE (ZWORKZ6(1,1,IKU,size(tpflyer%tpdates),1,IPROCZ))
 ALLOCATE (YCOMMENTZ(IPROCZ))
 ALLOCATE (YTITLEZ (IPROCZ))
 ALLOCATE (YUNITZ  (IPROCZ))
 ALLOCATE (IGRIDZ  (IPROCZ))
 
 !
-ZTRAJT  (:,1) = TPFLYER%TIME
 ZTRAJX(1,:,1) = TPFLYER%X
 ZTRAJY(1,:,1) = TPFLYER%Y
 ZTRAJZ(1,:,1) = TPFLYER%Z
@@ -347,7 +345,7 @@ END DO
 !
 !add cloud liquid water content in g/m3 to compare to measurements from FSSP
 !IF (.NOT.(ANY(TPFLYER%P(:) == 0.))) THEN
-ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME)))
+ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates)))
 IF (SIZE(TPFLYER%R,2) >1) THEN !cloud water is present
   ZRHO(1,1,:) = 0.
   DO JRR=1,SIZE(TPFLYER%R,2)
@@ -355,7 +353,7 @@ IF (SIZE(TPFLYER%R,2) >1) THEN !cloud water is present
   ENDDO
   ZRHO(1,1,:) = TPFLYER%TH(:) * ( 1. + XRV/XRD*TPFLYER%R(:,1) )  &
                                 / ( 1. + ZRHO(1,1,:)              )
-  DO JPT=1,SIZE(TPFLYER%TIME)
+  DO JPT=1,size(tpflyer%tpdates)
     IF (TPFLYER%P(JPT) == 0.) THEN
       ZRHO(1,1,JPT) = 0.
     ELSE
@@ -503,12 +501,12 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
   END DO
   IF ((LORILAM).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN
 
-    ALLOCATE (ZSV(1,1,SIZE(TPFLYER%TIME),NSV_AER)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TPFLYER%TIME),JPMODE)) 
-    ALLOCATE (ZRG(1,1,SIZE(TPFLYER%TIME),JPMODE)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TPFLYER%TIME),JPMODE)) 
-    ALLOCATE (ZPTOTA(1,1,SIZE(TPFLYER%TIME),NSP+NCARB+NSOA,JPMODE))    
+    ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_AER))
+    ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates)))
+    ALLOCATE (ZN0(1,1,size(tpflyer%tpdates),JPMODE))
+    ALLOCATE (ZRG(1,1,size(tpflyer%tpdates),JPMODE))
+    ALLOCATE (ZSIG(1,1,size(tpflyer%tpdates),JPMODE))
+    ALLOCATE (ZPTOTA(1,1,size(tpflyer%tpdates),NSP+NCARB+NSOA,JPMODE))
     ZSV(1,1,:,1:NSV_AER) = TPFLYER%SV(:,NSV_AERBEG:NSV_AEREND)
     IF (SIZE(TPFLYER%R,2) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -526,7 +524,7 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
     ZRG = 0.
     ZN0 = 0.
     ZPTOTA = 0.
-    DO JPT=1,SIZE(TPFLYER%TIME) ! prevent division by zero if ZSV = 0.
+    DO JPT=1,size(tpflyer%tpdates) ! prevent division by zero if ZSV = 0.
       IF (ALL(ZSV(1,1,JPT,:)/=0.)) THEN
         CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0, PCTOTA=ZPTOTA)
       ENDIF
@@ -668,11 +666,11 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
     ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
   END DO
   IF ((LDUST).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TPFLYER%TIME),NSV_DST)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) 
-    ALLOCATE (ZRG(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) 
+    ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_DST))
+    ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates)))
+    ALLOCATE (ZN0(1,1,size(tpflyer%tpdates),NMODE_DST))
+    ALLOCATE (ZRG(1,1,size(tpflyer%tpdates),NMODE_DST))
+    ALLOCATE (ZSIG(1,1,size(tpflyer%tpdates),NMODE_DST))
     ZSV(1,1,:,1:NSV_DST) = TPFLYER%SV(:,NSV_DSTBEG:NSV_DSTEND)
     IF (SIZE(TPFLYER%R,2) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -833,23 +831,22 @@ DO IK=1, IKU
 END DO
 !----------------------------------------------------------------------------
 !
-ALLOCATE (ZW6(1,1,1,SIZE(TPFLYER%TIME),1,JPROC))
+ALLOCATE (ZW6(1,1,1,size(tpflyer%tpdates),1,JPROC))
 ZW6  = ZWORK6(:,:,:,:,:,:JPROC)
 DEALLOCATE(ZWORK6)
-ALLOCATE (ZWZ6(1,1,IKU,SIZE(TPFLYER%TIME),1,JPROCZ))
+ALLOCATE (ZWZ6(1,1,IKU,size(tpflyer%tpdates),1,JPROCZ))
 ZWZ6 = ZWORKZ6(:,:,:,:,:,:JPROCZ)
 DEALLOCATE(ZWORKZ6)
 !
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"RSPL",IGRID, TPFLYER%DATIME, ZW6, &
-                   ZTRAJT,YTITLE,YUNIT,YCOMMENT,                               &
-                   PTRAJX=ZTRAJX, PTRAJY=ZTRAJY, PTRAJZ=ZTRAJZ                 )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "RSPL", IGRID, tpflyer%tpdates, &
+                    ZW6, YTITLE(:), YUNIT(:), YCOMMENT(:),                      &
+                    PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ           )
 !
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUPZ,"CART",IGRIDZ, TPFLYER%DATIME,  &
-                   ZWZ6,ZTRAJT,YTITLEZ,YUNITZ,YCOMMENTZ,                     &
-                   .TRUE.,.TRUE.,.FALSE.,                                    &
-                   KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU                     )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUPZ, "CART", IGRIDZ, tpflyer%tpdates, &
+                    ZWZ6, YTITLEZ(:), YUNITZ(:), YCOMMENTZ(:),                    &
+                    OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE.,                 &
+                    KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = IKU        )
 
-DEALLOCATE (ZTRAJT)
 DEALLOCATE (ZTRAJX)
 DEALLOCATE (ZTRAJY)
 DEALLOCATE (ZTRAJZ)
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index b92c33c1869c6396e61b74ba0e910349c77425e5..5f6ab614abb31fa60272858b172864075c98f021 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -3,38 +3,53 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!######################## 
- MODULE MODI_WRITE_BUDGET
-!########################
-!
-INTERFACE
-!
-      SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, &
-                              TPDTMOD,PTSTEP, KSV)
-!
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_TYPE_DATE
-!
-TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR      ! Current date and time
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD      ! Creation date and time
-REAL,               INTENT(IN) :: PTSTEP       ! time step
-INTEGER,            INTENT(IN) :: KSV          ! Number of Scalar Variables
-!
-END SUBROUTINE WRITE_BUDGET  
-!
-END INTERFACE
-!
-END MODULE MODI_WRITE_BUDGET
-!
-!
-!
-!     ############################################
-      SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, &
-                              TPDTMOD,PTSTEP, KSV)
-!     ############################################
+! Author:
+!  J. Nicolau (Meteo-France) 27/02/1995
+! Modifications:
+!  J. Stein    09/09/1996: add the writings in the diachronic file
+!  J.-P. Pinty 18/12/1996: clarify the coding
+!  J.-P. Pinty 18/03/1997: correction for the SVx
+!  V. Gouget M. Chong J.-P. Lafore 10/02/1998: add the BURHODJ, TSTEP and BULEN and writes in physical units
+!  V. Ducrocq  07/06/1999: //
+!  N. Asencio  18/06/1999: // budget with MASK case
+!                         delete ZTORE arrays no longer used, so delete
+!                         KIU,KJU,KKU arguments
+!                         the mask is written once with a FMWRIT call outside
+!                         write_diachro: its name is MASK_(value of NBUTSHIFT).MASK
+!                         MENU_DIACHRO must be called after FMWRIT to be read in
+!                         read_diachro.
+!                         NBUTSHIFT is incremented at the beginning of the routine
+!                         The dimensions of the XBUR.. arrays are : first one
+!                         is the dimension along K, second one is the time, the
+!                         third one is the number of the masks.
+!  G. Tanguy      10/2009: add ILENCH=LEN(YCOMMENT) after change of YCOMMENT
+!  J. Escobar  24/03/2014: misplaced deallocate in RSV budget
+!  C. Lac      11/09/2015: orrection due to FIT temporal scheme
+!  P. Wautelet 28/03/2018: Replace TEMPORAL_DIST by DATETIME_DISTANCE
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 14/10/2019: complete restructuration and deduplication of code
+!-----------------------------------------------------------------
+
+!#######################
+module mode_write_budget
+!#######################
+
+use mode_msg
+
+implicit none
+
+private
+
+public :: Write_budget
+
+contains
+
+!#########################################################
+subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv )
+!#########################################################
 !
-!!****  *WRITE_BUDGET* - routine to write a LFIFM file for the budget. 
+!!****  *WRITE_BUDGET* - routine to write a budget file
 !!                           
 !!
 !!    PURPOSE
@@ -58,8 +73,8 @@ END MODULE MODI_WRITE_BUDGET
 !!        IGRID = 3 for V grid point
 !!        IGRID = 4 for w grid point
 !!        IGRID = 0 for meaningless case
-!!            
-!!      
+!!
+!!
 !!
 !!    EXTERNAL
 !!    --------
@@ -68,9 +83,8 @@ END MODULE MODI_WRITE_BUDGET
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
 !!       Module MODD_BUDGET
-!!         
+!!
 !!         CBUTYPE     : Budget type (CART,MASK,SKIP or NONE)
-!!         CBURECORD   : name of output recording files for the budgets
 !!         CBUCOMMENT  : name of a process for a budget
 !!         NBUPROCNBR  : number of processes for each variable
 !!         NBUTIME     : number of the budget time intervals ('MASK' case)
@@ -88,1476 +102,550 @@ END MODULE MODI_WRITE_BUDGET
 !!         XBURRG      : budget array of the variable RRG
 !!         XBURRH      : budget array of the variable RRH
 !!         XBURSV      : budget array of the variable RSVx
-!!         
+!!
 !!
 !!    REFERENCE
 !!    ---------
 !!      Book2 of MESO-NH documentation (routine WRITE_BUDGET)
 !!
-!!
-!!    AUTHOR
-!!    ------
-!!	J. Nicolau       * Meteo France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     27/02/95
-!!      J. Stein     9/9/96     add the writings in the diachronic file 
-!!      J.-P. Pinty  18/12/96   clarify the coding
-!!      J.-P. Pinty  18/03/97   correction for the SVx
-!!      V. Gouget M. Chong J.-P. Lafore  add the BURHODJ, TSTEP and BULEN
-!!                   10/02/98              and writes in physical units
-!!      V. Ducrocq   07/06/99   //
-!!      N. Asencio   18/06/99  // budget with MASK case 
-!!                             delete ZTORE arrays no longer used, so delete
-!!                             KIU,KJU,KKU arguments
-!!                             the mask is written once with a FMWRIT call outside
-!!                             write_diachro: its name is MASK_(value of NBUTSHIFT).MASK
-!!                             MENU_DIACHRO must be called after FMWRIT to be read in
-!!                             read_diachro.
-!!                             NBUTSHIFT is incremented at the beginning of the routine
-!!                             The dimensions of the XBUR.. arrays are : first one
-!!                             is the dimension along K, second one is the time, the
-!!                             third one is the number of the masks.
-!!      October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after
-!!                                              change of YCOMMENT
-!!      24/03/2014  (J.Escobar ) miss placed deallocate in RSV budget
-!!      11/09/2015  (C.Lac)    Correction due to FIT temporal scheme
-!!      28/03/2018  (P.Wautelet) Replace TEMPORAL_DIST by DATETIME_DISTANCE
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    
-!              ------------
-USE MODD_BUDGET
-USE MODD_IO,             ONLY: TFILEDATA
-USE MODD_LUNIT_n,        ONLY: TLUOUT
-!
-USE MODE_DATETIME
-USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-use mode_menu_diachro,   only: MENU_DIACHRO
-USE MODE_TIME
-USE MODE_WRITE_DIACHRO,  only: WRITE_DIACHRO
-!
-USE MODI_END_CART_COMPRESS
-USE MODI_END_MASK_COMPRESS
-!
-!
-IMPLICIT NONE
-!  
-!  
-!*       0.1   Declarations of arguments :
-!
-TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTCUR      ! Current date and time
-TYPE (DATE_TIME),   INTENT(IN) :: TPDTMOD      ! Creation date and time
-REAL,               INTENT(IN) :: PTSTEP       ! time step
-INTEGER,            INTENT(IN) :: KSV          ! Number of Scalar Variables
-!  
-!*       0.2   Declarations of local variables :
-!
-CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM        ! Name of the article to be written
-INTEGER           :: JT,JPROC,JMASK
-!
-!
-REAL, ALLOCATABLE  , DIMENSION(:,:,:,:,:,:) :: ZWORK, ZWORKT,  ZWORKMASK  ! local array 
-            ! conformal to what is asked by the diachro format for the fields
-            ! and for the masks
-LOGICAL :: GNOCOMPRESS !  If  TRUE : no compress along x and y direction in the CART option
-REAL,    ALLOCATABLE              , DIMENSION(:)  :: ZCONVERT      ! unit conversion coefficient
-REAL,    ALLOCATABLE              , DIMENSION(:,:):: ZWORKTEMP     ! time
-INTEGER, ALLOCATABLE              , DIMENSION(:)  :: IWORKGRID     ! grid label
-CHARACTER (LEN=99),  ALLOCATABLE  , DIMENSION(:)  :: YBUCOMMENT    ! comment   
-CHARACTER (LEN=100), ALLOCATABLE  , DIMENSION(:)  :: YWORKCOMMENT  ! comment   
-CHARACTER (LEN=100), ALLOCATABLE  , DIMENSION(:)  :: YWORKUNIT     ! comment
-CHARACTER (LEN=9)                                 :: YGROUP_NAME   ! group name                                    
-CHARACTER(LEN=28)                                 :: YFILEDIA
-REAL,    ALLOCATABLE              , DIMENSION(:,:):: ZWORKDATIME   ! global time
-                                                                   !     info
-INTEGER                                           :: JSV           ! loop index
-                                                                   ! over the 
-                                                                   ! KSV  SVx
-INTEGER :: IP
-TYPE(TFIELDDATA) :: TZFIELD
-!
-!-------------------------------------------------------------------------------
-!
-YFILEDIA = TPDIAFILE%CNAME
-!
-!*	 1.     write TSTEP and BULEN
-!	        ---------------------
-!
-TZFIELD%CMNHNAME   = 'TSTEP'
-TZFIELD%CSTDNAME   = ''
-TZFIELD%CLONGNAME  = 'TSTEP'
-TZFIELD%CUNITS     = 's'
-TZFIELD%CDIR       = '--'
-TZFIELD%CCOMMENT   = 'Time step'
-TZFIELD%NGRID      = 0
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 0
-TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP)
-!
-TZFIELD%CMNHNAME   = 'BULEN'
-TZFIELD%CSTDNAME   = ''
-TZFIELD%CLONGNAME  = 'BULEN'
-TZFIELD%CUNITS     = 's'
-TZFIELD%CDIR       = '--'
-TZFIELD%CCOMMENT   = 'Time step'
-TZFIELD%NGRID      = 0
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 0
-TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN)
-!
-!*   1.1   initialize NBUTSHIFT
-!           ---------------------
-!
-NBUTSHIFT = NBUTSHIFT+1
-!
-!
-SELECT CASE (CBUTYPE)
-!
 !-------------------------------------------------------------------------------
-!
-!*	 2.     'CART' CASE
-!	        -----------
-!
-  CASE('CART','SKIP')
-    GNOCOMPRESS=(.NOT.LBU_ICP .AND. .NOT.LBU_JCP)
-!
-!*	 2.1    Initialization
-!
-    ALLOCATE(ZWORKTEMP(1,1))
-    ALLOCATE(ZWORKDATIME(16,1))
-!
-    ZWORKDATIME(1,1)=TDTEXP%TDATE%YEAR
-    ZWORKDATIME(2,1)=TDTEXP%TDATE%MONTH
-    ZWORKDATIME(3,1)=TDTEXP%TDATE%DAY
-    ZWORKDATIME(4,1)=TDTEXP%TIME
-    ZWORKDATIME(5,1)=TDTSEG%TDATE%YEAR
-    ZWORKDATIME(6,1)=TDTSEG%TDATE%MONTH
-    ZWORKDATIME(7,1)=TDTSEG%TDATE%DAY
-    ZWORKDATIME(8,1)=TDTSEG%TIME
-    ZWORKDATIME(9,1)=TPDTMOD%TDATE%YEAR
-    ZWORKDATIME(10,1)=TPDTMOD%TDATE%MONTH
-    ZWORKDATIME(11,1)=TPDTMOD%TDATE%DAY
-    ZWORKDATIME(12,1)=TPDTMOD%TIME
-!
-    CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1,1))
-!
-    ZWORKTEMP(1,1)=ZWORKTEMP(1,1)+(1.-NBUSTEP*0.5)*PTSTEP
-!
-    ZWORKDATIME(13,1)=TDTEXP%TDATE%YEAR
-    ZWORKDATIME(14,1)=TDTEXP%TDATE%MONTH
-    ZWORKDATIME(15,1)=TDTEXP%TDATE%DAY
-    ZWORKDATIME(16,1)=TDTEXP%TIME+ZWORKTEMP(1,1)
-!
-!*	 2.2    storage of the budgets array
-!
-!*	 2.2.1  RU budget
-!
-    IF (LBU_RU) THEN   
-!                         XBURHODJU and RU  budgets 
-!
-      IP=1
-! unit conversion for  RU budgets 
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RU
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURU(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-                                                    / XBURHODJU(:,:,:)
-        END DO
-      ELSE
-        ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjU
-        ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJU(:,:,:))
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RU
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURU(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)   &
-                                                    / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-!
-!  RU budgets storage
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along X axis'
-      IWORKGRID(:)       = 2
 
-      WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,  &
-                         ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :),  &
-                         YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-                         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-! XBURHODJU storage
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJU
-        ZWORK(:,:,:,1,1,1) = XBURHODJU(:,:,:)
-      END IF
-      ALLOCATE(YBUCOMMENT(1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      YBUCOMMENT(1)      = 'RhodJX'
-      YWORKUNIT(1)       = 'kg'
-      YWORKCOMMENT(1)    = 'RhodJ for momentum along X axis'
-      IWORKGRID(1)       = 2
-      WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT
-! 
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID,   &
-                         ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
-                         YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-                         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-    END IF
-!
-!*	 2.2.2  RV budget
-!
-    IF (LBU_RV) THEN 
-                       ! XBURHODJV and RV budgets
-!
-      IP=2
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RV
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURV(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-                                                    / XBURHODJV(:,:,:)
-        END DO
-      ELSE
-        ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjV
-        ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJV(:,:,:))
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RV
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURV(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-                                                    / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-!
-!  RV budgets storage
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-                                !
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along Y axis'
-      IWORKGRID(:)       = 3
-      WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT
-                                !
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!                     XBURHODJV storage
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJV
-        ZWORK(:,:,:,1,1,1) = XBURHODJV(:,:,:)
-      END IF
-      ALLOCATE(YBUCOMMENT(1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      YBUCOMMENT(1)      = 'RhodJY'
-      YWORKUNIT(1)       = 'kg'
-      YWORKCOMMENT(1)    = 'RhodJ for momentum along Y axis'
-      IWORKGRID(1)       = 3
-      WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT
-! 
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-      DEALLOCATE(ZWORK)
-    END IF
-!
-!
-!*	 2.2.3  RW budget
-!
-    IF (LBU_RW) THEN
-! 
-      IP=3
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RW
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURW(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-               / XBURHODJW(:,:,:)
-        END DO
-      ELSE
-        ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjW
-        ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJW(:,:,:))
-                                !
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RW
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURW(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-               / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-!
-!  RW budgets storage
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along Z axis'
-      IWORKGRID(:)       = 4
-      WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!                     XBURHODJW storage
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJW
-        ZWORK(:,:,:,1,1,1) = XBURHODJW(:,:,:)
-      END IF
-      ALLOCATE(YBUCOMMENT(1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      YBUCOMMENT(1)      = 'RhodJZ'
-      YWORKUNIT(1)       = 'kg'
-      YWORKCOMMENT(1)    = 'RhodJ for momentum along Z axis'
-      IWORKGRID(1)       = 4
-      WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT
-! 
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-      DEALLOCATE(ZWORK)
-    END IF
-  
-!
-!*	 2.2.3'  XBURHODJ storage for Scalars
-!
-    IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. &
-        LBU_RRI .OR. LBU_RRS  .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV      ) THEN
-!      
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJ
-        ZWORK(:,:,:,1,1,1) = XBURHODJ(:,:,:)
-      ELSE
-        ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RodhjW
-        ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJ(:,:,:))
-      END IF
-      ALLOCATE(YBUCOMMENT(1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      YBUCOMMENT(1)      = 'RhodJS'
-      YWORKUNIT(1)       = 'kg'
-      YWORKCOMMENT(1)    = 'RhodJ for Scalars variables'
-      IWORKGRID(1)       = 1
-      WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT,         &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      IF (GNOCOMPRESS) THEN
-        DEALLOCATE(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-      ELSE
-        DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-      ENDIF
-!
-    ENDIF
-!
-!*	 2.2.4  RTH budget
-!
-    IF (LBU_RTH) THEN
-!  RTH budgets storage
-      IP=4
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTH
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURTH(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-               / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTH
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURTH(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)   &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 'K s-1' ; YWORKUNIT(1:3) = 'K'
-      YWORKCOMMENT(:)    = 'Budget of potential temperature'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.5  RTKE budget
-!
-    IF (LBU_RTKE) THEN
-!  RTKE budgets storage
-      IP=5
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTKE
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURTKE(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTKE
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURTKE(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 'm2 s-3' ; YWORKUNIT(1:3) = 'm2 s-1'
-      YWORKCOMMENT(:)    = 'Budget of turbulent kinetic energy'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT 
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF   
-!
-!*	 2.2.6  RRV budget
-!
-    IF (LBU_RRV) THEN
-!  RRV budgets storage
-      IP=6
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTKE
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRV(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTKE
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRV(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of water vapor mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.7  RRC budget
-!
-    IF (LBU_RRC) THEN
-!  RRV budgets storage
-      IP=7
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRC
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRC(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRC
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRC(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of cloud water mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT 
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.8  RRR budget
-!
-    IF (LBU_RRR) THEN
-      IP=8
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRR
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRR(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRR
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRR(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of rain water mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.9  RRI budget
-!
-    IF (LBU_RRI) THEN
-      IP=9
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRI
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRI(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-               / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRI
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRI(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of cloud ice mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.10  RRS budget
-!
-    IF (LBU_RRS) THEN
-      IP=10
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRS
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRS(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRS
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRS(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of snow/aggregate mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.11  RRG budget
-!
-    IF (LBU_RRG) THEN
-      IP=11
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRG
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRG(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRG
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRG(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of graupel mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.12  RRH budget
-!
-    IF (LBU_RRH) THEN
-      IP=12
-      ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-      IF (GNOCOMPRESS) THEN
-        ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRH
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = XBURRH(:,:,:,JPROC) * ZCONVERT(JPROC)    &
-             / XBURHODJ(:,:,:)
-        END DO
-      ELSE
-!
-        ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRH
-!      
-        DO JPROC=1,NBUPROCNBR(IP)
-          ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRH(:,:,:,JPROC))
-          ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)  &
-             / ZWORK(:,:,:,1,1,1)
-        END DO
-      ENDIF
-      DEALLOCATE(ZCONVERT)
-! 
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-      YWORKUNIT(:)       = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of hail mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-           ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-           YWORKUNIT, YWORKCOMMENT,                           &
-           LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-    END IF
-!
-!*	 2.2.13  RSV budget
-!
-    IF (LBU_RSV) THEN
-      DO JSV = 1,KSV
-        IP=12+JSV
-        ALLOCATE(ZCONVERT(NBUPROCNBR(IP)))
-        ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-        ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-        ZCONVERT(4:NBUPROCNBR(IP)) = 1.
-! 
-        IF (GNOCOMPRESS) THEN
-          ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRH
-          DO JPROC=1,NBUPROCNBR(IP)
-            ZWORKT(:,:,:,1,1,JPROC) = XBURSV(:,:,:,JPROC,JSV) * ZCONVERT(JPROC)  &
-               / XBURHODJ(:,:,:)
-          END DO
-        ELSE
-!
-          ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRH
-!      
-          DO JPROC=1,NBUPROCNBR(IP)
-            ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURSV(:,:,:,JPROC,JSV))
-            ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC)    &
-               / ZWORK(:,:,:,1,1,1)
-          END DO
-         DEALLOCATE(ZWORK)
-        ENDIF
-        DEALLOCATE(ZCONVERT)
-!   
-        ALLOCATE(YWORKUNIT(NBUPROCNBR(IP)))
-        ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP)))
-        ALLOCATE(IWORKGRID(NBUPROCNBR(IP)))
-!
-        YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = '  '
-        DO JT = 1,NBUPROCNBR(IP)
-          WRITE(YWORKCOMMENT(JT),FMT="('Budget of SVx=',I3.3)") JSV
+  use modd_budget,         only: cbutype, nbumask, nbutshift, nbustep, nbuwrnb, xbulen, xbusurf,                                  &
+                                 lbu_icp, lbu_jcp,                                                                                &
+                                 lbu_ru, lbu_rv, lbu_rw, lbu_rth, lbu_rtke, lbu_rrv, lbu_rrc, lbu_rrr,                            &
+                                 lbu_rri, lbu_rrs, lbu_rrg, lbu_rrh, lbu_rsv,                                                     &
+                                 NBUDGET_RHO, NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE,                           &
+                                 NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
+                                 xburhodj, xburhodju, xburhodjv, xburhodjw,                                                       &
+                                 xburu, xburv, xburw, xburth, xburtke,                                                            &
+                                 xburrv, xburrc, xburrr, xburri, xburrs, xburrg, xburrh, xbursv
+  use modd_io,             only: tfiledata
+  use modd_lunit_n,        only: tluout
+  use modd_parameters,     only: NMNHNAMELGTMAX
+  use modd_type_date,      only: date_time
+
+  use mode_datetime,       only: datetime_distance
+  use mode_field,          only: tfielddata, TYPEREAL
+  use mode_io_field_write, only: IO_Field_write
+  use mode_menu_diachro,   only: Menu_diachro
+  use mode_time,           only: tdtexp
+
+  implicit none
+
+  type(tfiledata), intent(in) :: tpdiafile    ! file to write
+  type(date_time), intent(in) :: tpdtcur      ! current date and time
+  real,            intent(in) :: ptstep       ! time step
+  integer,         intent(in) :: ksv          ! number of scalar variables
+
+  character(len=NMNHNAMELGTMAX)                        :: yrecfm        ! name of the article to be written
+  integer                                              :: jt, jmask
+  integer                                              :: jsv           ! loop index over the ksv svx
+  logical                                              :: gnocompress   ! true: no compression along x and y direction (cart option)
+  real,            dimension(:),           allocatable :: zworktemp
+  real,            dimension(:,:,:,:,:,:), allocatable :: zrhodjn, zworkmask
+  type(date_time), dimension(:),           allocatable :: tzdates
+  type(tfielddata) :: tzfield
+  !
+  !-------------------------------------------------------------------------------
+  !
+  gnocompress = .true.
+  !
+  !* Write TSTEP and BULEN
+  !  ---------------------
+  !
+  TZFIELD%CMNHNAME   = 'TSTEP'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'TSTEP'
+  TZFIELD%CUNITS     = 's'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Time step'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 0
+  TZFIELD%LTIMEDEP   = .FALSE.
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP)
+  !
+  TZFIELD%CMNHNAME   = 'BULEN'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'BULEN'
+  TZFIELD%CUNITS     = 's'
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Time step'
+  TZFIELD%NGRID      = 0
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 0
+  TZFIELD%LTIMEDEP   = .FALSE.
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN)
+  !
+  ! Initialize NBUTSHIFT
+  NBUTSHIFT = NBUTSHIFT+1
+  !
+  !
+  SELECT CASE (CBUTYPE)
+  !
+  !-------------------------------------------------------------------------------
+  !
+  !* 2.     'CART' CASE
+  !         -----------
+  !
+    CASE('CART','SKIP')
+      GNOCOMPRESS=(.NOT.LBU_ICP .AND. .NOT.LBU_JCP)
+  !
+  !* 2.1    Initialization
+  !
+      ALLOCATE( ZWORKTEMP( 1 ) )
+      allocate( tzdates( 1 ) )
+  !
+      !Compute time at the middle of the temporally-averaged budget timestep
+      !This time is computed from the beginning of the experiment
+      CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1))
+  !
+      ZWORKTEMP(1)=ZWORKTEMP(1)+(1.-NBUSTEP*0.5)*PTSTEP
+  !
+      tzdates(1)%tdate%year  = tdtexp%tdate%year
+      tzdates(1)%tdate%month = tdtexp%tdate%month
+      tzdates(1)%tdate%day   = tdtexp%tdate%day
+      tzdates(1)%time        = tdtexp%time + zworktemp(1)
+
+      DEALLOCATE ( ZWORKTEMP )
+  !
+  !-------------------------------------------------------------------------------
+  !
+  !* 3.     'MASK' CASE
+  !         -----------
+  !
+    CASE('MASK')
+      ALLOCATE(ZWORKTEMP(NBUWRNB))
+      allocate( tzdates( NBUWRNB ) )
+      ALLOCATE(ZWORKMASK(SIZE(XBUSURF,1),SIZE(XBUSURF,2),1,NBUWRNB,NBUMASK,1))
+  !
+  ! local array
+      DO JMASK=1,NBUMASK
+        DO JT=1,NBUWRNB
+          ZWORKMASK(:,:,1,JT,JMASK,1) = XBUSURF(:,:,JMASK,JT)
         END DO
-        IWORKGRID(:)       = 1
-        WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT
-!
-        CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, &
-             ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :),   &
-             YWORKUNIT, YWORKCOMMENT,                           &
-             LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-             NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH           )
-        DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
       END DO
-    END IF
-!
-    IF (ALLOCATED(ZWORK)) DEALLOCATE(ZWORK)
-    DEALLOCATE (ZWORKTEMP, ZWORKDATIME)
-!-------------------------------------------------------------------------------
-!
-!*	 3.     'MASK' CASE
-!	        -----------
-!
-  CASE('MASK')
-    ALLOCATE(ZWORKTEMP(NBUWRNB,1))
-    ALLOCATE(ZWORKDATIME(16,NBUWRNB))
-    ALLOCATE(ZWORKMASK(SIZE(XBUSURF,1),SIZE(XBUSURF,2),1,NBUWRNB,NBUMASK,1))
-!
-! local array
-    DO JMASK=1,NBUMASK
-      DO JT=1,NBUWRNB
-        ZWORKMASK(:,:,1,JT,JMASK,1) = XBUSURF(:,:,JMASK,JT)
+  !
+      CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB))
+  !
+      ZWORKTEMP(NBUWRNB)=ZWORKTEMP(NBUWRNB)+(1.-NBUSTEP*0.5)*PTSTEP
+  !
+      tzdates(NBUWRNB )%tdate%year  = tdtexp%tdate%year
+      tzdates(NBUWRNB )%tdate%month = tdtexp%tdate%month
+      tzdates(NBUWRNB )%tdate%day   = tdtexp%tdate%day
+      tzdates(NBUWRNB )%time        = tdtexp%time + zworktemp(NBUWRNB )
+      DO JT=1,NBUWRNB-1
+        ZWORKTEMP(JT) = ZWORKTEMP(NBUWRNB)-NBUSTEP*PTSTEP*(NBUWRNB-JT)
+        tzdates(jt )%tdate%year  = tdtexp%tdate%year
+        tzdates(jt )%tdate%month = tdtexp%tdate%month
+        tzdates(jt )%tdate%day   = tdtexp%tdate%day
+        tzdates(jt )%time        = tdtexp%time + zworktemp(jt )
       END DO
-    END DO
-!
-    ZWORKDATIME(1,:)=TDTEXP%TDATE%YEAR
-    ZWORKDATIME(2,:)=TDTEXP%TDATE%MONTH
-    ZWORKDATIME(3,:)=TDTEXP%TDATE%DAY
-    ZWORKDATIME(4,:)=TDTEXP%TIME
-    ZWORKDATIME(5,:)=TDTSEG%TDATE%YEAR
-    ZWORKDATIME(6,:)=TDTSEG%TDATE%MONTH
-    ZWORKDATIME(7,:)=TDTSEG%TDATE%DAY
-    ZWORKDATIME(8,:)=TDTSEG%TIME
-    ZWORKDATIME(9,:)=TPDTMOD%TDATE%YEAR
-    ZWORKDATIME(10,:)=TPDTMOD%TDATE%MONTH
-    ZWORKDATIME(11,:)=TPDTMOD%TDATE%DAY
-    ZWORKDATIME(12,:)=TPDTMOD%TIME
-!
-    CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB,1))
-!
-    ZWORKTEMP(NBUWRNB,1)=ZWORKTEMP(NBUWRNB,1)+(1.-NBUSTEP*0.5)*PTSTEP
-!
-    ZWORKDATIME(13,NBUWRNB)=TDTEXP%TDATE%YEAR
-    ZWORKDATIME(14,NBUWRNB)=TDTEXP%TDATE%MONTH
-    ZWORKDATIME(15,NBUWRNB)=TDTEXP%TDATE%DAY
-    ZWORKDATIME(16,NBUWRNB)=TDTEXP%TIME+ZWORKTEMP(NBUWRNB,1)
-    DO JT=1,NBUWRNB-1
-      ZWORKTEMP(JT,1) = ZWORKTEMP(NBUWRNB,1)-NBUSTEP*PTSTEP*(NBUWRNB-JT)
-      ZWORKDATIME(13,JT)=TDTEXP%TDATE%YEAR
-      ZWORKDATIME(14,JT)=TDTEXP%TDATE%MONTH
-      ZWORKDATIME(15,JT)=TDTEXP%TDATE%DAY
-      ZWORKDATIME(16,JT)=TDTEXP%TIME  + ZWORKTEMP(JT,1)
-    END DO
-!
-!*     3.1    storage of the masks  array
-!
-        WRITE(TZFIELD%CMNHNAME,FMT="('MASK_',I4.4,'.MASK')") NBUTSHIFT
-        TZFIELD%CSTDNAME   = ''
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CUNITS     = ''
-        TZFIELD%CDIR       = 'XY'
-        WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT
-        TZFIELD%NGRID      = 1
-        TZFIELD%NTYPE      = TYPEREAL
-        TZFIELD%NDIMS      = 6
-        TZFIELD%LTIMEDEP   = .FALSE.
-        CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
-        WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT
-        CALL MENU_DIACHRO(TPDIAFILE,YRECFM)
-        DEALLOCATE(ZWORKMASK)
-!
-!*	 3.2    storage of the budgets array
-!
-!*	 3.2.1  RU budget
-!
+
+      DEALLOCATE( ZWORKTEMP )
+  !
+  !*     3.1    storage of the masks  array
+  !
+      WRITE(TZFIELD%CMNHNAME,FMT="('MASK_',I4.4,'.MASK')" ) nbutshift
+      TZFIELD%CSTDNAME   = ''
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = ''
+      TZFIELD%CDIR       = 'XY'
+      WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)" ) nbutshift
+      TZFIELD%NGRID      = 1
+      TZFIELD%NTYPE      = TYPEREAL
+      TZFIELD%NDIMS      = 6
+      TZFIELD%LTIMEDEP   = .FALSE.
+      CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
+      WRITE(YRECFM,FMT="('MASK_',I4.4)" ) nbutshift
+      CALL MENU_DIACHRO(TPDIAFILE,YRECFM)
+      DEALLOCATE(ZWORKMASK)
+  !
+  END SELECT
+  !
+  if ( cbutype == 'CART' .or. cbutype == 'SKIP' .or. cbutype == 'MASK' ) then
+  !
+  !* Storage of the budgets array
+  !
+  !* XBURHODJU and RU budgets
+  !
     IF (LBU_RU) THEN
-                       ! XBURHODJU storage
-!
-      ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      ZWORK(1,1,:,:,:,1) = END_MASK_COMPRESS(XBURHODJU(:,:,:))
-      WHERE  (ZWORK(1,1,:,:,:,1) <= 0.)
-          ZWORK(1,1,:,:,:,1)=-999.
-      END WHERE
-      YWORKUNIT(:)       = 'kg'
-      YWORKCOMMENT(:)    = 'RhodJ for momentum along X axis'
-      IWORKGRID(:)       = 2
-      WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                         ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
-                         YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-                         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-!                 unit conversion of RU budgets and storage
-!                 -----------------------------------------
-!
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(1)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(1)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(1)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(1)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(1)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       =  PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(1)) = 1.
-      DO JPROC=1,NBUPROCNBR(1)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURU(:,:,:,JPROC)) &
-                               * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT, ZWORK)
-      
-!
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along X axis'
-      IWORKGRID(:)       = 2
-      WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                         ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :),   &
-                         YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget_rho( tpdiafile, tzdates, xburhodju, NBUDGET_U, gnocompress, zrhodjn )
+      call Store_one_budget( tpdiafile, tzdates, xburu, zrhodjn, NBUDGET_U, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.2  RV budget
-!
+  !
+  !* XBURHODJV and RV budgets
+  !
     IF (LBU_RV) THEN
-                       ! XBURHODJV storage
-!
-      ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      ZWORK(1,1,:,:,:,1)= END_MASK_COMPRESS( XBURHODJV(:,:,:))
-      WHERE ( ZWORK(1,1,:,:,:,1) <= 0.)
-        ZWORK(1,1,:,:,:,1)=-999.
-      END WHERE
-      YWORKUNIT(:)       = 'kg'
-      YWORKCOMMENT(:)    = 'RhodJ for momentum along Y axis'
-      IWORKGRID(:)       = 3
-      WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
-	       		 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-!                 unit conversion of RU budgets and storage
-!
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(2)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(2)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(2)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(2)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(2)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(2)) = 1.
-      DO JPROC=1,NBUPROCNBR(2)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURV  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) 
-      END DO
-      DEALLOCATE(ZCONVERT, ZWORK)
-!
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along Y axis'
-      IWORKGRID(:)       = 3
-      WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                         ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(2, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget_rho( tpdiafile, tzdates, xburhodjv, NBUDGET_V, gnocompress, zrhodjn )
+      call Store_one_budget( tpdiafile, tzdates, xburv, zrhodjn, NBUDGET_V, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.3  RW budget
-!
+  !
+  !* XBURHODJW and RW budgets
+  !
     IF (LBU_RW) THEN
-                       ! XBURHODJW storage
-!
-      ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-      ZWORK(1,1,:,:,:,1)=END_MASK_COMPRESS(XBURHODJW(:,:,:))
-      WHERE (ZWORK(1,1,:,:,:,1) <= 0.)
-        ZWORK(1,1,:,:,:,1)=-999.
-      END WHERE
-      YWORKUNIT(:)       = 'kg'
-      YWORKCOMMENT(:)    = 'RhodJ for momentum along Z axis'
-      IWORKGRID(:)       = 4
-      WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-!
-!                 unit conversion of RU budgets and storage
-!
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(3)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(3)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(3)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(3)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(3)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(3)) = 1.
-      DO JPROC=1,NBUPROCNBR(3)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURW (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT, ZWORK)
-!
-      YWORKUNIT(:)       = 'm s-2'; YWORKUNIT(1:3) = 'm s-1'
-      YWORKCOMMENT(:)    = 'Budget of momentum along Z axis'
-      IWORKGRID(:)       = 4
-      WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(3, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget_rho( tpdiafile, tzdates, xburhodjw, NBUDGET_W, gnocompress, zrhodjn )
+      call Store_one_budget( tpdiafile, tzdates, xburw, zrhodjn, NBUDGET_W, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.3'  XBURHODJ storage for Scalars
-!
+  !
+  !* XBURHODJ storage for Scalars
+  !
     IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. &
         LBU_RRI .OR. LBU_RRS  .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV      ) THEN
-!
-      ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1))
-      ALLOCATE(YWORKUNIT(1))
-      ALLOCATE(YWORKCOMMENT(1))
-      ALLOCATE(IWORKGRID(1))
-!
-        ZWORK(1,1,:,:,:,1) = END_MASK_COMPRESS(XBURHODJ(:,:,:))
-        WHERE (ZWORK(1,1,:,:,:,1) <= 0.)
-         ZWORK(1,1,:,:,:,1)=-999.
-        END WHERE
-      YWORKUNIT(:)       = 'kg'
-      YWORKCOMMENT(:)    = 'RhodJ for Scalars'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-    END IF
-!
-!*	 3.2.4  RTH budget
-!
+      call Store_one_budget_rho( tpdiafile, tzdates, xburhodj, NBUDGET_RHO, gnocompress, zrhodjn )
+    ENDIF
+  !
+  !* RTH budget
+  !
     IF (LBU_RTH) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(4)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(4)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(4)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(4)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(4)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(4)) = 1.
-      DO JPROC=1,NBUPROCNBR(4)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURTH  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 'K s-1' ; YWORKUNIT(1:3) = 'K'
-      YWORKCOMMENT(:)    = 'Budget of potential temperature'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(4, :),   &
-	         	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburth, zrhodjn, NBUDGET_TH, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.5  RTKE budget
-!
+  !
+  !* RTKE budget
+  !
     IF (LBU_RTKE) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(5)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(5)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(5)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(5)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(5)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(5)) = 1.
-      DO JPROC=1,NBUPROCNBR(5)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURTKE (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 'm2 s-3' ; YWORKUNIT(1:3) = 'm2 s-2'
-      YWORKCOMMENT(:)    = 'Budget of turbulent kinetic energy'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(5, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
-    END IF   
-!
-!*	 3.2.6  RRV budget
-!
+      call Store_one_budget( tpdiafile, tzdates, xburtke, zrhodjn, NBUDGET_TKE, gnocompress, ptstep )
+    END IF
+  !
+  !* RRV budget
+  !
     IF (LBU_RRV) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(6)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(6)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(6)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(6)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(6)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(6)) = 1.
-      DO JPROC=1,NBUPROCNBR(6)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRV  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of water vapor mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(6, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrv, zrhodjn, NBUDGET_RV, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.7  RRC budget
-!
+  !
+  !* RRC budget
+  !
     IF (LBU_RRC) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(7)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(7)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(7)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(7)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(7)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(7)) = 1.
-      DO JPROC=1,NBUPROCNBR(7)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRC  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of cloud water mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(7, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrc, zrhodjn, NBUDGET_RC, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.8  RRR budget
-!
+  !
+  !* RRR budget
+  !
     IF (LBU_RRR) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(8)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(8)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(8)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(8)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(8)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(8)) = 1.
-      DO JPROC=1,NBUPROCNBR(8)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRR  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of rain water mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(8, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrr, zrhodjn, NBUDGET_RR, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.9  RRI budget
-!
+  !
+  !* RRI budget
+  !
     IF (LBU_RRI) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(9)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(9)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(9)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(9)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(9)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(9)) = 1.
-      DO JPROC=1,NBUPROCNBR(9)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRI  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of cloud ice mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(9, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburri, zrhodjn, NBUDGET_RI, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.10  RRS budget
-!
+  !
+  !* RRS budget
+  !
     IF (LBU_RRS) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(10)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(10)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(10)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(10)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(10)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(10)) = 1.
-      DO JPROC=1,NBUPROCNBR(10)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRS  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of snow/aggregate mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(10, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrs, zrhodjn, NBUDGET_RS, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.11  RRG budget
-!
+  !
+  !* RRG budget
+  !
     IF (LBU_RRG) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(11)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(11)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(11)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(11)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(11)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(11)) = 1.
-      DO JPROC=1,NBUPROCNBR(11)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRG  (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT )
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of graupel mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(11, :),   &
-	         	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrg, zrhodjn, NBUDGET_RG, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.12  RRH budget
-!
+  !
+  !* RRH budget
+  !
     IF (LBU_RRH) THEN
-      ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(12)))
-      ALLOCATE(YWORKUNIT(NBUPROCNBR(12)))
-      ALLOCATE(YWORKCOMMENT(NBUPROCNBR(12)))
-      ALLOCATE(IWORKGRID(NBUPROCNBR(12)))
-!
-      ALLOCATE(ZCONVERT(NBUPROCNBR(12)))
-      ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-      ZCONVERT(4:NBUPROCNBR(12)) = 1.
-      DO JPROC=1,NBUPROCNBR(12)
-        ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRH (:,:,:,JPROC)) &
-                         * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-      END DO
-      DEALLOCATE(ZCONVERT)
-!
-      YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = 'kg kg-1'
-      YWORKCOMMENT(:)    = 'Budget of hail mixing ratio'
-      IWORKGRID(:)       = 1
-      WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT
-!
-      CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, &
-                	 ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12, :),   &
-	        	 YWORKUNIT, YWORKCOMMENT,                           &
-                         LBU_ICP, LBU_JCP, LBU_KCP,                         & 
-		         NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-      DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+      call Store_one_budget( tpdiafile, tzdates, xburrh, zrhodjn, NBUDGET_RH, gnocompress, ptstep )
     END IF
-!
-!*	 3.2.13  RSV budget
-!
+  !
+  !* RSV budgets
+  !
     IF (LBU_RSV) THEN
       DO JSV = 1,KSV
-        ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(12+JSV)))
-        ALLOCATE(YWORKUNIT(NBUPROCNBR(12+JSV)))
-        ALLOCATE(YWORKCOMMENT(NBUPROCNBR(12+JSV)))
-        ALLOCATE(IWORKGRID(NBUPROCNBR(12+JSV)))
-!
-        ALLOCATE(ZCONVERT(NBUPROCNBR(12+JSV)))
-        ZCONVERT(1:2)     = PTSTEP * REAL(NBUSTEP)
-        ZCONVERT(3)       = PTSTEP * REAL(NBUSTEP)
-        ZCONVERT(4:NBUPROCNBR(12+JSV)) = 1.
-        DO JPROC=1,NBUPROCNBR(12+JSV)
-          ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURSV  (:,:,:,JPROC,JSV)) &
-                           * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1)
-        END DO
-        DEALLOCATE(ZCONVERT)
-!
-        YWORKUNIT(:)       = 's-1' ;  YWORKUNIT(1:3) = '  '
-        DO JT = 1,NBUPROCNBR(12+JSV)
-          WRITE(YWORKCOMMENT(JT),FMT="('Budget of SVx=',I3.3)") JSV
-        END DO
-        IWORKGRID(:)       = 1
-        WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT
-!
-        CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,  &
-                  	   ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12+JSV,:),&
-		           YWORKUNIT, YWORKCOMMENT,                            &
-                           LBU_ICP, LBU_JCP, LBU_KCP,                          &
-		           NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH )
-        DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
+        call Store_one_budget( tpdiafile, tzdates, xbursv(:, :, :, :, jsv ), zrhodjn, &
+                               NBUDGET_SV1 + jsv - 1, gnocompress, ptstep )
       END DO
     END IF
+  end if
+
+end subroutine Write_budget
+
+
+subroutine Store_one_budget_rho( tpdiafile, tpdates, pburhodj, kp, knocompress, prhodjn )
+  use modd_budget,            only: cbutype,                                                      &
+                                    lbu_icp, lbu_jcp, lbu_kcp,                                    &
+                                    nbuil, nbuih, nbujl, nbujh, nbukl, nbukh,                     &
+                                    nbuimax, nbuimax_ll, nbujmax, nbujmax_ll, nbukmax, nbutshift, &
+                                    nbumask, nbuwrnb,                                             &
+                                    NBUDGET_RHO, NBUDGET_U, NBUDGET_V, NBUDGET_W
+  use modd_io,                only: tfiledata
+  use modd_lunit_n,           only: tluout
+  use modd_parameters,        only: XNEGUNDEF
+  use modd_type_date,         only: date_time
+
+  use mode_write_diachro,     only: Write_diachro
+
+  use modi_end_cart_compress, only: End_cart_compress
+  use modi_end_mask_compress, only: End_mask_compress
+
+  implicit none
+
+  type(tfiledata),                                      intent(in)  :: tpdiafile   ! file to write
+  type(date_time), dimension(:),                        intent(in)  :: tpdates
+  real,            dimension(:,:,:),                    intent(in)  :: pburhodj    ! budget arrays for rhodj
+  integer,                                              intent(in)  :: kp          ! reference number of budget
+  logical,                                              intent(in)  :: knocompress ! compression for the cart option
+  real,            dimension(:,:,:,:,:,:), allocatable, intent(out) :: prhodjn
+
+  character(len=4)                               :: ybutype
+  character(len=9)                               :: ygroup_name   ! group name
+  character(len=99),  dimension(:), allocatable  :: ybucomment    ! comment
+  character(len=100), dimension(:), allocatable  :: yworkcomment  ! comment
+  character(len=100), dimension(:), allocatable  :: yworkunit     ! comment
+  integer,            dimension(:), allocatable  :: iworkgrid     ! grid label
+
+  if ( allocated( prhodjn ) ) deallocate( prhodjn )
+
+  ! pburhodj storage
+  select case ( cbutype )
+    case( 'CART', 'SKIP' )
+      ybutype = 'CART'
+        if ( knocompress ) then
+          allocate( prhodjn(nbuimax, nbujmax, nbukmax, 1, 1, 1 ) ) ! local budget of RHODJU
+          prhodjn(:, :, :, 1, 1, 1 ) = pburhodj(:, :, : )
+        else
+          allocate( prhodjn(nbuimax_ll, nbujmax_ll, nbukmax, 1, 1, 1 ) ) ! global budget of RhodjU
+          prhodjn(:,:,:,1,1,1)=end_cart_compress(pburhodj(:,:,:))
+        end if
+    case('MASK')
+      ybutype = 'MASK'
+        allocate( prhodjn(1, 1, nbukmax, nbuwrnb, nbumask, 1 ) )
+        prhodjn(1, 1, :, :, :, 1 ) = End_mask_compress( pburhodj(:, :, : ) )
+        where  ( prhodjn(1, 1, :, :, :, 1) <= 0. )
+            prhodjn(1, 1, :, :, :, 1 ) = XNEGUNDEF
+        end where
+
+    case default
+      call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget_rho', 'unknown CBUTYPE' )
+  end select
+
+  allocate( ybucomment(1 ) )
+  allocate( yworkunit(1 ) )
+  allocate( yworkcomment(1 ) )
+  allocate( iworkgrid(1 ) )
+
+  select case( kp )
+    case( NBUDGET_RHO )
+      ybucomment(1)      = 'RhodJS'
+      yworkunit(1)       = 'kg'
+      yworkcomment(1)    = 'RhodJ for Scalars variables'
+      iworkgrid(1)       = 1
+      write( ygroup_name, fmt = "('RJS__',I4.4)" ) nbutshift
+
+    case( NBUDGET_U )
+      ybucomment(1)      = 'RhodJX'
+      yworkunit(1)       = 'kg'
+      yworkcomment(1)    = 'RhodJ for momentum along X axis'
+      iworkgrid(1)       = 2
+      write( ygroup_name, fmt = "('RJX__',I4.4)" ) nbutshift
+
+    case( NBUDGET_V )
+      ybucomment(1)      = 'RhodJY'
+      yworkunit(1)       = 'kg'
+      yworkcomment(1)    = 'RhodJ for momentum along Y axis'
+      iworkgrid(1)       = 3
+      write( ygroup_name, fmt = "('RJX__',I4.4)" ) nbutshift
+
+    case( NBUDGET_W )
+      ybucomment(1)      = 'RhodJZ'
+      yworkunit(1)       = 'kg'
+      yworkcomment(1)    = 'RhodJ for momentum along Z axis'
+      iworkgrid(1)       = 4
+      write( ygroup_name, fmt = "('RJZ__',I4.4)" ) nbutshift
+
+    case default
+      call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget_rho', 'unknown budget type' )
+  end select
+
+  call Write_diachro( tpdiafile, tluout, ygroup_name, ybutype, iworkgrid,                          &
+                      tpdates, prhodjn, ybucomment,                                                &
+                      yworkunit, yworkcomment,                                                     &
+                      oicp = lbu_icp, ojcp = lbu_jcp, okcp = lbu_kcp,                              &
+                      kil = nbuil, kih = nbuih, kjl = nbujl, kjh = nbujh, kkl = nbukl, kkh = nbukh )
+  deallocate( ybucomment, yworkunit, yworkcomment, iworkgrid )
+
+end subroutine Store_one_budget_rho
+
+
+subroutine Store_one_budget( tpdiafile, tpdates, pbudarray, prhodjn, kp, knocompress, ptstep )
+  use modd_budget,            only: cbucomment, cbutype,                                                                          &
+                                    lbu_icp, lbu_jcp, lbu_kcp,                                                                    &
+                                    nbuil, nbuih, nbujl, nbujh, nbukl, nbukh,                                                     &
+                                    nbuimax, nbuimax_ll, nbujmax, nbujmax_ll, nbukmax, nbuprocnbr, nbustep, nbutshift,            &
+                                    nbumask, nbuwrnb,                                                                             &
+                                    NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, &
+                                    NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
+  use modd_io,                only: tfiledata
+  use modd_lunit_n,           only: tluout
+  use modd_type_date,         only: date_time
+
+  use mode_write_diachro,     only: Write_diachro
+
+  use modi_end_cart_compress, only: End_cart_compress
+  use modi_end_mask_compress, only: End_mask_compress
+
+  implicit none
+
+  type(tfiledata),                                      intent(in) :: tpdiafile   ! file to write
+  type(date_time), dimension(:),                        intent(in) :: tpdates
+  real,            dimension(:,:,:,:),                  intent(in) :: pbudarray   ! budget array
+  real,            dimension(:,:,:,:,:,:), allocatable, intent(in) :: prhodjn
+  integer,                                              intent(in) :: kp          ! reference number of budget
+  logical,                                              intent(in) :: knocompress ! compression for the cart option
+  real,                                                 intent(in) :: ptstep      ! time step
+
+  character(len=4)                                        :: ybutype
+  character(len=9)                                        :: ygroup_name
+  character(len=100), dimension(:),           allocatable :: yworkcomment
+  character(len=100), dimension(:),           allocatable :: yworkunit
+  integer                                                 :: jproc
+  integer                                                 :: jsv
+  integer                                                 :: jt
+  integer,            dimension(:),           allocatable :: iworkgrid  ! grid label
+  real,               dimension(:),           allocatable :: zconvert   ! unit conversion coefficient
+  real,               dimension(:,:,:,:,:,:), allocatable :: zworkt
+
+  if( .not. allocated( prhodjn ) ) then
+    call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'prhodjn not allocated' )
+    return
+  end if
+
+  ! unit conversion for  ru budgets
+  allocate( zconvert( nbuprocnbr( kp ) ) )
+  zconvert(1 : 2 )                = ptstep * Real( nbustep )
+  zconvert(3 )                    = ptstep * Real( nbustep )
+  zconvert(4 : nbuprocnbr( kp ) ) = 1.
+
+  select case ( cbutype )
+    case( 'CART', 'SKIP' )
+      ybutype = 'CART'
+        if ( knocompress ) then
+          allocate( zworkt(nbuimax, nbujmax, nbukmax, 1, 1, nbuprocnbr(kp ) ) ) ! local budget of ru
+          do jproc = 1, nbuprocnbr(kp )
+            zworkt(:, :, :, 1, 1, jproc ) = pbudarray(:, :, :, jproc ) * zconvert(jproc ) / prhodjn(:, :, :, 1, 1, 1 )
+          end do
+        else
+          allocate( zworkt(nbuimax_ll, nbujmax_ll, nbukmax, 1, 1, nbuprocnbr(kp ) ) ) ! global budget of ru
+  !
+          do jproc = 1, nbuprocnbr(kp )
+            zworkt(:, :, :, 1, 1, jproc ) = End_cart_compress( pbudarray(:, :, :, jproc ) )
+            zworkt(:, :, :, 1, 1, jproc ) = zworkt(:, :, :, 1, 1, jproc ) * zconvert(jproc ) / prhodjn(:, :, :, 1, 1, 1 )
+          end do
+        endif
+    case('MASK')
+      ybutype = 'MASK'
+        allocate( zworkt(1, 1, nbukmax, nbuwrnb, nbumask, nbuprocnbr(kp ) ) )
+        do jproc = 1, nbuprocnbr(kp )
+          zworkt(1, 1, :, :, :, jproc ) = End_mask_compress( pbudarray(:, :, :, jproc ) ) &
+                                          * zconvert(jproc ) / prhodjn(1, 1, :, :, :, 1 )
+        end do
+
+    case default
+      call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'unknown CBUTYPE' )
+  end select
+
+  deallocate(zconvert)
 !
-    IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. &
-        LBU_RRI .OR. LBU_RRS  .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV      ) THEN
-      DEALLOCATE(ZWORK)
-    END IF
-!
-  DEALLOCATE (ZWORKTEMP, ZWORKDATIME)
-!
-END SELECT   
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE WRITE_BUDGET
+!  RU budgets storage
+  allocate( yworkunit( nbuprocnbr(kp ) ) )
+  allocate( yworkcomment( nbuprocnbr(kp ) ) )
+  allocate( iworkgrid( nbuprocnbr(kp ) ) )
+!
+  select case( kp )
+    case ( NBUDGET_U )
+      yworkunit(:)       = 'm s-2'; yworkunit(1:3) = 'm s-1'
+      yworkcomment(:)    = 'Budget of momentum along X axis'
+      iworkgrid(:)       = 2
+      write( ygroup_name, fmt = "('UU___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_V )
+      yworkunit(:)       = 'm s-2'; yworkunit(1:3) = 'm s-1'
+      yworkcomment(:)    = 'Budget of momentum along Y axis'
+      iworkgrid(:)       = 3
+      write( ygroup_name, fmt = "('VV___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_W )
+      yworkunit(:)       = 'm s-2'; yworkunit(1:3) = 'm s-1'
+      yworkcomment(:)    = 'Budget of momentum along Z axis'
+      iworkgrid(:)       = 4
+      write( ygroup_name, fmt = "('WW___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_TH )
+      yworkunit(:)       = 'K s-1' ; yworkunit(1:3) = 'K'
+      yworkcomment(:)    = 'Budget of potential temperature'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('TH___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_TKE )
+      yworkunit(:)       = 'm2 s-3' ; yworkunit(1:3) = 'm2 s-1'
+      yworkcomment(:)    = 'Budget of turbulent kinetic energy'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('TK___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RV )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of water vapor mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RV___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RC )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of cloud water mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RC___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RR )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of rain water mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RR___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RI )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of cloud ice mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RI___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RS )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of snow/aggregate mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RS___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RG )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of graupel mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RG___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_RH )
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = 'kg kg-1'
+      yworkcomment(:)    = 'Budget of hail mixing ratio'
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('RH___',I4.4)" ) nbutshift
+
+    case ( NBUDGET_SV1 : )
+      jsv = kp - NBUDGET_SV1 + 1
+      yworkunit(:)       = 's-1' ;  yworkunit(1:3) = '  '
+      DO JT = 1,nbuprocnbr(kp)
+        WRITE(yworkcomment(JT),FMT="('Budget of SVx=',I3.3)") jsv
+      END DO
+      iworkgrid(:)       = 1
+      write( ygroup_name, fmt = "('SV',I3.3,I4.4)") jsv, nbutshift
+
+    case default
+      call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'unknown budget type' )
+  end select
+
+  CALL Write_diachro( tpdiafile, tluout, ygroup_name, ybutype, iworkgrid,                              &
+                          tpdates, zworkt, cbucomment(kp, :),                                          &
+                          yworkunit, yworkcomment,                                                     &
+                          oicp = lbu_icp, ojcp = lbu_jcp, okcp = lbu_kcp,                              &
+                          kil = nbuil, kih = nbuih, kjl = nbujl, kjh = nbujh, kkl = nbukl, kkh = nbukh )
+
+  deallocate( zworkt, yworkunit, yworkcomment, iworkgrid )
+
+end subroutine Store_one_budget
+
+end module mode_write_budget
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 05288a97203cdbc8b4f941283ee70a96e3792c21..8934a59ceac5b00ca68730d7b955defd80812030 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -14,9 +14,9 @@ public :: Write_diachro
 contains
 !     #################################################################
       SUBROUTINE WRITE_DIACHRO(TPDIAFILE,TPLUOUTDIA,HGROUP,HTYPE,     &
-      KGRID,PDATIME,PVAR,PTRAJT,                                     &
-      HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, &
-      PTRAJX,PTRAJY,PTRAJZ,PMASK)
+      KGRID, tpdates, PVAR,                                           &
+      HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH,  &
+      PTRAJX,PTRAJY,PTRAJZ  )
 !     #################################################################
 !
 !!****  *WRITE_DIACHRO* - Ecriture d'un enregistrement dans un fichier
@@ -77,6 +77,8 @@ contains
 !!      P. Wautelet     09/06/2017: name of the variable added to the name of the written field
 !!                                  and better comment (true comment + units)
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 13/09/2019: remove never used PMASK optional dummy-argument
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -86,7 +88,11 @@ USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS,     ONLY: JPHEXT
+use modd_time,           only: tdtexp, tdtseg
+use modd_time_n,         only: tdtmod
+use modd_type_date,      only: date_time
 !
+use mode_datetime,       only: Datetime_distance
 USE MODE_FIELD
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_box
 USE MODE_ll
@@ -100,9 +106,8 @@ TYPE(TFILEDATA),              INTENT(IN)          :: TPDIAFILE    ! file to writ
 TYPE(TFILEDATA),              INTENT(IN)          :: TPLUOUTDIA
 CHARACTER(LEN=*),             INTENT(IN)          :: HGROUP, HTYPE
 INTEGER,DIMENSION(:),         INTENT(IN)          :: KGRID
-REAL,DIMENSION(:,:),          INTENT(IN)          :: PDATIME
+type(date_time), dimension(:), intent(in)           :: tpdates
 REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN)          :: PVAR
-REAL,DIMENSION(:,:),          INTENT(IN)          :: PTRAJT
 CHARACTER(LEN=*),DIMENSION(:),INTENT(IN)          :: HTITRE, HUNITE, HCOMMENT
 LOGICAL,                      INTENT(IN),OPTIONAL :: OICP, OJCP, OKCP
 INTEGER,                      INTENT(IN),OPTIONAL :: KIL, KIH
@@ -111,7 +116,6 @@ INTEGER,                      INTENT(IN),OPTIONAL :: KKL, KKH
 REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJX
 REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJY
 REAL,DIMENSION(:,:,:),        INTENT(IN),OPTIONAL :: PTRAJZ
-REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN),OPTIONAL :: PMASK
 !
 !*       0.1   Local variables
 !              ---------------
@@ -126,43 +130,52 @@ INTEGER   ::   INTRAJX, INTRAJY, INTRAJZ
 INTEGER   ::   IIMASK, IJMASK, IKMASK, ITMASK, INMASK, IPMASK
 INTEGER   ::   ICOMPX, ICOMPY, ICOMPZ
 INTEGER   ::   IIMAX_ll, IJMAX_ll ! size of the physical global domain
+integer   ::   ji
 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
+logical   :: gicp, gjcp, gkcp
 LOGICAL   ::   GPACK
+real, dimension(:,:), allocatable :: ztimes
+real, dimension(:,:), allocatable :: zdatime
 TYPE(TFIELDDATA)  :: TZFIELD
 !------------------------------------------------------------------------------
-!
+
+if ( present( oicp ) ) then
+  gicp = oicp
+else
+  gicp = .false.
+end if
+
+if ( present( ojcp ) ) then
+  gjcp = ojcp
+else
+  gjcp = .false.
+end if
+
+if ( present( okcp ) ) then
+  gkcp = okcp
+else
+  gkcp = .false.
+end if
+
 GPACK=LPACK
 LPACK=.FALSE.
 YCOMMENT='NOTHING'
 !
 ILUOUTDIA = TPLUOUTDIA%NLU
 !
-! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
-! Question: doit-on mettre condition comme:
-!  IF(HTYPE == 'CART' .AND. .NOT. PRESENT(OICP) .AND. .NOT. PRESENT(OJCP)) THEN
-
-! en attendant correction on debranche avec un IF Present. ENDIF av
-! RETURN
-IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
-  IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN
+II = SIZE(PVAR,1)
+IJ = SIZE(PVAR,2)
+IF(HTYPE == 'CART' .AND. .NOT. GICP .AND. .NOT. GJCP) THEN
                               !for parallel execution, PVAR is distributed on several proc
-    II=KIH-KIL+1
-    IJ=KJH-KJL+1
-  ELSE
-    II = SIZE(PVAR,1)
-    IJ = SIZE(PVAR,2)
-  ENDIF
-ELSE
-    II = SIZE(PVAR,1)
-    IJ = SIZE(PVAR,2)
-
+  II=KIH-KIL+1
+  IJ=KJH-KJL+1
 ENDIF
 IK = SIZE(PVAR,3)
 IT = SIZE(PVAR,4)
 IN = SIZE(PVAR,5)
 IP = SIZE(PVAR,6)
 
-INTRAJT=SIZE(PTRAJT,2)
+INTRAJT=SIZE(tpdates)
 
 IKTRAJX=0; IKTRAJY=0; IKTRAJZ=0
 ITTRAJX=0; ITTRAJY=0; ITTRAJZ=0
@@ -190,17 +203,10 @@ IF(HTYPE == 'MASK')THEN
   CALL GET_GLOBALDIMS_ll (IIMAX_ll,IJMAX_ll)
   IIMASK=IIMAX_ll + 2 * JPHEXT
   IJMASK=IJMAX_ll + 2 * JPHEXT
-  IF(PRESENT(PMASK))THEN
-    IKMASK=SIZE(PMASK,3)
-    ITMASK=SIZE(PMASK,4)
-    INMASK=SIZE(PMASK,5)
-    IPMASK=SIZE(PMASK,6)
-  ELSE
-    IKMASK=1
-    ITMASK=NBUWRNB
-    INMASK=NBUMASK
-    IPMASK=1
-  ENDIF
+  IKMASK=1
+  ITMASK=NBUWRNB
+  INMASK=NBUMASK
+  IPMASK=1
 ENDIF
 
 ILENTITRE = LEN(HTITRE)
@@ -208,16 +214,20 @@ ILENUNITE = LEN(HUNITE)
 ILENCOMMENT = LEN(HCOMMENT)
 
 ICOMPX=0; ICOMPY=0; ICOMPZ=0
-IF(PRESENT(OICP))THEN
-IF(OICP)THEN
-  ICOMPX=1
+IF ( GICP ) THEN
+  ICOMPX = 1
+ELSE
+  ICOMPX = 0
 ENDIF
-IF(OJCP)THEN
-  ICOMPY=1
+IF ( GJCP ) THEN
+  ICOMPY = 1
+ELSE
+  ICOMPY = 0
 ENDIF
-IF(OKCP)THEN
+IF ( GKCP ) THEN
   ICOMPZ=1
-ENDIF
+ELSE
+  ICOMPZ = 0
 ENDIF
 !
 IF (NVERB>=5) THEN
@@ -377,9 +387,7 @@ DO J = 1,IP
   ELSE IF(J >= 100 .AND. J < 1000) THEN 
           WRITE(YJ,'(I3)')J
   ENDIF
-! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
-IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
-  IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN
+  IF(HTYPE == 'CART' .AND. .NOT. GICP .AND. .NOT. GJCP) THEN
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -405,19 +413,6 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     TZFIELD%LTIMEDEP   = .FALSE.
     CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
   ENDIF
-ELSE
-    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = TRIM(HUNITE(J))
-  TZFIELD%CDIR       = '--'
-  TZFIELD%CCOMMENT   = TRIM(HTITRE(J))//' - '//TRIM(HCOMMENT(J))//' ('//TRIM(HUNITE(J))//')'
-  TZFIELD%NGRID      = KGRID(J)
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 5
-  TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
-END IF
   IF (NVERB>=5) THEN
     WRITE(ILUOUTDIA,*)J,TRIM(TZFIELD%CMNHNAME)
   ENDIF
@@ -438,7 +433,17 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJT)
+
+!Reconstitute old diachro format
+allocate( ztimes( size( tpdates ), 1 ) )
+
+do ji=1,size(tpdates)
+  call Datetime_distance( tdtexp, tpdates(ji ), ztimes(ji, 1 ) )
+end do
+
+call IO_Field_write( tpdiafile, tzfield, ztimes )
+
+deallocate( ztimes )
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  7th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -463,22 +468,6 @@ IF(PRESENT(PTRAJX))THEN
   CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJX)
 ENDIF
 !
-!                        ou
-!
-IF(PRESENT(PMASK))THEN
-  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.MASK'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = TRIM(HGROUP)//'.MASK'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
-  TZFIELD%NGRID      = KGRID(1)
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 6
-  TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_Field_write(TPDIAFILE,TZFIELD,PMASK)
-ENDIF
-!
 ! 9eme enregistrement TRAJY
 !
 IF(PRESENT(PTRAJY))THEN
@@ -523,7 +512,30 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_Field_write(TPDIAFILE,TZFIELD,PDATIME)
+
+!Reconstitute old diachro format
+allocate( zdatime( 16, size(tpdates) ) )
+
+zdatime(1,  : ) = tdtexp%tdate%year
+zdatime(2,  : ) = tdtexp%tdate%month
+zdatime(3,  : ) = tdtexp%tdate%day
+zdatime(4,  : ) = tdtexp%time
+zdatime(5,  : ) = tdtseg%tdate%year
+zdatime(6,  : ) = tdtseg%tdate%month
+zdatime(7,  : ) = tdtseg%tdate%day
+zdatime(8,  : ) = tdtseg%time
+zdatime(9,  : ) = tdtmod%tdate%year
+zdatime(10, : ) = tdtmod%tdate%month
+zdatime(11, : ) = tdtmod%tdate%day
+zdatime(12, : ) = tdtmod%time
+zdatime(13, : ) = tpdates(:)%tdate%year
+zdatime(14, : ) = tpdates(:)%tdate%month
+zdatime(15, : ) = tpdates(:)%tdate%day
+zdatime(16, : ) = tpdates(:)%time
+
+call IO_Field_write( tpdiafile, tzfield, zdatime )
+
+deallocate( zdatime )
 !
 CALL MENU_DIACHRO(TPDIAFILE,HGROUP)
 LPACK=GPACK
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index 10df1eebe24ef9fa2df341213eac4eceec3bba35..7acd1ed9796df48735ec8203f64fdca4babce6ab 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -382,7 +382,7 @@ DO JSV=1,NSV
 END DO
 
 YTITLE = "Sv variance budget  "
-CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2/kg2/s",ZSV_BUDGET,HLES_AVG)
+CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2 kg-2 s-1",ZSV_BUDGET,HLES_AVG)
 !
 DEALLOCATE(ZSV_BUDGET)
 !-------------------------------------------------------------------------------
@@ -752,7 +752,7 @@ DO JSV=1,NSV
 END DO
 
 YTITLE = "Sv flux budget      "
-CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"mkg/kg/s2",ZSV_BUDGET,HLES_AVG)
+CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"m kg kg-1 s-2",ZSV_BUDGET,HLES_AVG)
 !
 DEALLOCATE(ZSV_BUDGET)
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 1ae4ad90c4df2ed27e600a5de13bbcc226ba3c50..ee1d6ec45dce244b160bbb03098b5ed1105c1c7c 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -55,11 +55,11 @@ END MODULE MODI_WRITE_LES_n
 !!                       10/10/09 (P. Aumond) Add user multimaskS
 !!                          11/15 (C.Lac) Add production terms of TKE
 !!                    10/2016 (C.Lac) Add droplet deposition
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
-
-!! --------------------------------------------------------------------------
-!       
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  C. Lac         02/2019: add rain fraction as a LES diagnostic
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+! --------------------------------------------------------------------------
+!
 !*      0. DECLARATIONS
 !          ------------
 !
@@ -217,12 +217,8 @@ END IF
 !
 NLES_CURRENT_TIMES=NLES_TIMES
 !
-ALLOCATE(XLES_CURRENT_TRAJT(NLES_TIMES,1))
-XLES_CURRENT_TRAJT(:,:) = XLES_TRAJT(:,:)
 ALLOCATE(XLES_CURRENT_Z(NLES_K))
 XLES_CURRENT_Z(:) = XLES_Z(:)
-ALLOCATE(XLES_CURRENT_DATIME(16,NLES_TIMES))
-XLES_CURRENT_DATIME(:,:) = XLES_DATIME(:,:)
 !
 XLES_CURRENT_ZS = XLES_ZS
 !
@@ -812,7 +808,7 @@ IF (LLES_SUBGRID) THEN
        "Subgrid vert. flux of liquid potential temperature"//YSUBTITLE(:),"m K s-1",XLES_SUBGRID_WThl,HLES_AVG)
 
   CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WP  ",YSUBTITLE(:), &
-     "Subgrid <wp> vertical Flux"//YSUBTITLE(:),"mPa/s",XLES_SUBGRID_WP,HLES_AVG)
+     "Subgrid <wp> vertical Flux"//YSUBTITLE(:),"m Pa s-1",XLES_SUBGRID_WP,HLES_AVG)
 !!
 !!
   CALL LES_DIACHRO_MASKS(TPDIAFILE,"THLUP_MF",YSUBTITLE(:), &
@@ -1488,9 +1484,7 @@ IF (HLES_AVG==' ') CALL LES_SPEC_n(TPDIAFILE)
 !*      7.   deallocations
 !            -------------
 !
-DEALLOCATE(XLES_CURRENT_TRAJT )
 DEALLOCATE(XLES_CURRENT_Z     )
-DEALLOCATE(XLES_CURRENT_DATIME)
 
 IF (CLES_NORM_TYPE/='NONE' ) THEN
   DEALLOCATE(XLES_NORM_M  )
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index 5e618958c541543cd269a8d064009aea8d2c2570..507f7483f288dedbc181446fef1d2b85f7590827 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -60,9 +60,10 @@ END MODULE MODI_WRITE_PROFILER_n
 !!              Oct, 2016 (C.Lac) Add visibility diagnostics for fog
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  J. Escobar : 16/08/2018: From Pierre & Maud , correction use CNAMES(JSV-NSV_CHEMBEG+1)
-!!
-!! --------------------------------------------------------------------------
-!       
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
+! --------------------------------------------------------------------------
+!
 !*      0. DECLARATIONS
 !          ------------
 !
@@ -130,7 +131,6 @@ INTEGER,            INTENT(IN)       :: II
 !
 REAL,    DIMENSION(:,:,:,:,:,:),  ALLOCATABLE :: ZWORK6   ! contains temporal serie
 REAL,    DIMENSION(:,:,:,:,:,:),  ALLOCATABLE :: ZW6      ! contains temporal serie to write
-REAL,    DIMENSION(:,:),          ALLOCATABLE :: ZTRAJT   ! localization of the
 REAL, DIMENSION(:,:,:,:),         ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
 REAL, DIMENSION(:,:,:),           ALLOCATABLE :: ZRHO
 !
@@ -161,15 +161,12 @@ IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (LDUST .OR. LORILAM .OR. LSALT) IPROC=IPROC+NAER
 IF (SIZE(TPROFILER%TKE  )>0) IPROC = IPROC + 1
 !
-ALLOCATE (ZTRAJT(  SIZE(TPROFILER%TIME),1))
-ALLOCATE (ZWORK6(1,1,IKU,SIZE(TPROFILER%TIME),1,IPROC))
+ALLOCATE (ZWORK6(1,1,IKU,size(tprofiler%tpdates),1,IPROC))
 ALLOCATE (YCOMMENT(IPROC))
 ALLOCATE (YTITLE  (IPROC))
 ALLOCATE (YUNIT   (IPROC))
 ALLOCATE (IGRID   (IPROC))
 !
-ZTRAJT  (:,1) = TPROFILER%TIME(:)
-!
 IGRID  = 1
 YGROUP = TPROFILER%NAME(II)
 !
@@ -507,11 +504,11 @@ IF (SIZE(TPROFILER%SV,4)>=1) THEN
     ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9
   END DO
   IF ((LORILAM).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TPROFILER%TIME),NSV_AER)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TPROFILER%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TPROFILER%TIME),JPMODE)) 
-    ALLOCATE (ZRG(1,1,SIZE(TPROFILER%TIME),JPMODE)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TPROFILER%TIME),JPMODE)) 
+    ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_AER))
+    ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates)))
+    ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),JPMODE))
+    ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),JPMODE))
+    ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),JPMODE))
     ZSV(1,1,:,1:NSV_AER) = TPROFILER%SV(:,IK,II,NSV_AERBEG:NSV_AEREND)
     IF (SIZE(TPROFILER%R,4) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -558,11 +555,11 @@ IF (SIZE(TPROFILER%SV,4)>=1) THEN
     ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9
   END DO
   IF ((LDUST).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TPROFILER%TIME),NSV_DST)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TPROFILER%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) 
-    ALLOCATE (ZRG(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) 
+    ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_DST))
+    ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates)))
+    ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),NMODE_DST))
+    ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),NMODE_DST))
+    ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),NMODE_DST))
     ZSV(1,1,:,1:NSV_DST) = TPROFILER%SV(:,IK,II,NSV_DSTBEG:NSV_DSTEND)
     IF (SIZE(TPROFILER%R,4) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -624,16 +621,15 @@ END DO
 !----------------------------------------------------------------------------
 !
 
-ALLOCATE (ZW6(1,1,IKU,SIZE(TPROFILER%TIME),1,JPROC))
+ALLOCATE (ZW6(1,1,IKU,size(tprofiler%tpdates),1,JPROC))
 ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
 DEALLOCATE(ZWORK6)
 
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"CART",IGRID(:JPROC), TPROFILER%DATIME,&
-                   ZW6,ZTRAJT,YTITLE(:JPROC),YUNIT(:JPROC),YCOMMENT(:JPROC),     &
-                   .TRUE.,.TRUE.,.FALSE.,                                        &
-                   KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU                         )
-!
-DEALLOCATE (ZTRAJT  )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "CART", IGRID(:JPROC), tprofiler%tpdates, &
+                    ZW6, YTITLE(:JPROC), YUNIT(:JPROC), YCOMMENT(:JPROC),                 &
+                    OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE.,                         &
+                    KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = IKU                )
+
 DEALLOCATE (ZW6     )
 DEALLOCATE (YCOMMENT)
 DEALLOCATE (YTITLE  )
diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90
index 76ff9507c3c5ac3c9aa92fed9db6b546464b7be4..18618882425b6694fe86cf3816ff93ad8fe76036 100644
--- a/src/MNH/write_seriesn.f90
+++ b/src/MNH/write_seriesn.f90
@@ -60,7 +60,8 @@ END MODULE MODI_WRITE_SERIES_n
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      P.Wautelet: 11/07/2016 : removed MNH_NCWRIT define
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
 !-------------------------------------------------------------------------------
 !
 !
@@ -235,11 +236,11 @@ ENDIF
 !*      2.3  Write in diachro file
 !
 GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.TRUE.
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,'TSERIES','CART',NSGRIDD1,XSDATIME(:,1:NSNBSTEPT),   &
-                   XSSERIES1(1:1,1:1,1:1,1:NSNBSTEPT,:,:),               &
-                   XSTRAJT(1:NSNBSTEPT,:),CSTITLE1,CSUNIT1,CSCOMMENT1,   &
-                   GICP,GJCP,GKCP,                               &
-                   KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=1)
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, 'TSERIES', 'CART', NSGRIDD1, tpsdates(1:nsnbstept), &
+                    XSSERIES1(1:1,1:1,1:1,1:NSNBSTEPT,:,:),                                &
+                    CSTITLE1(:), CSUNIT1(:), CSCOMMENT1(:),                                &
+                    OICP = GICP, OJCP = GJCP, OKCP = GKCP,                                 &
+                    KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = 1                   )
 !
 !----------------------------------------------------------------------------
 !
@@ -289,11 +290,11 @@ DEALLOCATE(ZVAR3D)
 !*      3.2  Write in diachro file
 !
 GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.FALSE.
-CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,'ZTSERIES','CART',NSGRIDD2,XSDATIME(:,1:NSNBSTEPT),   &
-                   XSSERIES2(1:1,1:1,1:IKMAX,1:NSNBSTEPT,:,:),            &
-                   XSTRAJT(1:NSNBSTEPT,:),CSTITLE2,CSUNIT2,CSCOMMENT2,    &
-                   GICP,GJCP,GKCP,                 &
-                   KIL=1,KIH=1,KJL=1,KJH=1,KKL=IKB,KKH=IKE)
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, 'ZTSERIES', 'CART', NSGRIDD2, tpsdates(1:nsnbstept), &
+                    XSSERIES2(1:1,1:1,1:1,1:NSNBSTEPT,:,:),                                 &
+                    CSTITLE2(:), CSUNIT2(:), CSCOMMENT2(:),                                 &
+                    OICP = GICP, OJCP = GJCP, OKCP = GKCP,                                  &
+                    KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = IKB, KKH = IKE                )
 !
 !----------------------------------------------------------------------------
 !
@@ -347,11 +348,11 @@ DO JS=1,NBJSLICE
     YSTITLE3S(JT)=ADJUSTL(ADJUSTR(CSTITLE3(JT))//'Y'//YSL//'-'//YSH)
   END DO
   GICP=.FALSE. ; GJCP=.TRUE. ; GKCP=.TRUE.
-  CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,YGROUP,'CART',NSGRIDD3,XSDATIME(:,1:NSNBSTEPT),    &
-                      ZSERIES3_ll(1:IIU_ll,1:1,1:1,1:NSNBSTEPT,1:1,ISB1:ISB2),&
-                      XSTRAJT(1:NSNBSTEPT,:),YSTITLE3S,CSUNIT3,CSCOMMENT3,     &
-                      GICP,GJCP,GKCP,                               &
-                      KIL=1,KIH=IIU_ll,KJL=1,KJH=1,KKL=1,KKH=1)
+  CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP, 'CART', NSGRIDD3, tpsdates(1:nsnbstept), &
+                      ZSERIES3_ll(1:IIU_ll,1:1,1:1,1:NSNBSTEPT,1:1,ISB1:ISB2),            &
+                      YSTITLE3S(:), CSUNIT3(:), CSCOMMENT3(:),                            &
+                      OICP = GICP, OJCP = GJCP, OKCP = GKCP,                              &
+                      KIL = 1, KIH = IIU_ll, KJL = 1, KJH = 1, KKL = 1, KKH = 1           )
 END DO
 DEALLOCATE(ZVAR3D,ZWORK2D,ZSERIES3_ll)
 !
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index c85c58f26e3e466c478bf4002ea775d19f01ac74..4361a9a91fd94f13896036f97c2344d0779ff93e 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -57,9 +57,10 @@ END MODULE MODI_WRITE_STATION_n
 !!    -------------
 !!     Original 15/02/2002
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
-!! --------------------------------------------------------------------------
-!       
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
+! --------------------------------------------------------------------------
+!
 !*      0. DECLARATIONS
 !          ------------
 !
@@ -124,9 +125,8 @@ INTEGER,              INTENT(IN)       :: II
 !
 !*      0.2  declaration of local variables for diachro
 !
-REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal serie
-REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6    ! contains temporal serie to write
-REAL, DIMENSION(:,:),         ALLOCATABLE :: ZTRAJT ! localization of the
+REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal series
+REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6    ! contains temporal series to write
 REAL, DIMENSION(:,:,:,:),     ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
 REAL, DIMENSION(:,:,:,:,:),     ALLOCATABLE :: ZPTOTA
 REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZRHO
@@ -158,16 +158,12 @@ IF (LSALT) IPROC = IPROC + NMODE_SLT*3
 IF (SIZE(TSTATION%TSRAD)>0) IPROC = IPROC + 1
 IF (SIZE(TSTATION%SFCO2,1)>0) IPROC = IPROC +1
 !
-ALLOCATE (ZTRAJT(  SIZE(TSTATION%TIME),1))
-ALLOCATE (ZWORK6(1,1,1,SIZE(TSTATION%TIME),1,IPROC)) 
+ALLOCATE (ZWORK6(1,1,1,SIZE(tstation%tpdates),1,IPROC))
 ALLOCATE (YCOMMENT(IPROC))
 ALLOCATE (YTITLE  (IPROC))
 ALLOCATE (YUNIT   (IPROC))
 ALLOCATE (IGRID   (IPROC))
 !
-ZTRAJT  (:,1) = TSTATION%TIME(:)
-!
-!
 IGRID  = 1
 YGROUP = TSTATION%NAME(II)
 JPROC = 0
@@ -422,12 +418,12 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
   END DO
 
   IF ((LORILAM).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_AER)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),JPMODE)) 
-    ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),JPMODE)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),JPMODE)) 
-    ALLOCATE (ZPTOTA(1,1,SIZE(TSTATION%TIME),NSP+NCARB+NSOA,JPMODE)) 
+    ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_AER))
+    ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates)))
+    ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),JPMODE))
+    ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),JPMODE))
+    ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),JPMODE))
+    ALLOCATE (ZPTOTA(1,1,SIZE(tstation%tpdates),NSP+NCARB+NSOA,JPMODE))
     ZSV(1,1,:,1:NSV_AER) = TSTATION%SV(:,II,NSV_AERBEG:NSV_AEREND)
     IF (SIZE(TSTATION%R,3) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -570,11 +566,11 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
     ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) *1.E9
   END DO
   IF ((LDUST).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_DST)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),NMODE_DST)) 
-    ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),NMODE_DST)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),NMODE_DST)) 
+    ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_DST))
+    ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates)))
+    ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_DST))
+    ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_DST))
+    ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_DST))
     ZSV(1,1,:,1:NSV_DST) = TSTATION%SV(:,II,NSV_DSTBEG:NSV_DSTEND)
     IF (SIZE(TSTATION%R,3) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -623,11 +619,11 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
 ENDIF
 !
   IF ((LSALT).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_SLT)) 
-    ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) 
-    ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) 
-    ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) 
-    ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) 
+    ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_SLT))
+    ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates)))
+    ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_SLT))
+    ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_SLT))
+    ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_SLT))
     ZSV(1,1,:,1:NSV_SLT) = TSTATION%SV(:,II,NSV_SLTBEG:NSV_SLTEND)
     IF (SIZE(TSTATION%R,3) >0) THEN
       ZRHO(1,1,:) = 0.
@@ -685,16 +681,15 @@ END IF
 !----------------------------------------------------------------------------
 !
 !
-ALLOCATE (ZW6(1,1,1,SIZE(TSTATION%TIME),1,JPROC))
+ALLOCATE (ZW6(1,1,1,SIZE(tstation%tpdates),1,JPROC))
 ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
 DEALLOCATE(ZWORK6)
 !
-  CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"CART",IGRID, TSTATION%DATIME,&
-                     ZW6,ZTRAJT,YTITLE,YUNIT,YCOMMENT,&
-                     .TRUE.,.TRUE.,.FALSE.,                             &
-                     KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=1   )
+CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "CART", IGRID, tstation%tpdates, &
+                    ZW6(:,:,:,:,:,:), YTITLE(:), YUNIT(:), YCOMMENT(:),          &
+                    OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE.,                &
+                    KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = 1         )
 !
-DEALLOCATE (ZTRAJT)
 DEALLOCATE (ZW6)
 DEALLOCATE (YCOMMENT)
 DEALLOCATE (YTITLE  )