diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index dce2773ea7ba498e2b03bfd5308d23aca1cd5481..6627a8eff08a032e77f4391ecf414a04e710e904 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -11,6 +11,7 @@
 !  P. Wautelet 14/08/2020: deduplicate LES_DIACHRO* subroutines
 !  P. Wautelet    10/2020: restructure subroutines to use tfield_metadata_base type
 !  P. Wautelet 03/03/2021: budgets: add tbudiachrometadata type (useful to pass more information to Write_diachro)
+!  P. Wautelet 11/03/2021: budgets: remove ptrajx/y/z optional dummy arguments of Write_diachro
 !-----------------------------------------------------------------
 !#######################
 MODULE MODE_LES_DIACHRO
@@ -888,8 +889,6 @@ integer                                                   :: iles_k
 integer                                                   :: iil, iih, ijl, ijh, ikl, ikh  ! Cartesian area relatively to the
                                                                                            ! entire domain
 integer                                                   :: jk                            ! Vertical loop counter
-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
 type(tfield_metadata_base), dimension(:),     allocatable :: tzfields
 !------------------------------------------------------------------------------
@@ -897,8 +896,6 @@ type(tfield_metadata_base), dimension(:),     allocatable :: tzfields
 iles_k = Size( pfield, 1 )
 
 ! Initialization of diachro variables for les (z,t) profiles
-Allocate( ztrajx(1,      1, Size( pfield, 4 )) )
-Allocate( ztrajy(1,      1, Size( pfield, 4 )) )
 Allocate( ztrajz(iles_k, 1, Size( pfield, 4 )) )
 Allocate( ycomment(Size( pfield, 3 )) )
 Allocate( ytitle  (Size( pfield, 3 )) )
@@ -911,9 +908,6 @@ ijh = nles_current_jsup
 ikl = nles_levels(1)
 ikh = nles_levels(iles_k)
 
-ztrajx(:, :, :) = ( iil + iih ) / 2
-ztrajy(:, :, :) = ( ijl + ijh ) / 2
-
 if ( Present( hsuffixes ) ) then
   if ( Size( hsuffixes ) /= Size( pfield, 3) ) &
     call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'wrong size for hsuffixes (' // Trim( tpfield%cmnhname ) // ')' )
@@ -1033,7 +1027,8 @@ if ( iresp == 0 .and. any( zfield /= XUNDEF ) ) then
   tzbudiachro%cgroupname = ygroup
   tzbudiachro%cname      = ygroup
   !tzbudiachro%ccomment   = DONE BEFORE
-  tzbudiachro%ctype      = 'SSOL'
+!   tzbudiachro%ctype      = 'SSOL'
+  tzbudiachro%ctype      = 'TLES' !T for trajectory (used in Write_diachro_lfi to add trajectory terms)
   tzbudiachro%licompress = .false.
   tzbudiachro%ljcompress = .false.
   tzbudiachro%lkcompress = .false.
@@ -1044,8 +1039,7 @@ if ( iresp == 0 .and. any( zfield /= XUNDEF ) ) then
   tzbudiachro%nkl        = ikl
   tzbudiachro%nkh        = ikh
 
-  call Write_diachro( tpdiafile, tzbudiachro, tzfields, tzdates, zwork6, &
-                      ptrajx = ztrajx, ptrajy = ztrajy, ptrajz = ztrajz  )
+  call Write_diachro( tpdiafile, tzbudiachro, tzfields, tzdates, zwork6 )
 end if
 
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 769a5f975d06fe465ca345bf928616c827e9a57e..ba125f83c2d990624d67e1e2034a3753a25ee371 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -69,6 +69,7 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !  P. Wautelet 09/10/2020: bugfix: correction on IPROCZ when not LIMA (condition was wrong)
 !  P. Wautelet 09/10/2020: Write_diachro: use new datatype tpfields
 !  P. Wautelet 03/03/2021: budgets: add tbudiachrometadata type (useful to pass more information to Write_diachro)
+!  P. Wautelet 11/03/2021: budgets: remove ptrajx/y/z optional dummy arguments of Write_diachro
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -181,9 +182,6 @@ TYPE(FLYER),        INTENT(IN)       :: TPFLYER
 !
 !*      0.2  declaration of local variables for diachro
 !
-REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJX ! temporal series
-REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJY ! in t,x,y and z.
-REAL, DIMENSION(:,:,:),       ALLOCATABLE :: ZTRAJZ !
 REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal serie
 REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6    ! contains temporal serie to write
 REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORKZ6! contains temporal serie
@@ -240,9 +238,6 @@ IF (LORILAM) IPROC = IPROC + JPMODE*3
 IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (SIZE(TPFLYER%TSRAD)>0) IPROC = IPROC + 1
 !
-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))
@@ -253,12 +248,6 @@ ALLOCATE (YCOMMENTZ(IPROCZ))
 ALLOCATE (YTITLEZ (IPROCZ))
 ALLOCATE (YUNITZ  (IPROCZ))
 ALLOCATE (IGRIDZ  (IPROCZ))
-
-!
-ZTRAJX(1,:,1) = TPFLYER%X
-ZTRAJY(1,:,1) = TPFLYER%Y
-ZTRAJZ(1,:,1) = TPFLYER%Z
-!
 !
 IGRID  = 1
 YGROUP = TPFLYER%TITLE
@@ -879,7 +868,6 @@ tzbudiachro%ctype      = 'RSPL'
 ! tzbudiachro%nkh        = NOT SET (default values)
 
 call Write_diachro( tpdiafile, tzbudiachro, tzfields, tpflyer%tpdates, zw6, &
-                    ptrajx = ztrajx, ptrajy = ztrajy, ptrajz = ztrajz,      &
                     tpflyer = tpflyer                                       )
 
 deallocate( tzfields )
@@ -920,15 +908,12 @@ call Write_diachro( tpdiafile, tzbudiachro, tzfields, tpflyer%tpdates, zwz6, &
 
 deallocate( tzfields )
 
-DEALLOCATE (ZTRAJX)
-DEALLOCATE (ZTRAJY)
-DEALLOCATE (ZTRAJZ)
-DEALLOCATE (ZW6)    
+DEALLOCATE (ZW6)
 DEALLOCATE (YCOMMENT)
 DEALLOCATE (YTITLE  )
 DEALLOCATE (YUNIT   )
 DEALLOCATE (IGRID   )
-DEALLOCATE (ZWZ6)    
+DEALLOCATE (ZWZ6)
 DEALLOCATE (YCOMMENTZ)
 DEALLOCATE (YTITLEZ )
 DEALLOCATE (YUNITZ  )
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index c55511e3bc0e647911039e01a6236cf40cdcbc59..5bde039e5a555bc54433d38fec100851b27d3f46 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -17,8 +17,7 @@ contains
 
 ! #################################################################
 subroutine Write_diachro( tpdiafile, tpbudiachro, tpfields,       &
-                          tpdates, pvar,                          &
-                          ptrajx, ptrajy, ptrajz, osplit, tpflyer )
+                          tpdates, pvar, osplit, tpflyer )
 ! #################################################################
 !
 !!****  *WRITE_DIACHRO* - Ecriture d'un enregistrement dans un fichier
@@ -85,6 +84,8 @@ subroutine Write_diachro( tpdiafile, tpbudiachro, tpfields,       &
 !  P. Wautelet 09/10/2020: use new data type tpfields
 !  P. Wautelet 08/12/2020: merge budgets terms with different nbutshift in same group variables
 !  P. Wautelet 03/03/2021: add tbudiachrometadata type (useful to pass more information to Write_diachro)
+!  P. Wautelet 11/03/2021: remove ptrajx/y/z optional dummy arguments of Write_diachro
+!                          + get the trajectory data for LFI files differently
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -106,9 +107,6 @@ type(tbudiachrometadata),                            intent(in)           :: tpb
 class(tfield_metadata_base), dimension(:),           intent(in)           :: tpfields
 type(date_time),             dimension(:),           intent(in)           :: tpdates  !Used only for LFI files
 REAL,                        DIMENSION(:,:,:,:,:,:), INTENT(IN)           :: PVAR
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJX
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJY
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJZ
 logical,                                             intent(in), optional :: osplit
 type(flyer),                                         intent(in), optional :: tpflyer
 !
@@ -124,12 +122,12 @@ lpack = .false.
 
 #ifdef MNH_IOLFI
 if ( tpdiafile%cformat == 'LFI' .or. tpdiafile%cformat == 'LFICDF4' ) &
-  call Write_diachro_lfi( tpdiafile, tpbudiachro, tpfields, tpdates, pvar, ptrajx, ptrajy, ptrajz )
+  call Write_diachro_lfi( tpdiafile, tpbudiachro, tpfields, tpdates, pvar,         tpflyer )
 #endif
 
 #ifdef MNH_IOCDF4
 if ( tpdiafile%cformat == 'NETCDF4' .or. tpdiafile%cformat == 'LFICDF4' ) &
-  call Write_diachro_nc4( tpdiafile, tpbudiachro, tpfields, pvar, osplit, tpflyer )
+  call Write_diachro_nc4( tpdiafile, tpbudiachro, tpfields,          pvar, osplit, tpflyer )
 #endif
 
 lpack = gpack
@@ -138,14 +136,16 @@ end subroutine Write_diachro
 
 #ifdef MNH_IOLFI
 !-----------------------------------------------------------------------------
-subroutine Write_diachro_lfi( tpdiafile, tpbudiachro, tpfields, tpdates, pvar, &
-                              ptrajx, ptrajy, ptrajz )
+subroutine Write_diachro_lfi( tpdiafile, tpbudiachro, tpfields, tpdates, pvar, tpflyer )
 
+use modd_aircraft_balloon, only: flyer
 use modd_budget,         only: nbumask, nbutshift, nbusubwrite, tbudiachrometadata
 use modd_field,          only: NMNHDIM_ONE, NMNHDIM_UNKNOWN, NMNHDIM_FLYER_TIME, NMNHDIM_NOTLISTED, NMNHDIM_UNUSED, &
                                TYPECHAR, TYPEINT, TYPEREAL,                                                         &
                                tfield_metadata_base, tfielddata
 use modd_io,             only: tfiledata
+use modd_les,            only: nles_current_iinf, nles_current_isup, nles_current_jinf, nles_current_jsup, &
+                               nles_k, xles_current_z
 use modd_parameters,     only: jphext
 use modd_time,           only: tdtexp, tdtseg
 use modd_time_n,         only: tdtmod
@@ -162,9 +162,7 @@ type(tbudiachrometadata),                            intent(in)           :: tpb
 class(tfield_metadata_base), dimension(:),           intent(in)           :: tpfields
 type(date_time),             dimension(:),           intent(in)           :: tpdates
 real,                        dimension(:,:,:,:,:,:), intent(in)           :: pvar
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJX
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJY
-REAL,DIMENSION(:,:,:),                               INTENT(IN), OPTIONAL :: PTRAJZ
+type(flyer),                                         intent(in), optional :: tpflyer
 
 integer, parameter :: LFITITLELGT = 100
 integer, parameter :: LFIUNITLGT = 100
@@ -189,6 +187,7 @@ integer   ::   ji
 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR
 real, dimension(:,:), allocatable :: ztimes
 real, dimension(:,:), allocatable :: zdatime
+real, dimension(:,:,:), allocatable :: ztrajz
 TYPE(TFIELDDATA) :: TZFIELD
 type(tfiledata)  :: tzfile
 
@@ -244,20 +243,32 @@ INTRAJT=SIZE(tpdates)
 IKTRAJX=0; IKTRAJY=0; IKTRAJZ=0
 ITTRAJX=0; ITTRAJY=0; ITTRAJZ=0
 INTRAJX=0; INTRAJY=0; INTRAJZ=0
-IF(PRESENT(PTRAJX))THEN
-  IKTRAJX=SIZE(PTRAJX,1)
-  ITTRAJX=SIZE(PTRAJX,2)
-  INTRAJX=SIZE(PTRAJX,3)
+IF ( PRESENT( tpflyer ) ) THEN
+  IKTRAJX = 1
+  ITTRAJX = SIZE( tpflyer%x )
+  INTRAJX = 1
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
+  IKTRAJX = 1
+  ITTRAJX = 1
+  INTRAJX = IN
 ENDIF
-IF(PRESENT(PTRAJY))THEN
-  IKTRAJY=SIZE(PTRAJY,1)
-  ITTRAJY=SIZE(PTRAJY,2)
-  INTRAJY=SIZE(PTRAJY,3)
+IF ( PRESENT( tpflyer ) ) THEN
+  IKTRAJY = 1
+  ITTRAJY = SIZE( tpflyer%y )
+  INTRAJY = 1
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
+  IKTRAJY = 1
+  ITTRAJY = 1
+  INTRAJY = IN
 ENDIF
-IF(PRESENT(PTRAJZ))THEN
-  IKTRAJZ=SIZE(PTRAJZ,1)
-  ITTRAJZ=SIZE(PTRAJZ,2)
-  INTRAJZ=SIZE(PTRAJZ,3)
+IF ( PRESENT( tpflyer ) ) THEN
+  IKTRAJZ = 1
+  ITTRAJZ = SIZE( tpflyer%z )
+  INTRAJZ = 1
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
+  IKTRAJZ = IK
+  ITTRAJZ = 1
+  INTRAJZ = IN
 ENDIF
 
 IIMASK=0; IJMASK=0; IKMASK=0; ITMASK=0; INMASK=0; IPMASK=0
@@ -505,7 +516,7 @@ deallocate( ztimes )
 !
 ! 8eme enregistrement TRAJX
 !
-IF(PRESENT(PTRAJX))THEN
+IF(PRESENT(tpflyer))THEN
   TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJX'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJX'
@@ -516,12 +527,38 @@ IF(PRESENT(PTRAJX))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_Field_write(tzfile,TZFIELD,PTRAJX)
+  CALL IO_Field_write(tzfile,TZFIELD, Reshape( tpflyer%x, [1, Size( tpflyer%x), 1] ) )
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
+  TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJX'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJX'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = tpfields(1)%ngrid
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .FALSE.
+  CALL IO_Field_write(tzfile,TZFIELD, Reshape( &
+                       Spread( source = ( nles_current_iinf + nles_current_isup) / 2, dim = 1, ncopies = IN ), &
+                       [1, 1, IN] ) )
 ENDIF
 !
 ! 9eme enregistrement TRAJY
 !
-IF(PRESENT(PTRAJY))THEN
+IF(PRESENT(tpflyer))THEN
+  TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJY'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJY'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = tpfields(1)%ngrid
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .FALSE.
+  CALL IO_Field_write(tzfile,TZFIELD, Reshape( tpflyer%y, [1, Size( tpflyer%y), 1] ) )
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
   TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJY'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJY'
@@ -532,12 +569,14 @@ IF(PRESENT(PTRAJY))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_Field_write(tzfile,TZFIELD,PTRAJY)
+  CALL IO_Field_write(tzfile,TZFIELD, Reshape( &
+                       Spread( source = ( nles_current_jinf + nles_current_jsup) / 2, dim = 1, ncopies = IN ), &
+                       [1, 1, IN] ) )
 ENDIF
 !
 ! 10eme enregistrement TRAJZ
 !
-IF(PRESENT(PTRAJZ))THEN
+IF(PRESENT(tpflyer))THEN
   TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJZ'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJZ'
@@ -548,7 +587,25 @@ IF(PRESENT(PTRAJZ))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_Field_write(tzfile,TZFIELD,PTRAJZ)
+  CALL IO_Field_write(tzfile,TZFIELD, Reshape( tpflyer%z, [1, Size( tpflyer%z), 1] ) )
+ELSE IF ( tpbudiachro%ctype == 'TLES' ) THEN
+  TZFIELD%CMNHNAME   = TRIM(ygroup)//'.TRAJZ'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = TRIM(ygroup)//'.TRAJZ'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = TRIM(YCOMMENT)
+  TZFIELD%NGRID      = tpfields(1)%ngrid
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  TZFIELD%LTIMEDEP   = .FALSE.
+
+  Allocate( ztrajz(IK, 1, IN) )
+  do jj = 1, IK
+    ztrajz(jj, :, :) = xles_current_z(jj)
+  end do
+  CALL IO_Field_write(tzfile,TZFIELD,ztrajz)
+  Deallocate( ztrajz )
 ENDIF
 !
 ! 11eme enregistrement PDATIME