diff --git a/src/libmtime_hl.f90 b/src/libmtime_hl.f90
index 49856205ff774a0a8c817f9b71d3dd0fea03744d..359543ee38927c602ea40c19c243ea294872cbf2 100644
--- a/src/libmtime_hl.f90
+++ b/src/libmtime_hl.f90
@@ -4,26 +4,27 @@
 !!
 !! @author  Luis Kornblueh, Max Planck Institute for Meteorology
 !! @author  Florian Prill, DWD
+!! @author  Jan Frederik Engels, DKRZ
 !!
 !! @defgroup FortranBindings libmtime high level Fortran language bindings
 !! @{
 !!
 module mtime_hl
 
-  USE, INTRINSIC :: iso_c_binding, ONLY: c_int32_t, c_int64_t, c_double
+  use, intrinsic :: iso_c_binding, only: c_int32_t, c_int64_t, c_double
   use mtime
 
   implicit none
 
   private
 
-  PUBLIC :: t_datetime, t_timedelta, t_juliandelta
-  PUBLIC :: t_timedeltaFromMilliseconds
-  PUBLIC :: min, max
-  PUBLIC ::  OPERATOR(*)
+  public :: t_datetime, t_timedelta, t_juliandelta
+  public :: t_timedeltaFromMilliseconds
+  public :: min, max
+  public :: operator(*)
 
   ! Re-export stuff from libmtime that is still needed
-  PUBLIC :: divisionquotienttimespan
+  public :: divisionquotienttimespan
 
 
   integer, parameter :: i8 = selected_int_kind(14)   !< at least 8 byte integer
@@ -39,35 +40,47 @@ module mtime_hl
   contains
 
     procedure :: assign_t_datetime
-    procedure :: day                       => t_datetime_day
-    procedure :: add_timedelta             => t_datetime_add_timedelta
-    procedure :: sub_timedelta             => t_datetime_sub_timedelta
-    procedure :: sub_datetime              => t_datetime_sub_datetime
-    procedure :: equal_datetime            => t_datetime_equal
-    procedure :: not_equal_datetime        => t_datetime_not_equal
-    procedure :: less_than_datetime        => t_datetime_less_than
-    procedure :: greater_than_datetime     => t_datetime_greater_than
-    procedure :: less_or_equal_datetime    => t_datetime_less_or_equal
-    procedure :: greater_or_equal_datetime => t_datetime_greater_or_equal
+    procedure :: day                               => t_datetime_day
+    procedure :: add_timedelta                     => t_datetime_add_timedelta
+    procedure :: sub_timedelta                     => t_datetime_sub_timedelta
+    procedure :: sub_datetime                      => t_datetime_sub_datetime
+    procedure :: equal_datetime                    => t_datetime_equal
+    procedure :: not_equal_datetime                => t_datetime_not_equal
+    procedure :: less_than_datetime                => t_datetime_less_than
+    procedure :: greater_than_datetime             => t_datetime_greater_than
+    procedure :: less_or_equal_datetime            => t_datetime_less_or_equal
+    procedure :: greater_or_equal_datetime         => t_datetime_greater_or_equal
+
+    procedure :: days_in_this_month_datetime       => t_datetime_days_in_this_month
+    procedure :: days_in_this_year_datetime        => t_datetime_days_in_this_year
+    procedure :: day_of_year_datetime              => t_datetime_day_of_year
+    procedure :: seconds_elapsed_in_month_datetime => t_datetime_seconds_elapsed_in_month
+    procedure :: seconds_elapsed_in_day_datetime   => t_datetime_seconds_elapsed_in_day
 
     procedure :: t_datetime_toString
     procedure :: t_datetime_to_posix_string
 
     procedure :: t_datetime_toJulianDay
 
-    generic   :: toString => t_datetime_toString, t_datetime_to_posix_string
-    generic   :: toJulianDay => t_datetime_toJulianDay
-
-    generic   :: assignment(=) =>  assign_t_datetime
-    generic   :: operator(+)   =>  add_timedelta
-    generic   :: operator(-)   =>  sub_timedelta
-    generic   :: operator(-)   =>  sub_datetime
-    generic   :: operator(==)  =>  equal_datetime
-    generic   :: operator(/=)  =>  not_equal_datetime
-    generic   :: operator(<)   =>  less_than_datetime
-    generic   :: operator(>)   =>  greater_than_datetime
-    generic   :: operator(<=)  =>  less_or_equal_datetime
-    generic   :: operator(>=)  =>  greater_or_equal_datetime
+    generic   :: toString                          => t_datetime_toString, t_datetime_to_posix_string
+    generic   :: toJulianDay                       => t_datetime_toJulianDay
+
+    generic   :: daysInThisMonth                   => days_in_this_month_datetime
+    generic   :: daysInThisYear                    => days_in_this_year_datetime
+    generic   :: dayOfYear                         => day_of_year_datetime
+    generic   :: secondsElapsedInMonth             => seconds_elapsed_in_month_datetime
+    generic   :: secondsElapsedInDay               => seconds_elapsed_in_day_datetime
+
+    generic   :: assignment(=)                     =>  assign_t_datetime
+    generic   :: operator(+)                       =>  add_timedelta
+    generic   :: operator(-)                       =>  sub_timedelta
+    generic   :: operator(-)                       =>  sub_datetime
+    generic   :: operator(==)                      =>  equal_datetime
+    generic   :: operator(/=)                      =>  not_equal_datetime
+    generic   :: operator(<)                       =>  less_than_datetime
+    generic   :: operator(>)                       =>  greater_than_datetime
+    generic   :: operator(<=)                      =>  less_or_equal_datetime
+    generic   :: operator(>=)                      =>  greater_or_equal_datetime
 
   end type t_datetime
 
@@ -121,7 +134,7 @@ module mtime_hl
     generic   :: operator(>)   =>  greater_than_datetime
     generic   :: operator(<=)  =>  less_or_equal_datetime
     generic   :: operator(>=)  =>  greater_or_equal_datetime
-    GENERIC   :: OPERATOR(*)   =>  scalar_multiply_long, scalar_multiply_int,         &
+    generic   :: operator(*)   =>  scalar_multiply_long, scalar_multiply_int,         &
       &                            scalar_multiply_real
 
   end type t_timedelta
@@ -131,19 +144,19 @@ module mtime_hl
     module procedure t_timedelta_assign_string
   end interface t_timedelta
 
-  INTERFACE t_timedeltaFromMilliseconds
-    MODULE PROCEDURE t_timedelta_assign_ms
-  END INTERFACE t_timedeltaFromMilliseconds
+  interface t_timedeltaFromMilliseconds
+    module procedure t_timedelta_assign_ms
+  end interface t_timedeltaFromMilliseconds
 
-  INTERFACE t_timedeltaFromSeconds
-    MODULE PROCEDURE t_timedelta_assign_sec
-  END INTERFACE t_timedeltaFromSeconds
+  interface t_timedeltaFromSeconds
+    module procedure t_timedelta_assign_sec
+  end interface t_timedeltaFromSeconds
 
-  INTERFACE OPERATOR(*)
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_long
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_int
-    MODULE PROCEDURE t_timedelta_scalar_multiply_inv_real
-  END INTERFACE OPERATOR(*)
+  interface operator(*)
+    module procedure t_timedelta_scalar_multiply_inv_long
+    module procedure t_timedelta_scalar_multiply_inv_int
+    module procedure t_timedelta_scalar_multiply_inv_real
+  end interface operator(*)
 
 
   interface min
@@ -167,14 +180,14 @@ module mtime_hl
 
   !> Wrapper class for "mtime" data type "juliandelta".
   !
-  TYPE t_juliandelta
-    PRIVATE
-    TYPE(juliandelta) :: jd
-  END TYPE t_juliandelta
+  type t_juliandelta
+    private
+    type(juliandelta) :: jd
+  end type t_juliandelta
 
-  INTERFACE t_juliandelta
-    MODULE PROCEDURE t_juliandelta_assign_raw
-  END INTERFACE t_juliandelta
+  interface t_juliandelta
+    module procedure t_juliandelta_assign_raw
+  end interface t_juliandelta
 
 
 
@@ -182,17 +195,17 @@ contains
 
   !___________________________________________________________________________
   ! auxiliary routine: handle error code.
-  SUBROUTINE handle_errno(errno, routine_str, lineno)
-    INTEGER, INTENT(IN) :: errno
-    INTEGER, INTENT(IN) :: lineno
-    CHARACTER(LEN=*), INTENT(IN) :: routine_str
-    CHARACTER(len=max_mtime_error_str_len)     :: error_str
-    IF (errno /= no_error) THEN
-      CALL mtime_strerror(errno, error_str)
-      WRITE (error_str,'(a,a,i0)') TRIM(error_str), " :: line ", lineno
-      CALL finish_mtime(routine_str, error_str)
-    END IF
-  END SUBROUTINE handle_errno
+  subroutine handle_errno(errno, routine_str, lineno)
+    integer, intent(IN) :: errno
+    integer, intent(IN) :: lineno
+    character(LEN=*), intent(IN) :: routine_str
+    character(len=max_mtime_error_str_len)     :: error_str
+    if (errno /= no_error) then
+      call mtime_strerror(errno, error_str)
+      write (error_str,'(a,a,i0)') trim(error_str), " :: line ", lineno
+      call finish_mtime(routine_str, error_str)
+    end if
+  end subroutine handle_errno
 
 
   !___________________________________________________________________________
@@ -204,9 +217,9 @@ contains
     class(t_datetime), intent(out) :: to
     class(t_datetime), intent(in) :: from
     type(datetime), pointer :: dt_tmp
-    INTEGER :: errno
+    integer :: errno
     dt_tmp => newdatetime(from%dt, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     to%dt = dt_tmp
     call deallocatedatetime(dt_tmp)
   end subroutine assign_t_datetime
@@ -216,9 +229,9 @@ contains
   type(t_datetime) function t_datetime_assign_string(dt_string)
     character(len=*), intent(in) :: dt_string
     type(datetime), pointer :: dt_tmp
-    INTEGER :: errno
+    integer :: errno
     dt_tmp => newdatetime(dt_string, errno)
-    CALL handle_errno(errno, __FILE__,  __LINE__)
+    call handle_errno(errno, __FILE__,  __LINE__)
     t_datetime_assign_string%dt = dt_tmp
     call deallocatedatetime(dt_tmp)
   end function t_datetime_assign_string
@@ -239,10 +252,10 @@ contains
     type(datetime), pointer              :: dt_tmp
     integer                              :: errno
     dt_tmp => newdatetime(this%dt, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    CALL datetimetostring(dt_tmp, t_datetime_toString, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    CALL deallocatedatetime(dt_tmp)
+    call handle_errno(errno, __FILE__, __LINE__)
+    call datetimetostring(dt_tmp, t_datetime_toString, errno)
+    call handle_errno(errno, __FILE__, __LINE__)
+    call deallocatedatetime(dt_tmp)
   end function t_datetime_toString
 
    ! Convert t_datetime object to string.
@@ -254,20 +267,20 @@ contains
     type(datetime), pointer              :: dt_tmp
     integer                              :: errno
     dt_tmp => newdatetime(this%dt, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    CALL datetimetoposixstring(dt_tmp, t_datetime_to_posix_string, format_string, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    CALL deallocatedatetime(dt_tmp)
+    call handle_errno(errno, __FILE__, __LINE__)
+    call datetimetoposixstring(dt_tmp, t_datetime_to_posix_string, format_string, errno)
+    call handle_errno(errno, __FILE__, __LINE__)
+    call deallocatedatetime(dt_tmp)
   end function t_datetime_to_posix_string
 
-  FUNCTION t_datetime_toJulianDay(this) RESULT(jd)
-    CLASS(t_datetime), INTENT(in) :: this
-    TYPE(t_julianday) :: jd
-    INTEGER :: errno
+  function t_datetime_toJulianDay(this) result(jd)
+    class(t_datetime), intent(in) :: this
+    type(t_julianday) :: jd
+    integer :: errno
 
-    CALL getJulianDayFromDatetime(this%dt, jd%jd, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-  END FUNCTION t_datetime_toJulianDay
+    call getJulianDayFromDatetime(this%dt, jd%jd, errno)
+    call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_toJulianDay
 
   ! Addition of time interval to datetime object.
   !
@@ -277,11 +290,11 @@ contains
     class (t_timedelta), intent(in) :: td
     type(datetime),  pointer        :: dt_tmp
     type(timedelta), pointer        :: td_tmp
-    INTEGER                         :: errno
+    integer                         :: errno
     dt_tmp => newDatetime(this%dt, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp => newTimedelta(td%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     dt_tmp = dt_tmp + td_tmp
     dt_td_sum%dt = dt_tmp
     call deallocateDatetime(dt_tmp)
@@ -296,11 +309,11 @@ contains
     class (t_timedelta), intent(in) :: td
     type(datetime),  pointer        :: dt_tmp
     type(timedelta), pointer        :: td_tmp
-    INTEGER                         :: errno
+    integer                         :: errno
     dt_tmp => newDatetime(this%dt, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp => newTimedelta(td%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     if (td_tmp%sign == "+") then
       td_tmp%sign = "-"
     else
@@ -359,6 +372,45 @@ contains
     t_datetime_greater_or_equal = (this%dt >= dt%dt)
   end function t_datetime_greater_or_equal
 
+  function t_datetime_days_in_this_month(this)
+    class (t_datetime),  intent(in) :: this
+    integer(c_int) :: t_datetime_days_in_this_month
+    integer :: errno
+    t_datetime_days_in_this_month = getNoOfDaysInMonthDateTime(this%dt, errno)
+    if (errno /= no_error) call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_days_in_this_month
+
+  function t_datetime_days_in_this_year(this)
+    class (t_datetime),  intent(in) :: this
+    integer(c_int) :: t_datetime_days_in_this_year
+    integer :: errno
+    t_datetime_days_in_this_year = getNoOfDaysInYearDateTime(this%dt, errno)
+    if (errno /= no_error) call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_days_in_this_year
+
+  function t_datetime_day_of_year(this)
+    class (t_datetime),  intent(in) :: this
+    integer(c_int) :: t_datetime_day_of_year
+    integer :: errno
+    t_datetime_day_of_year = getDayOfYearFromDateTime(this%dt, errno)
+    if (errno /= no_error) call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_day_of_year
+
+  function t_datetime_seconds_elapsed_in_month(this)
+    class (t_datetime),  intent(in) :: this
+    integer(c_int64_t) :: t_datetime_seconds_elapsed_in_month
+    integer :: errno
+    t_datetime_seconds_elapsed_in_month = getNoOfSecondsElapsedInMonthDateTime(this%dt, errno)
+    if (errno /= no_error) call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_seconds_elapsed_in_month
+
+  function t_datetime_seconds_elapsed_in_day(this)
+    class (t_datetime),  intent(in) :: this
+    integer(c_int64_t) :: t_datetime_seconds_elapsed_in_day
+    integer :: errno
+    t_datetime_seconds_elapsed_in_day = getNoOfSecondsElapsedInDayDateTime(this%dt, errno)
+    if (errno /= no_error) call handle_errno(errno, __FILE__, __LINE__)
+  end function t_datetime_seconds_elapsed_in_day
   !___________________________________________________________________________
   ! timedelta section:
   !
@@ -368,9 +420,9 @@ contains
     class(t_timedelta), intent(out) :: to
     class(t_timedelta), intent(in)  :: from
     type(timedelta), pointer        :: td_tmp
-    INTEGER                         :: errno
+    integer                         :: errno
     td_tmp => newTimedelta(from%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     to%td = td_tmp
     to%td%sign = td_tmp%sign
     call deallocateTimedelta(td_tmp)
@@ -381,10 +433,10 @@ contains
   type(t_timedelta) function t_timedelta_assign_string(td_string)
     character(len=*), intent(in) :: td_string
     type(timedelta), pointer     :: td_tmp
-    INTEGER                      :: errno
+    integer                      :: errno
     td_tmp => newtimedelta(td_string, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    IF (.NOT. ASSOCIATED(td_tmp)) RETURN
+    call handle_errno(errno, __FILE__, __LINE__)
+    if (.not. associated(td_tmp)) return
     t_timedelta_assign_string%td = td_tmp
     t_timedelta_assign_string%td%sign = td_tmp%sign
     call deallocatetimedelta(td_tmp)
@@ -396,11 +448,11 @@ contains
     integer, intent(in)                  :: td_ms
     type(timedelta), pointer             :: td_tmp
     character(len=max_timedelta_str_len) :: td_string
-    INTEGER                              :: errno
-    CALL getptstringfromms(INT(td_ms,i8), td_string, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    integer                              :: errno
+    call getptstringfromms(int(td_ms,i8), td_string, errno)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp => newtimedelta(td_string, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     t_timedelta_assign_ms%td = td_tmp
     t_timedelta_assign_ms%td%sign = td_tmp%sign
     call deallocatetimedelta(td_tmp)
@@ -408,163 +460,163 @@ contains
 
   ! constructor for integer seconds (integer)
   !
-  TYPE(t_timedelta) FUNCTION t_timedelta_assign_sec(td_sec)
-    INTEGER, INTENT(in) :: td_sec
+  type(t_timedelta) function t_timedelta_assign_sec(td_sec)
+    integer, intent(in) :: td_sec
     t_timedelta_assign_sec = t_timedelta_assign_ms(td_sec*1000)
-  END FUNCTION t_timedelta_assign_sec
+  end function t_timedelta_assign_sec
 
 
-  LOGICAL FUNCTION t_timedelta_equal(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_equal(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_equal = (this%td == td%td)
-  END FUNCTION t_timedelta_equal
+  end function t_timedelta_equal
 
-  LOGICAL FUNCTION t_timedelta_not_equal(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_not_equal(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_not_equal = (this%td /= td%td)
-  END FUNCTION t_timedelta_not_equal
+  end function t_timedelta_not_equal
 
-  LOGICAL FUNCTION t_timedelta_less_than(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_less_than(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_less_than = (this%td < td%td)
-  END FUNCTION t_timedelta_less_than
+  end function t_timedelta_less_than
 
-  LOGICAL FUNCTION t_timedelta_greater_than(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_greater_than(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_greater_than = (this%td > td%td)
-  END FUNCTION t_timedelta_greater_than
+  end function t_timedelta_greater_than
 
-  LOGICAL FUNCTION t_timedelta_less_than_or_equal(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_less_than_or_equal(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_less_than_or_equal = (this%td <= td%td)
-  END FUNCTION t_timedelta_less_than_or_equal
+  end function t_timedelta_less_than_or_equal
 
-  LOGICAL FUNCTION t_timedelta_greater_than_or_equal(this, td)
-    CLASS (t_timedelta),  INTENT(in) :: this
-    CLASS (t_timedelta),  INTENT(in) :: td
+  logical function t_timedelta_greater_than_or_equal(this, td)
+    class (t_timedelta),  intent(in) :: this
+    class (t_timedelta),  intent(in) :: td
     t_timedelta_greater_than_or_equal = (this%td >= td%td)
-  END FUNCTION t_timedelta_greater_than_or_equal
+  end function t_timedelta_greater_than_or_equal
 
 
 
-  FUNCTION t_timedelta_scalar_multiply_long (this, lambda) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int64_t),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+  function t_timedelta_scalar_multiply_long (this, lambda) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    integer(c_int64_t),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_long
-
-  FUNCTION t_timedelta_scalar_multiply_inv_long(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int64_t),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_long
+
+  function t_timedelta_scalar_multiply_inv_long(lambda, this) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    integer(c_int64_t),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_inv_long
-
-  FUNCTION t_timedelta_scalar_multiply_int (this, lambda) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int32_t),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_inv_long
+
+  function t_timedelta_scalar_multiply_int (this, lambda) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    integer(c_int32_t),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_int
-
-  FUNCTION t_timedelta_scalar_multiply_inv_int(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    INTEGER(c_int32_t),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_int
+
+  function t_timedelta_scalar_multiply_inv_int(lambda, this) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    integer(c_int32_t),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_inv_int
-
-  FUNCTION t_timedelta_scalar_multiply_real (this, lambda) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    REAL(c_double),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_inv_int
+
+  function t_timedelta_scalar_multiply_real (this, lambda) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    real(c_double),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_real
-
-  FUNCTION t_timedelta_scalar_multiply_inv_real(lambda, this) RESULT(scaled_td)
-    TYPE(t_timedelta), TARGET :: scaled_td
-    REAL(c_double),       INTENT(in) :: lambda
-    CLASS(t_timedelta), TARGET, INTENT(in) :: this
-    TYPE(timedelta), POINTER             :: td_tmp, td_tmp2
-    INTEGER :: errno
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_real
+
+  function t_timedelta_scalar_multiply_inv_real(lambda, this) result(scaled_td)
+    type(t_timedelta), target :: scaled_td
+    real(c_double),       intent(in) :: lambda
+    class(t_timedelta), target, intent(in) :: this
+    type(timedelta), pointer             :: td_tmp, td_tmp2
+    integer :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     td_tmp2           = td_tmp * lambda
-    IF (ASSOCIATED(td_tmp2)) THEN
-      CALL handle_errno(general_arithmetic_error, __FILE__, __LINE__)
-      RETURN
-    END IF
+    if (associated(td_tmp2)) then
+      call handle_errno(general_arithmetic_error, __FILE__, __LINE__)
+      return
+    end if
     scaled_td%td      = td_tmp2
     scaled_td%td%sign = td_tmp2%sign
-    IF (ASSOCIATED(td_tmp))  CALL deallocatetimedelta(td_tmp)
-    IF (ASSOCIATED(td_tmp2)) CALL deallocatetimedelta(td_tmp2)
-  END FUNCTION t_timedelta_scalar_multiply_inv_real
+    if (associated(td_tmp))  call deallocatetimedelta(td_tmp)
+    if (associated(td_tmp2)) call deallocatetimedelta(td_tmp2)
+  end function t_timedelta_scalar_multiply_inv_real
 
 
 
@@ -574,49 +626,49 @@ contains
     character(len=max_timedelta_str_len) :: t_timedelta_toString
     class (t_timedelta)                  :: this
     type(timedelta), pointer             :: td_tmp
-    INTEGER                              :: errno
+    integer                              :: errno
     td_tmp => newtimedelta(this%td, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
-    CALL timedeltatostring(td_tmp, t_timedelta_toString, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
+    call timedeltatostring(td_tmp, t_timedelta_toString, errno)
+    call handle_errno(errno, __FILE__, __LINE__)
     call deallocatetimedelta(td_tmp)
   end function t_timedelta_toString
 
   function t_timedelta_divideInSecondsBy (this, divisor) result(quotient)
-     CLASS(t_timedelta), INTENT(in) :: this
-     TYPE(t_timedelta),  INTENT(in) :: divisor
-     TYPE(divisionquotienttimespan) :: quotient
+     class(t_timedelta), intent(in) :: this
+     type(t_timedelta),  intent(in) :: divisor
+     type(divisionquotienttimespan) :: quotient
 
-     CALL divideTimeDeltaInSeconds(this%td, divisor%td, quotient)
+     call divideTimeDeltaInSeconds(this%td, divisor%td, quotient)
   end function t_timedelta_divideInSecondsBy
 
   function t_timedelta_toSeconds (this, td) result(seconds)
-     CLASS(t_timedelta), INTENT(in) :: this
-     TYPE(t_datetime),   INTENT(in) :: td
-     INTEGER(c_int64_t)             :: seconds
+     class(t_timedelta), intent(in) :: this
+     type(t_datetime),   intent(in) :: td
+     integer(c_int64_t)             :: seconds
 
      seconds = getTotalSecondsTimeDelta(this%td, td%dt)
   end function t_timedelta_toSeconds
 
   function t_timedelta_toMilliSeconds (this, td) result(ms)
-     CLASS(t_timedelta), INTENT(in) :: this
-     TYPE(t_datetime),   INTENT(in) :: td
-     INTEGER(c_int64_t)             :: ms
+     class(t_timedelta), intent(in) :: this
+     type(t_datetime),   intent(in) :: td
+     integer(c_int64_t)             :: ms
 
      ms = getTotalMilliSecondsTimeDelta(this%td, td%dt)
   end function t_timedelta_toMilliSeconds
 
-  FUNCTION t_julianDay_getDay (this) result(d)
-     CLASS(t_julianday), INTENT(in) :: this
-     INTEGER(c_int64_t) :: d
+  function t_julianDay_getDay (this) result(d)
+     class(t_julianday), intent(in) :: this
+     integer(c_int64_t) :: d
      d = this%jd%day
-  END FUNCTION t_julianDay_getDay
+  end function t_julianDay_getDay
 
-  FUNCTION t_julianday_getFractionOfDayInMS (this) result(ms)
-     CLASS(t_julianday), INTENT(in) :: this
-     INTEGER(c_int64_t) :: ms
+  function t_julianday_getFractionOfDayInMS (this) result(ms)
+     class(t_julianday), intent(in) :: this
+     integer(c_int64_t) :: ms
      ms = this%jd%ms
-  END FUNCTION t_julianday_getFractionOfDayInMS
+  end function t_julianday_getFractionOfDayInMS
 
   function t_datetime_min(a,b) result(res)
     type(t_datetime) :: a,b
@@ -641,19 +693,19 @@ contains
   end function t_datetime_max
 
 
-  FUNCTION t_juliandelta_assign_raw(sign,day, ms)
-    TYPE(t_juliandelta) :: t_juliandelta_assign_raw
-    CHARACTER(c_char),  INTENT(in) :: sign
-    INTEGER(c_int64_t), INTENT(in) :: day
-    INTEGER(c_int64_t), INTENT(in) :: ms
-    TYPE(juliandelta), POINTER :: jd_tmp
-    INTEGER :: errno
+  function t_juliandelta_assign_raw(sign,day, ms)
+    type(t_juliandelta) :: t_juliandelta_assign_raw
+    character(c_char),  intent(in) :: sign
+    integer(c_int64_t), intent(in) :: day
+    integer(c_int64_t), intent(in) :: ms
+    type(juliandelta), pointer :: jd_tmp
+    integer :: errno
     jd_tmp => newJuliandelta(sign,day,ms, errno)
-    CALL handle_errno(errno, __FILE__, __LINE__)
+    call handle_errno(errno, __FILE__, __LINE__)
     t_juliandelta_assign_raw%jd = jd_tmp
     t_juliandelta_assign_raw%jd%sign = jd_tmp%sign
-    IF (ASSOCIATED(jd_tmp))  CALL deallocateJuliandelta(jd_tmp)
-  END FUNCTION t_juliandelta_assign_raw
+    if (associated(jd_tmp))  call deallocateJuliandelta(jd_tmp)
+  end function t_juliandelta_assign_raw
 
 
 end module mtime_hl