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/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/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_lesn.f90 b/src/MNH/ini_lesn.f90
index c2a2256834c47187389d50e94d3e902c1682486d..f29666f7eb814faf931dbfa32bca4504e7dfdbda 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
@@ -338,17 +339,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))
+allocate( xles_dates( nles_times ) )
+allocate( xles_times( nles_times ) )
 !
-!*      3.7  sampling times array for diachro
-!            --------------------------------
-!
-ALLOCATE(XLES_TRAJT(NLES_TIMES,1))
-!
-!*      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/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/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_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_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..ec13c03037d3e927add4c4c69836f55a41c1f775 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -6,13 +6,22 @@
 ! 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
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !-----------------------------------------------------------------
 !#######################
 MODULE MODE_LES_DIACHRO
 !#######################
-!
+
 USE MODD_LUNIT
-!
+use modd_les_n, only: xles_dates, xles_times
+
+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
 !
 !---------------------------------------------------------------------
@@ -477,8 +486,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 +525,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 +608,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 +616,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 +640,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 +655,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 +673,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 +687,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 +716,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 +740,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 +759,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 +779,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 +799,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 +811,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 +820,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 +833,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 +843,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 +867,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 +886,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 +905,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 +925,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 +935,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 +945,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 +958,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 +968,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 +993,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 +1012,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 +1031,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 +1052,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 +1063,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 +1073,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 +1086,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 +1096,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 +1121,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 +1142,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 +1161,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 +1186,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 +1197,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 +1207,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 +1220,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 +1231,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 +1256,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 +1271,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 +1289,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 +1307,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 +1321,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 +1334,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 +1344,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 +1368,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 +1382,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 +1399,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 +1418,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 +1432,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 +1445,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 +1458,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 +1492,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 +1501,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 +1514,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 +1540,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 +1555,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 +1580,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 +1592,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 +1615,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 +1646,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 +1654,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 +1673,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 +1695,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 +1721,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 +1742,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..3089ca505e44235019fa59fd13e0bb1f67ae9d33 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
@@ -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)
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/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/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/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..0457f183e91a3a53bed0518459dcb92587b202dd 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -125,14 +125,16 @@ END MODULE MODI_WRITE_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
-!!
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!
 !-------------------------------------------------------------------------------
 !
-!*       0.    
+!*       0.
 !              ------------
 USE MODD_BUDGET
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LUNIT_n,        ONLY: TLUOUT
+use modd_type_date,      only: date_time
 !
 USE MODE_DATETIME
 USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
@@ -167,20 +169,19 @@ REAL, ALLOCATABLE  , DIMENSION(:,:,:,:,:,:) :: ZWORK, ZWORKT,  ZWORKMASK  ! loca
             ! 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
+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
+type(date_time), dimension(:), allocatable :: tzdates
 !
 !-------------------------------------------------------------------------------
 !
@@ -231,30 +232,19 @@ SELECT CASE (CBUTYPE)
 !
 !*	 2.1    Initialization
 !
-    ALLOCATE(ZWORKTEMP(1,1))
-    ALLOCATE(ZWORKDATIME(16,1))
+    ALLOCATE( ZWORKTEMP( 1 ) )
+    allocate( tzdates( 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
+    !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))
 !
-    CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1,1))
+    ZWORKTEMP(1)=ZWORKTEMP(1)+(1.-NBUSTEP*0.5)*PTSTEP
 !
-    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)
+    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)
 !
 !*	 2.2    storage of the budgets array
 !
@@ -301,11 +291,11 @@ SELECT CASE (CBUTYPE)
 
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(1, :),                                           &
+                          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)
 !
 ! XBURHODJU storage
@@ -324,11 +314,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORK, 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(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
     END IF
 !
@@ -373,11 +363,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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)
 !                     XBURHODJV storage
       IF (GNOCOMPRESS) THEN
@@ -395,11 +385,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORK, 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)
       DEALLOCATE(ZWORK)
     END IF
@@ -444,11 +434,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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)
 !                     XBURHODJW storage
       IF (GNOCOMPRESS) THEN
@@ -465,16 +455,15 @@ SELECT CASE (CBUTYPE)
       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           )
+!
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORK, 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)
       DEALLOCATE(ZWORK)
     END IF
-  
 !
 !*	 2.2.3'  XBURHODJ storage for Scalars
 !
@@ -499,11 +488,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORK, YBUCOMMENT,                                                  &
+                          YWORKUNIT, YWORKCOMMENT,                                                     &
+                          OICP = LBU_ICP, OJCP = LBU_JCP, OKCP = LBU_KCP,                              &
+                          KIL = NBUIL, KIH = NBUIH, KJL = NBUJL, KJH = NBUJH, KKL = NBUKL, KKH = NBUKH )
       IF (GNOCOMPRESS) THEN
         DEALLOCATE(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID)
       ELSE
@@ -549,11 +538,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -595,11 +584,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF   
@@ -641,11 +630,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -687,11 +676,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -732,11 +721,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -777,11 +766,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -822,11 +811,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -867,11 +856,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -912,11 +901,11 @@ SELECT CASE (CBUTYPE)
       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           )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                          tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                          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 IF
@@ -961,26 +950,27 @@ SELECT CASE (CBUTYPE)
         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           )
+        CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID,                           &
+                            tzdates, ZWORKT, CBUCOMMENT(IP, :),                                          &
+                            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 DO
     END IF
 !
     IF (ALLOCATED(ZWORK)) DEALLOCATE(ZWORK)
-    DEALLOCATE (ZWORKTEMP, ZWORKDATIME)
+    DEALLOCATE (ZWORKTEMP)
+    deallocate( tzdates )
 !-------------------------------------------------------------------------------
 !
 !*	 3.     'MASK' CASE
 !	        -----------
 !
   CASE('MASK')
-    ALLOCATE(ZWORKTEMP(NBUWRNB,1))
-    ALLOCATE(ZWORKDATIME(16,NBUWRNB))
+    ALLOCATE(ZWORKTEMP(NBUWRNB))
+    allocate( tzdates( NBUWRNB ) )
     ALLOCATE(ZWORKMASK(SIZE(XBUSURF,1),SIZE(XBUSURF,2),1,NBUWRNB,NBUMASK,1))
 !
 ! local array
@@ -990,33 +980,20 @@ SELECT CASE (CBUTYPE)
       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)
+    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,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)
+      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
 !
 !*     3.1    storage of the masks  array
@@ -1057,11 +1034,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORK, CBUCOMMENT(1, :),                                            &
+                          YWORKUNIT, YWORKCOMMENT,                                                     &
+                          OICP = LBU_ICP, OJCP = LBU_JCP, OKCP = LBU_KCP,                              &
+                          KIL = NBUIL, KIH = NBUIH, KJL = NBUJL, KJH = NBUJH, KKL = NBUKL, KKH = NBUKH )
       DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
 !
 !                 unit conversion of RU budgets and storage
@@ -1088,11 +1065,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(1, :),                                           &
+                          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 IF
 !
@@ -1115,11 +1092,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORK, CBUCOMMENT(1, :),                                            &
+                          YWORKUNIT, YWORKCOMMENT,                                                     &
+                          OICP = LBU_ICP, OJCP = LBU_JCP, OKCP = LBU_KCP,                              &
+                          KIL = NBUIL, KIH = NBUIH, KJL = NBUJL, KJH = NBUJH, KKL = NBUKL, KKH = NBUKH )
       DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
 !
 !                 unit conversion of RU budgets and storage
@@ -1144,11 +1121,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(2, :),                                           &
+                          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 IF
 !
@@ -1171,11 +1148,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORK, CBUCOMMENT(1, :),                                            &
+                          YWORKUNIT, YWORKCOMMENT,                                                     &
+                          OICP = LBU_ICP, OJCP = LBU_JCP, OKCP = LBU_KCP,                              &
+                          KIL = NBUIL, KIH = NBUIH, KJL = NBUJL, KJH = NBUJH, KKL = NBUKL, KKH = NBUKH )
       DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
 !
 !                 unit conversion of RU budgets and storage
@@ -1200,11 +1177,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(3, :),                                           &
+                          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 IF
 !
@@ -1227,11 +1204,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORK, CBUCOMMENT(1, :),                                            &
+                          YWORKUNIT, YWORKCOMMENT,                                                     &
+                          OICP = LBU_ICP, OJCP = LBU_JCP, OKCP = LBU_KCP,                              &
+                          KIL = NBUIL, KIH = NBUIH, KJL = NBUJL, KJH = NBUJH, KKL = NBUKL, KKH = NBUKH )
       DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID)
     END IF
 !
@@ -1258,11 +1235,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(4, :),                                           &
+                          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 IF
 !
@@ -1289,11 +1266,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(5, :),                                           &
+                          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 IF   
 !
@@ -1320,11 +1297,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(6, :),                                           &
+                          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 IF
 !
@@ -1351,11 +1328,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(7, :),                                           &
+                          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 IF
 !
@@ -1382,11 +1359,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(8, :),                                           &
+                          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 IF
 !
@@ -1413,11 +1390,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(9, :),                                           &
+                          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 IF
 !
@@ -1444,11 +1421,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(10, :),                                          &
+                          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 IF
 !
@@ -1475,11 +1452,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(11, :),                                          &
+                          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 IF
 !
@@ -1506,11 +1483,11 @@ SELECT CASE (CBUTYPE)
       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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(12, :),                                          &
+                          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 IF
 !
@@ -1540,11 +1517,11 @@ SELECT CASE (CBUTYPE)
         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 )
+      CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID,                          &
+                          tzdates, ZWORKT, CBUCOMMENT(12 + JSV, :),                                    &
+                          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 DO
     END IF
@@ -1554,7 +1531,8 @@ SELECT CASE (CBUTYPE)
       DEALLOCATE(ZWORK)
     END IF
 !
-  DEALLOCATE (ZWORKTEMP, ZWORKDATIME)
+  DEALLOCATE (ZWORKTEMP)
+  deallocate( tzdates )
 !
 END SELECT   
 !
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 05288a97203cdbc8b4f941283ee70a96e3792c21..aa5f6d406861b280e30041bfcc366d0f6632a601 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -77,6 +77,7 @@ 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
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -86,7 +87,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 +105,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
@@ -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
@@ -208,16 +221,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 +394,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 +420,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 +440,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'
@@ -523,7 +535,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_lesn.f90 b/src/MNH/write_lesn.f90
index 1ae4ad90c4df2ed27e600a5de13bbcc226ba3c50..172b5210e018bc3d4fc2f20966cf396e160fa306 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
 !
@@ -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  )