diff --git a/src/eventwrapper.f90 b/src/eventwrapper.f90
index cd4fd23ceebd79098bf51250eb9dc3d9403bc211..24fbd3b0831a44be6249f113972829f724643d3f 100644
--- a/src/eventwrapper.f90
+++ b/src/eventwrapper.f90
@@ -1,14 +1,14 @@
 MODULE event_wrapper
-  
+
   !TODO: create type-bound procedures get_c_ptr for t_datetime and t_timedelta
 
   implicit none
-  
+
   TYPE t_event
 
     !private
 
-    TYPE(t_event), POINTER               :: nextEventInGroup  
+    TYPE(t_event), POINTER               :: nextEventInGroup
 
     INTEGER(c_int64_t)                   :: eventId
     CHARACTER(len=max_eventname_str_len) :: eventName
@@ -41,7 +41,7 @@ MODULE event_wrapper
 
   CONTAINS
 
-    !> TODO: implement isAvtive .... 
+    !> TODO: implement isAvtive ....
     ! PROCEDURE :: trigger                   => t_event_trigger
     PROCEDURE :: getFirstDatetime          => t_event_getFirstDatetime
     PROCEDURE :: getInterval               => t_event_getInterval
@@ -53,7 +53,7 @@ MODULE event_wrapper
     PROCEDURE :: nextEvent                 => t_event_next_event
 
     PROCEDURE :: get_c_pointer             => t_event_get_c_pointer
-    
+
   END TYPE t_event
 
   INTERFACE t_event
@@ -67,30 +67,30 @@ CONTAINS
 
     TYPE(c_ptr) :: c_pointer
     TYPE(event), POINTER :: event_pointer
-    
+
     event_pointer => newEvent(! to fill)
-    
+
     event_pointer%nextEventInGroup                   = this%nextEventInGroup%get_c_pointer()
-    event_pointer%eventId                            = this%eventId                       
-    event_pointer%eventName                          = this%eventName                     
-    event_pointer%eventsLastEvaluationDateTime       = this%eventsLastEvaluationDateTime%get_c_pointer()  
-    event_pointer%eventReferenceDatetime             = this%eventReferenceDatetime%get_c_pointer()        
-    event_pointer%eventFirstDatetime                 = this%eventFirstDatetime%get_c_pointer()            
-    event_pointer%eventLastDatetime                  = this%eventLastDatetime%get_c_pointer()             
-    event_pointer%eventInterval                      = this%eventInterval%get_c_pointer()                 
-    event_pointer%triggerCurrentEvent                = this%triggerCurrentEvent           
-    event_pointer%nextEventIsFirst                   = this%nextEventIsFirst              
-    event_pointer%eventisFirstInDay                  = this%eventisFirstInDay             
-    event_pointer%eventisFirstInMonth                = this%eventisFirstInMonth           
-    event_pointer%eventisFirstInYear                 = this%eventisFirstInYear            
-    event_pointer%eventisLastInDay                   = this%eventisLastInDay              
-    event_pointer%eventisLastInMonth                 = this%eventisLastInMonth            
-    event_pointer%eventisLastInYear                  = this%eventisLastInYear             
-    event_pointer%triggerNextEventDateTime           = this%triggerNextEventDateTime%get_c_pointer()      
+    event_pointer%eventId                            = this%eventId
+    event_pointer%eventName                          = this%eventName
+    event_pointer%eventsLastEvaluationDateTime       = this%eventsLastEvaluationDateTime%get_c_pointer()
+    event_pointer%eventReferenceDatetime             = this%eventReferenceDatetime%get_c_pointer()
+    event_pointer%eventFirstDatetime                 = this%eventFirstDatetime%get_c_pointer()
+    event_pointer%eventLastDatetime                  = this%eventLastDatetime%get_c_pointer()
+    event_pointer%eventInterval                      = this%eventInterval%get_c_pointer()
+    event_pointer%triggerCurrentEvent                = this%triggerCurrentEvent
+    event_pointer%nextEventIsFirst                   = this%nextEventIsFirst
+    event_pointer%eventisFirstInDay                  = this%eventisFirstInDay
+    event_pointer%eventisFirstInMonth                = this%eventisFirstInMonth
+    event_pointer%eventisFirstInYear                 = this%eventisFirstInYear
+    event_pointer%eventisLastInDay                   = this%eventisLastInDay
+    event_pointer%eventisLastInMonth                 = this%eventisLastInMonth
+    event_pointer%eventisLastInYear                  = this%eventisLastInYear
+    event_pointer%triggerNextEventDateTime           = this%triggerNextEventDateTime%get_c_pointer()
     event_pointer%triggeredPreviousEventDateTime     = this%triggeredPreviousEventDateTime%get_c_pointer()
 
     c_pointer = C_LOC(event_pointer)
-    
+
   END FUNCTION t_event_get_c_pointer
 
   function isCurrentEventActive(this, my_datetime, plus_slack, minus_slack) result(ret)
@@ -103,13 +103,13 @@ CONTAINS
     type(c_ptr) :: this_ptr
     type(c_ptr) :: my_datetime_ptr
     type(c_ptr) :: plus_slack_ptr => c_null
-    type(c_ptr) :: minus_slack_ptr => c_null    
+    type(c_ptr) :: minus_slack_ptr => c_null
 
     this_ptr = this%get_c_ptr()
     my_datetime_ptr = my_Datetime%get_c_ptr()
-    
+
     if (present(plus_slack)) plus_slack_ptr = plus_slack%get_c_ptr()
-    if (present(minus_slack)) minus_slack_ptr = minus_slack%get_c_ptr()    
+    if (present(minus_slack)) minus_slack_ptr = minus_slack%get_c_ptr()
 
     ret = my_isCurrentEventActive(this_ptr, my_datetime_ptr, &
          &                        plus_slack_ptr, minus_slack_ptr)
@@ -118,7 +118,7 @@ CONTAINS
     CALL my_deallocatedatetime(my_datetime_ptr)
     IF (present(plus_slack) CALL deallocatetimedelta(plus_slack_ptr)
     IF (present(minus_slack) CALL deallocatetimedelta(minus_slack_ptr)
-    
+
   end function isCurrentEventActive
 
 END MODULE event_wrapper
diff --git a/src/libmtime_hl.f90 b/src/libmtime_hl.f90
index 76eb7f42dd5169ead12080d36175fbe7ec18e9ea..5661447b69174263e588bc59d02fc4429d34a292 100644
--- a/src/libmtime_hl.f90
+++ b/src/libmtime_hl.f90
@@ -19,7 +19,6 @@
 !!
 !! @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
 !! @{
@@ -371,6 +370,11 @@ MODULE mtime_hl
     MODULE PROCEDURE t_eventGroup_constructor
   END INTERFACE t_eventGroup
 
+  INTERFACE handle_errno
+    MODULE PROCEDURE handle_errno1
+    MODULE PROCEDURE handle_errno2
+  END INTERFACE handle_errno
+
   INTEGER :: event_group_id = 0
   INTEGER :: event_id       = 0
 
@@ -378,7 +382,7 @@ CONTAINS
 
   !___________________________________________________________________________
   ! auxiliary routine: handle error code.
-  SUBROUTINE handle_errno(errno, routine_str, lineno)
+  SUBROUTINE handle_errno1(errno, routine_str, lineno)
     INTEGER, INTENT(IN) :: errno
     INTEGER, INTENT(IN) :: lineno
     CHARACTER(LEN=*), INTENT(IN) :: routine_str
@@ -388,7 +392,21 @@ CONTAINS
       WRITE (error_str,'(a,a,i0)') TRIM(error_str), " :: line ", lineno
       CALL finish_mtime(routine_str, error_str)
     END IF
-  END SUBROUTINE handle_errno
+  END SUBROUTINE handle_errno1
+
+
+  !___________________________________________________________________________
+  ! auxiliary routine: handle error code.
+  SUBROUTINE handle_errno2(lcond, errno, routine_str, lineno)
+    LOGICAL, INTENT(IN) :: lcond
+    INTEGER, INTENT(IN) :: errno
+    INTEGER, INTENT(IN) :: lineno
+
+    CHARACTER(LEN=*), INTENT(IN) :: routine_str
+    CHARACTER(len=max_mtime_error_str_len)     :: error_str
+    if (lcond)  call handle_errno1(errno, routine_str, lineno)
+  END SUBROUTINE handle_errno2
+
 
 
   ! ================================================================================
@@ -418,12 +436,14 @@ CONTAINS
   !
   TYPE(t_datetime) FUNCTION t_datetime_assign_string(dt_string)
     CHARACTER(len=*), INTENT(in) :: dt_string
+    TYPE(c_ptr)             :: c_pointer
     TYPE(datetime), POINTER :: dt_tmp
     INTEGER :: errno
-    dt_tmp => newdatetime(dt_string, errno)
-    CALL handle_errno(errno, __FILE__,  __LINE__)
+    c_pointer = my_newdatetime(TRIM(ADJUSTL(dt_string))//c_null_char)
+    CALL handle_errno(.NOT. c_ASSOCIATED(c_pointer), 4 *100 + 1, __FILE__, __LINE__)
+    CALL c_f_pointer(c_pointer, dt_tmp)
     t_datetime_assign_string%dt = dt_tmp
-    CALL deallocatedatetime(dt_tmp)
+    CALL my_deallocatedatetime(c_pointer)
   END FUNCTION t_datetime_assign_string
 
   ! constructor for a datetime