diff --git a/src/MNH/mode_datetime.f90 b/src/MNH/mode_datetime.f90
index fc9f68267d6cca9e7d770dc7b3cfd86ba067ad52..2d999f56421a1be9b156962e9a02cd6f5e60ddcb 100644
--- a/src/MNH/mode_datetime.f90
+++ b/src/MNH/mode_datetime.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2018-2022 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.
@@ -7,6 +7,7 @@
 !  P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard)
 !  P. Wautelet 19/04/2019: use modd_precision kinds
 !  P. Wautelet 20/07/2021: modify DATETIME_TIME2REFERENCE and DATETIME_DISTANCE to allow correct computation with 32-bit floats
+!  P. Wautelet 27/10/2022: add + operator via DATETIME_TIME_ADD subroutine
 !-----------------------------------------------------------------
 MODULE MODE_DATETIME
 !
@@ -21,6 +22,7 @@ PRIVATE
 PUBLIC :: DATETIME_DISTANCE, DATETIME_CORRECTDATE
 PUBLIC :: OPERATOR(<)
 PUBLIC :: OPERATOR(>=)
+PUBLIC :: OPERATOR(+)
 !
 !Reference date (do not change it)
 !To work with DATETIME_TIME2REFERENCE, we assume the year is a multiple of 400 + 1 and the date is January 1st (and time=0.)
@@ -34,6 +36,10 @@ INTERFACE OPERATOR(>=)
   MODULE PROCEDURE DATETIME_GE
 END INTERFACE
 !
+INTERFACE OPERATOR(+)
+  MODULE PROCEDURE DATETIME_TIME_ADD
+END INTERFACE
+!
 CONTAINS
 !
 SUBROUTINE DATETIME_TIME2REFERENCE( TPDATE, KDAYS, PSEC )
@@ -140,7 +146,7 @@ PDIST = REAL( ( IDAYSEND - IDAYSBEG ) * (24*60*60) ) + ZSECEND - ZSECBEG
 !
 END SUBROUTINE DATETIME_DISTANCE
 !
-SUBROUTINE DATETIME_CORRECTDATE(TPDATE)
+PURE SUBROUTINE DATETIME_CORRECTDATE(TPDATE)
 !
 ! Correct the date if not in the correct interval
 ! Change the date if time is <0 or >=86400 s
@@ -232,7 +238,7 @@ TPDATE%xtime  = ZSEC
 END SUBROUTINE DATETIME_CORRECTDATE
 !
 !
-SUBROUTINE DATETIME_GETMONTHLGT(KYEAR,KMONTH,KLGT)
+PURE SUBROUTINE DATETIME_GETMONTHLGT(KYEAR,KMONTH,KLGT)
 !
 INTEGER, INTENT(IN)  :: KYEAR
 INTEGER, INTENT(IN)  :: KMONTH
@@ -256,7 +262,7 @@ END SELECT
 END SUBROUTINE DATETIME_GETMONTHLGT
 !
 !
-FUNCTION DATETIME_LT(TPT1, TPT2) RESULT (OLT)
+ELEMENTAL FUNCTION DATETIME_LT(TPT1, TPT2) RESULT (OLT)
 IMPLICIT NONE
 LOGICAL :: OLT
 TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
@@ -281,7 +287,7 @@ ENDIF
 END FUNCTION DATETIME_LT
 !
 !
-FUNCTION DATETIME_GE(TPT1, TPT2) RESULT (OLT)
+ELEMENTAL FUNCTION DATETIME_GE(TPT1, TPT2) RESULT (OLT)
 IMPLICIT NONE
 LOGICAL :: OLT
 TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
@@ -291,5 +297,21 @@ TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
 OLT = .NOT.DATETIME_LT(TPT1,TPT2)
 !
 END FUNCTION DATETIME_GE
-!
+
+
+ELEMENTAL FUNCTION DATETIME_TIME_ADD( TPIN, PTIME ) RESULT ( TPOUT )
+
+IMPLICIT NONE
+
+TYPE(DATE_TIME), INTENT(IN) :: TPIN  ! Start date
+REAL,            INTENT(IN) :: PTIME ! Added time
+TYPE(DATE_TIME) :: TPOUT             ! End date = start date + added time
+
+TPOUT = TPIN
+TPOUT%XTIME = TPOUT%XTIME + PTIME
+
+CALL DATETIME_CORRECTDATE( TPOUT )
+
+END FUNCTION DATETIME_TIME_ADD
+
 END MODULE MODE_DATETIME