diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index dc12b57cabc42288aa6f4d366456a91f4450f27a..da600ed6365bedd7889cd09f4a9bfebe804ddafd 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -1,34 +1,27 @@
-!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2020 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!######################
-MODULE MODI_WRITE_LES_BUDGET_n
-!######################
-!
-INTERFACE
-!
-      SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
-!
-USE MODD_IO, ONLY: TFILEDATA
-!
-TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
-END SUBROUTINE WRITE_LES_BUDGET_n
-!
-END INTERFACE
-!
-END MODULE MODI_WRITE_LES_BUDGET_n
+!#############################
+module mode_write_les_budget_n
+!#############################
+
+implicit none
+
+private
 
-!     ######################
-      SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
-!     ######################
+public :: Write_les_budget_n
+
+contains
+
+!##########################################
+subroutine  Write_les_budget_n( tpdiafile )
+!##########################################
 !
 !
-!!****  *WRITE_LES_n* writes the LES final diagnostics for model _n 
-!!                         
+!!****  *Write_les_budget_n* writes the LES final diagnostics for model _n
+!!
 !!
 !!    PURPOSE
 !!    -------
@@ -50,36 +43,51 @@ END MODULE MODI_WRITE_LES_BUDGET_n
 !!    -------------
 !!      Original   07/02/00
 !!                 06/11/02 (V. Masson) new LES budgets
-!!  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 15/10/2020: restructure Les_diachro calls to use tfield_metadata_base type
+! --------------------------------------------------------------------------
+!
 !*      0. DECLARATIONS
 !          ------------
-!
-USE MODD_CST
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_CONF_n
-USE MODD_LES_BUDGET
-!
-USE MODE_ll
-!
-USE MODE_LES_DIACHRO
-!
+
+use modd_conf_n,      only: luserv
+use modd_cst,         only: xg
+use modd_field,       only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, &
+                            NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED,               &
+                            tfield_metadata_base, TYPEREAL
+use modd_io,          only: tfiledata
+use modd_les,         only: cles_norm_type, nles_k, xles_temp_mean_start, xles_temp_mean_end, xles_temp_sampling
+use modd_les_n,       only: nles_times,                                                                                   &
+                            xles_bu_res_ke, xles_bu_res_thl2, xles_bu_res_wthl,                                           &
+                            xles_bu_sbg_tke,                                                                              &
+                            xles_mean_dthldz, xles_mean_dudz, xles_mean_dvdz, xles_mean_dwdz,                             &
+                            xles_mean_th, xles_mean_thv, xles_mean_w,                                                     &
+                            xles_res_ddxa_thl_sbg_uaw, xles_res_ddxa_w_sbg_uathl, xles_res_ddxa_thl_sbg_uathl,            &
+                            xles_res_ddz_thl_sbg_w2,                                                                      &
+                            xles_res_w_sbg_thl2, xles_res_w_sbg_wthl,                                                     &
+                            xles_subgrid_diss_thl2,                                                                       &
+                            xles_subgrid_thl2, xles_subgrid_thlpz, xles_subgrid_thlthv, xles_subgrid_w2,                  &
+                            xles_subgrid_w2thl, xles_subgrid_wthl, xles_subgrid_wthl2, xles_subgrid_wu, xles_subgrid_wv,  &
+                            xles_z
+use modd_les_budget,  only: NLES_RELA, NLES_RAD,  NLES_GRAV, NLES_COR,  NLES_MICR, NLES_HTURB, NLES_VTURB, NLES_FORC,     &
+                            NLES_PRES, NLES_DIFF, NLES_CURV, NLES_PREF, NLES_DP,   NLES_TP,    NLES_TR,    NLES_DISS,     &
+                            NLES_TEND,  NLES_ADVR, NLES_ADVM,  NLES_NEST, NLES_MISC
+use modd_parameters,  only: XUNDEF
+
+use mode_les_diachro, only: Les_diachro
+
 IMPLICIT NONE
 !
 !
 !*      0.1  declarations of arguments
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
-CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
-!                                        ! or normalizations
 !
 !
 !*      0.2  declaration of local variables
 !
+integer, parameter :: NMAX_ILES = 40
+
 INTEGER :: ILES
 INTEGER :: ILES_STA
 INTEGER :: JLES
@@ -88,21 +96,34 @@ INTEGER :: ILES_P1, ILES_P2
 INTEGER :: JK ! vertical loop counter
 INTEGER :: JT ! temporal loop counter
 !
-CHARACTER(len=9), DIMENSION(:), ALLOCATABLE :: YSUBTITLE
-CHARACTER(len=8)                            :: YGROUP
+CHARACTER(len=9), DIMENSION(NMAX_ILES) :: YSUBTITLE
+CHARACTER(len=8)                       :: YGROUP
 !
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLES_BUDGET
 !
+logical                    :: gdoavg  ! Compute and store time average
+logical                    :: gdonorm ! Compute and store normalized field
+type(tfield_metadata_base) :: tzfield
 !-------------------------------------------------------------------------------
 !
 !*          Initializations
 !            ---------------
 !
-ALLOCATE(ZLES_BUDGET(NLES_K,NLES_TIMES,40))
-ALLOCATE(YSUBTITLE(40))
+ALLOCATE(ZLES_BUDGET(NLES_K,NLES_TIMES,NMAX_ILES))
 !
 ZLES_BUDGET=XUNDEF
 YSUBTITLE(:)=' '
+
+tzfield%ngrid = 0 !Not on the Arakawa grid
+tzfield%ntype = TYPEREAL
+tzfield%ndims = 3
+tzfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+tzfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+tzfield%ndimlist(3)  = NMNHDIM_BUDGET_TERM
+tzfield%ndimlist(4:) = NMNHDIM_UNUSED
+
+gdoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
+gdonorm = Trim( cles_norm_type ) /= 'NONE'
 !-------------------------------------------------------------------------------
 !
 !*      1.  total (resolved+subgrid) kinetic energy budget
@@ -409,9 +430,14 @@ END DO
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"resolved KE budget"//YSUBTITLE(:ILES),"m2 s-3", &
-                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
-!
+tzfield%cmnhname  = ygroup
+tzfield%cstdname  = ''
+tzfield%clongname = ygroup
+tzfield%ccomment  = 'resolved KE budget'
+tzfield%cunits    = 'm2 s-3'
+
+call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) )
+
 !-------------------------------------------------------------------------------
 !
 !
@@ -656,9 +682,14 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal variance budget"//YSUBTITLE(:ILES),"K2 s-1", &
-                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
-!
+tzfield%cmnhname  = ygroup
+tzfield%cstdname  = ''
+tzfield%clongname = ygroup
+tzfield%ccomment  = 'thetal variance budget'
+tzfield%cunits    = 'K2 s-1'
+
+call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) )
+
 !-------------------------------------------------------------------------------
 !
 !*      3.  temperature flux budget
@@ -966,15 +997,20 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Thl_SBG_UaW(:,:,1)       &
 !       -------
 !
 !
-CALL LES_DIACHRO_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),"thetal flux budget"//YSUBTITLE(:ILES),"m K s-2", &
-                       ZLES_BUDGET(:,:,:ILES),HLES_AVG)
-!
-!
+tzfield%cmnhname  = ygroup
+tzfield%cstdname  = ''
+tzfield%clongname = ygroup
+tzfield%ccomment  = 'thetal flux budget'
+tzfield%cunits    = 'm K s-2'
+
+call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), ysubtitle(:iles) )
+
 !-------------------------------------------------------------------------------
 !
 DEALLOCATE(ZLES_BUDGET)
-DEALLOCATE(YSUBTITLE)
 !
 !-------------------------------------------------------------------------------
 !
-END SUBROUTINE WRITE_LES_BUDGET_n 
+end subroutine Write_les_budget_n
+
+end module mode_write_les_budget_n
diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90
index 0d1dd441c3a6e9aa850b0ed48b6466692dbf4af2..595556a566827243497e934ab67194aeaf397065 100644
--- a/src/MNH/write_les_rt_budgetn.f90
+++ b/src/MNH/write_les_rt_budgetn.f90
@@ -48,20 +48,29 @@ subroutine  Write_les_rt_budget_n( tpdiafile )
 !
 !*      0. DECLARATIONS
 !          ------------
-!
-USE MODD_CST
+
+use modd_cst,         only: xg
 use modd_field,       only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, &
                             NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED,               &
                             tfield_metadata_base, TYPEREAL
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LES
-USE MODD_LES_n
-USE MODD_LES_BUDGET
-!
-USE MODE_ll
-!
-USE MODE_LES_DIACHRO
-!
+use modd_io,          only: tfiledata
+use modd_les,         only: cles_norm_type, nles_k, xles_temp_mean_start, xles_temp_mean_end, xles_temp_sampling
+use modd_les_n,       only: nles_times,                                                                                   &
+                            xles_bu_res_rt2, xles_bu_res_thlrt, xles_bu_res_wrt,                                          &
+                            xles_mean_drtdz, xles_mean_dthldz, xles_mean_thv, xles_mean_w,                                &
+                            xles_res_ddxa_rt_sbg_uart, xles_res_ddxa_rt_sbg_uaw, xles_res_ddxa_w_sbg_uart,                &
+                            xles_res_ddxa_rt_sbg_uathl, xles_res_ddxa_thl_sbg_uart,                                       &
+                            xles_res_ddz_rt_sbg_w2, xles_res_w_sbg_wrt, xles_res_w_sbg_rt2, xles_res_w_sbg_thlrt,         &
+                            xles_subgrid_diss_rt2, xles_subgrid_diss_thlrt, xles_subgrid_rt2, xles_subgrid_rtpz,          &
+                            xles_subgrid_rtthv, xles_subgrid_thlrt, xles_subgrid_w2, xles_subgrid_wrt, xles_subgrid_wrt2, &
+                            xles_subgrid_w2rt, xles_subgrid_wthl, xles_subgrid_wthlrt,                                    &
+                            xles_z
+use modd_les_budget,  only: NLES_RELA, NLES_RAD,  NLES_GRAV, NLES_COR, NLES_MICR, NLES_HTURB, NLES_VTURB, NLES_FORC, &
+                            NLES_PRES, NLES_DIFF, NLES_PREF, NLES_DP,  NLES_TR,   NLES_TEND,  NLES_ADVM,  NLES_NEST, NLES_MISC
+use modd_parameters,  only: XUNDEF
+
+use mode_les_diachro, only: Les_diachro
+
 IMPLICIT NONE
 !
 !
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index aa364d42d4d4e38db5ac2fcab393d0e29241aeac..e2434073f1033beb19654ff6f11380b5cb3b02fc 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -50,7 +50,7 @@ subroutine Write_les_sv_budget_n( tpdiafile )
 !          ------------
 !
 use modd_conf_n,      only: luserv
-USE MODD_CST,         only: xg
+use modd_cst,         only: xg
 use modd_field,       only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_SV, &
                             NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED,                                      &
                             tfield_metadata_base, TYPEREAL
@@ -64,9 +64,9 @@ use modd_les_n,       only: nles_times,
                             xles_subgrid_diss_sv2, xles_subgrid_sv2, xles_subgrid_svpz, xles_subgrid_svthv, &
                             xles_subgrid_w2, xles_subgrid_wsv, xles_subgrid_wsv2, xles_subgrid_w2sv,        &
                             xles_z
-USE MODD_LES_BUDGET,  only: NLES_RELA, NLES_GRAV, NLES_COR, NLES_HTURB, NLES_VTURB, NLES_FORC, NLES_PRES, &
+use modd_les_budget,  only: NLES_RELA, NLES_GRAV, NLES_COR, NLES_HTURB, NLES_VTURB, NLES_FORC, NLES_PRES, &
                             NLES_DIFF, NLES_DP, NLES_TR, NLES_TEND, NLES_ADVM, NLES_NEST, NLES_MISC
-USE MODD_NSV,         only: nsv
+use modd_nsv,         only: nsv
 use modd_parameters,  only: XUNDEF
 
 use mode_les_diachro, only: Les_diachro
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 846710566fabe4c0018cbc84d2d2db564f136337..6ec6dde61648f1e0affba7a1fbe32df7c49b8b20 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -83,10 +83,10 @@ USE MODE_ll
 USE MODE_LES_DIACHRO
 use mode_les_spec_n,            only: Les_spec_n
 USE MODE_MODELN_HANDLER
+use mode_write_les_budget_n,    only: Write_les_budget_n
 use mode_write_les_rt_budget_n, only: Write_les_rt_budget_n
 use mode_write_les_sv_budget_n, only: Write_les_sv_budget_n
 !
-USE MODI_WRITE_LES_BUDGET_n
 !
 IMPLICIT NONE
 !
@@ -1402,14 +1402,13 @@ IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN
 
 END IF
 !
+end do AVG
 !-------------------------------------------------------------------------------
 !
 !*      4.   LES budgets
 !            -----------
 !
-CALL WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
-
-end do AVG
+call Write_les_budget_n( tpdiafile )
 
 if ( luserv )  call Write_les_rt_budget_n( tpdiafile )