diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index 59c324a600eba5a8c9530ea29ab3f585834365cc..c64e166a71270886da7a841bc0a47d6c4669375c 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -302,10 +302,9 @@ def create_project_report(request: Request, project: models.Project) -> {}:
     """
     Create a project report as a JSON object.
     """
-    result = {'project': project.pk, 'quota': _get_quotas_from_project(request, project.pk),
-              'SUBs': (_get_subs_and_durations_from_project(project.pk))[0],
-              'durations': (_get_subs_and_durations_from_project(project.pk))[1],
-              'LTA dataproducts': _get_lta_dataproducts(project.name), 'SAPs': _get_saps(project.pk)}
+    subs, durations = _get_subs_and_durations_from_project(project.pk)
+    result = {'project': project.pk, 'quota': _get_quotas_from_project(request, project.pk), 'SUBs': subs,
+              'durations': durations, 'LTA dataproducts': _get_lta_dataproducts(project.name), 'SAPs': _get_saps(project.pk)}
 
     return result
 
diff --git a/SAS/TMSS/backend/test/t_adapter.py b/SAS/TMSS/backend/test/t_adapter.py
index c2fe8a494d66a4d990f12d58eabad8490380752e..8d29becaf7edae84856d7dcb6ab82370032c119a 100755
--- a/SAS/TMSS/backend/test/t_adapter.py
+++ b/SAS/TMSS/backend/test/t_adapter.py
@@ -538,23 +538,20 @@ class CycleReportTest(unittest.TestCase):
         self.assertEqual(data_per_site_and_cat['Preprocessing Pipeline']['size__sum'], dp_preprocessing_pip.size)
         self.assertEqual(data_per_site_and_cat['Pulsar Pipeline']['size__sum'], dp_pulsar_pip1.size + dp_pulsar_pip2.size)
 
-        # TODO: Avoid calculations in the code.
         # Assert usage_mode
-        total_sa_mode = reservation_no_project_sa_mode.duration + reservation_mixed_sa_mode.duration + reservation_project_sa_mode.duration
-        total_all_modes = reservation_no_project.duration + reservation_mixed.duration + reservation_project.duration + total_sa_mode
         usage_mode = result['usage_mode']
-        self.assertAlmostEqual(usage_mode['all modes']['total'], total_all_modes)
-        self.assertAlmostEqual(usage_mode['all modes']['observing'], reservation_project.duration+reservation_project_sa_mode.duration)
-        self.assertAlmostEqual(usage_mode['all modes']['idle/test'], reservation_mixed.duration+reservation_mixed_sa_mode.duration)
+        self.assertAlmostEqual(usage_mode['all modes']['total'], 3750, places=4)
+        self.assertAlmostEqual(usage_mode['all modes']['observing'], 1400, places=4)
+        self.assertAlmostEqual(usage_mode['all modes']['idle/test'], 850, places=4)
 
-        self.assertAlmostEqual(usage_mode['stand-alone mode']['total'], total_sa_mode)
-        self.assertAlmostEqual(usage_mode['stand-alone mode']['no project'], reservation_no_project_sa_mode.duration)
-        self.assertAlmostEqual(usage_mode['stand-alone mode']['project'], reservation_project_sa_mode.duration)
-        self.assertAlmostEqual(usage_mode['stand-alone mode']['mixed/no project'], reservation_mixed_sa_mode.duration)
+        self.assertAlmostEqual(usage_mode['stand-alone mode']['total'], 2350, places=4)
+        self.assertAlmostEqual(usage_mode['stand-alone mode']['no project'], 1200, places=4)
+        self.assertAlmostEqual(usage_mode['stand-alone mode']['project'], 800, places=4)
+        self.assertAlmostEqual(usage_mode['stand-alone mode']['mixed/no project'], 350, places=4)
 
-        self.assertAlmostEqual(usage_mode['ILT mode']['total'], total_all_modes-total_sa_mode)
-        self.assertAlmostEqual(usage_mode['ILT mode']['observing'], reservation_project.duration+reservation_project_sa_mode.duration - reservation_project_sa_mode.duration)
-        self.assertAlmostEqual(usage_mode['ILT mode']['idle/test'], reservation_mixed.duration+reservation_mixed_sa_mode.duration - reservation_mixed_sa_mode.duration)
+        self.assertAlmostEqual(usage_mode['ILT mode']['total'], 1400, places=4)
+        self.assertAlmostEqual(usage_mode['ILT mode']['observing'], 600, places=4)
+        self.assertAlmostEqual(usage_mode['ILT mode']['idle/test'], 500, places=4)
 
 
 class ProjectReportTest(unittest.TestCase):
@@ -594,12 +591,15 @@ class ProjectReportTest(unittest.TestCase):
         """
         Test create project extra action.
         """
-        # Create and set three SUBs and respectively set the following states: 'finished', 'cancelled', 'defined' (not cancelled)
+        # Create four SUBs and respectively set their states to: 'finished' (so we can create dataproducts and compare
+        # their sizes), blank (it may be whatever), 'cancelled' and 'defined' (which means not cancelled).
         succeeded_sub, _, succeeded_subtask = self._get_SUB_with_subtask_and_set_status('finished')
+        failed_sub, _, failed_subtask = self._get_SUB_with_subtask_and_set_status()
+        cancelled_sub, _, cancelled_subtask = self._get_SUB_with_subtask_and_set_status('cancelled')
+        not_cancelled_sub, _, not_cancelled_subtask = self._get_SUB_with_subtask_and_set_status('defined')
+        # Set workflow flags so we have a successful and a failed SUBs
         SchedulingUnitProcess.objects.create(su=succeeded_sub, results_accepted=True)
-        failed_sub, _, failed_subtask = self._get_SUB_with_subtask_and_set_status('cancelled')
         SchedulingUnitProcess.objects.create(su=failed_sub, results_accepted=False)
-        not_cancelled_sub, _, not_cancelled_subtask = self._get_SUB_with_subtask_and_set_status('defined')
 
         # Create SubtaskOutput and Dataproducts from subtask_output
         subtask_output = models.SubtaskOutput.objects.create(**SubtaskOutput_test_data(subtask=succeeded_subtask))
@@ -616,11 +616,11 @@ class ProjectReportTest(unittest.TestCase):
         self.assertEqual(result['quota'][0]['id'], self.project_quota.pk)
 
         # Assert durations are well calculated
-        # Note: there are three SUBs: one successful, one failed and one not cancelled. Each has a duration=600.
-        self.assertAlmostEqual(result['durations']['total'], 1800.0, places=4)
-        self.assertAlmostEqual(result['durations']['total_succeeded'], 600.0, places=4)
-        self.assertAlmostEqual(result['durations']['total_not_cancelled'], 1200.0, places=4)
-        self.assertAlmostEqual(result['durations']['total_failed'], 600.0, places=4)
+        # NOTE: The four SUBs (successful, failed, cancelled and not cancelled) have a duration of 600s each.
+        self.assertAlmostEqual(result['durations']['total'], 2400, places=4)
+        self.assertAlmostEqual(result['durations']['total_succeeded'], 600, places=4)
+        self.assertAlmostEqual(result['durations']['total_not_cancelled'], 1800, places=4)
+        self.assertAlmostEqual(result['durations']['total_failed'], 600, places=4)
 
         # There is only one finished SUB
         self.assertEqual(result['SUBs']['finished'][0]['id'], succeeded_sub.pk)