diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index 047f7ba96a071b7c9c0cdc042db4b143b029a864..8df42757e9a6a2818e9dfc4886050eabd6c7167d 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -1,5 +1,5 @@
 from django.db.models import F, Sum, Count, ExpressionWrapper
-from django.db.models.functions import TruncMonth
+from django.db.models.functions import Coalesce
 from lofar.sas.tmss.tmss.tmssapp import models
 from lofar.sas.tmss.tmss.exceptions import TaskOverlappingWarning
 
@@ -679,7 +679,7 @@ class FailureReport():
         for field_name in ['issue_type', 'issue_subtype']:
             group_aggregates = list(self.system_events.values(f'{field_name}__value')
                                               .annotate(count=Count(f'{field_name}__value'),
-                                                        total_duration=Sum(F('stop') - F('start'))))
+                                                        total_duration=Sum(Coalesce(F('stop'), datetime.utcnow()) - F('start'))))
 
             # convert durations to seconds and add derived values
             for d in group_aggregates:
@@ -699,12 +699,13 @@ class FailureReport():
         system_events = models.SystemEvent.objects.filter(severity__value=models.SystemEventSeverity.Choices.FAILURE.value).order_by('start')
 
         for event in system_events.all():
+            event_stop = event.stop if event.stop else datetime.utcnow()
             start_bin = datetime(year=event.start.year, month=event.start.month, day=1)
-            stop_bin = datetime(year=event.stop.year, month=event.stop.month, day=1)
+            stop_bin = datetime(year=event_stop.year, month=event_stop.month, day=1)
 
             # deal with event starting/stopping in same month
             if start_bin == stop_bin:
-                histogram[start_bin] = histogram.get(start_bin, 0) + (event.stop - event.start).total_seconds()
+                histogram[start_bin] = histogram.get(start_bin, 0) + (event_stop - event.start).total_seconds()
                 continue
 
             # deal with events wrapping over several months...
@@ -718,7 +719,7 @@ class FailureReport():
                 histogram[next_bin] = histogram.get(next_bin, 0) + seconds_in_month
                 next_bin += relativedelta(months=1)
             # ...account for partial month at stop
-            histogram[stop_bin] = histogram.get(stop_bin, 0) + (event.stop - stop_bin).total_seconds()
+            histogram[stop_bin] = histogram.get(stop_bin, 0) + (event_stop - stop_bin).total_seconds()
 
         # todo: Or should this be based on the time that was actually lost in SUs?
         #  This would do the trick (SU start time determines bin these fall into):
@@ -749,8 +750,8 @@ class FailureReport():
             unit_list.append({'name': unit.name,
                               'id': unit.id,
                               'status': unit.status.value,
-                              'on_sky_start_time': unit.on_sky_start_time.isoformat(),
-                              'on_sky_duration': unit.on_sky_duration.total_seconds(),
+                              'on_sky_start_time': unit.on_sky_start_time.isoformat() if unit.on_sky_start_time else None,
+                              'on_sky_duration': unit.on_sky_duration.total_seconds() if unit.on_sky_duration else None,
                               'subtasks': list(observation_subtasks.values_list('id', flat=True)),
                               'issue_type(s)': [event.issue_type.value for event in system_events_for_this_unit],
                               'issue_subtype(s)': [event.issue_subtype.value for event in system_events_for_this_unit],