diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
index 2d174984f09ed26989107c2362976a88515470c4..acee34210d383ccdbd59e157bc9966fe624aadb4 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
@@ -1,4 +1,6 @@
 import logging
+import typing
+
 logger = logging.getLogger(__name__)
 
 from copy import deepcopy
@@ -1733,8 +1735,12 @@ def get_observation_task_specification_with_check_for_calibrator(subtask):
         return task_spec
 
 
-def set_subtask_state_following_allowed_transitions(subtask: Subtask, state_value:str) -> Subtask:
+def set_subtask_state_following_allowed_transitions(subtask: typing.Union[Subtask, int], state_value:str) -> Subtask:
     '''helper function to set subtask state following allowed transitions'''
+    if isinstance(subtask, int):
+        # the given subtask is an id. Fetch object.
+        subtask = Subtask.objects.get(id=subtask)
+
     while subtask.state.value != state_value and (subtask.state.value not in (SubtaskState.Choices.FINISHED.value,
                                                                               SubtaskState.Choices.ERROR.value,
                                                                               SubtaskState.Choices.CANCELLED.value)):
diff --git a/SAS/TMSS/backend/test/t_observation_strategies_specification_and_scheduling_test.py b/SAS/TMSS/backend/test/t_observation_strategies_specification_and_scheduling_test.py
index ea14384ce3551ed12ec5040a1682f76dc52d8561..8988a1739810ed5b38e67bda3ac3acf0b8f422d3 100755
--- a/SAS/TMSS/backend/test/t_observation_strategies_specification_and_scheduling_test.py
+++ b/SAS/TMSS/backend/test/t_observation_strategies_specification_and_scheduling_test.py
@@ -101,6 +101,9 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
             self.assertEqual(False, strtobool(obs_parset.get('Observation.DataProducts.Output_InstrumentModel.enabled','false')))
             self.assertEqual(False, strtobool(obs_parset.get('Observation.DataProducts.Output_SkyImage.enabled','false')))
 
+        # import helper method to cycle through allowed state transitions
+        from lofar.sas.tmss.tmss.tmssapp.subtasks import set_subtask_state_following_allowed_transitions
+
         # setup: create a scheduling unit from the UC1 observation strategy template
         observing_strategy_templates = self.tmss_client.get_path_as_json_object('scheduling_unit_observing_strategy_template')
         self.assertGreater(len(observing_strategy_templates), 0)
@@ -155,12 +158,12 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(cal_obs1_output_dataproducts))
 
         # "mimic" that the cal_obs1_subtask starts running
-        self.tmss_client.set_subtask_status(cal_obs1_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(cal_obs1_subtask['id'], 'started')
         self.check_statuses(cal_obs1_subtask['id'], "started", "started", "observing")
 
         # "mimic" that the cal_obs1_subtask finished (including qa subtasks)
         for subtask in cal_obs1_task['subtasks']:
-            self.tmss_client.set_subtask_status(subtask['id'], 'finished')
+            set_subtask_state_following_allowed_transitions(subtask['id'], 'finished')
         self.check_statuses(cal_obs1_subtask['id'], "finished", "finished", "observing")
 
 
@@ -177,12 +180,12 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(488, len(target_obs_output_dataproducts))
 
         # "mimic" that the target_obs_subtask starts running
-        self.tmss_client.set_subtask_status(target_obs_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(target_obs_subtask['id'], 'started')
         self.check_statuses(target_obs_subtask['id'], "started", "started", "observing")
 
         # "mimic" that the target_obs_subtask finished (including qa subtasks)
         for subtask in target_obs_task['subtasks']:
-            self.tmss_client.set_subtask_status(subtask['id'], 'finished')
+            set_subtask_state_following_allowed_transitions(subtask['id'], 'finished')
         self.check_statuses(target_obs_subtask['id'], "finished", "finished", "observing")
 
 
@@ -199,12 +202,12 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(cal_obs2_output_dataproducts))
 
         # "mimic" that the cal_obs2_subtask starts running
-        self.tmss_client.set_subtask_status(cal_obs2_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(cal_obs2_subtask['id'], 'started')
         self.check_statuses(cal_obs2_subtask['id'], "started", "started", "observing")
 
         # "mimic" that the cal_obs2_subtask finished (including qa subtasks)
         for subtask in cal_obs2_task['subtasks']:
-            self.tmss_client.set_subtask_status(subtask['id'], 'finished')
+            set_subtask_state_following_allowed_transitions(subtask['id'], 'finished')
         self.check_statuses(cal_obs2_subtask['id'], "finished", "finished", "observed")
 
 
@@ -231,11 +234,11 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(cal_pipe1_output_dataproducts))
 
         # "mimic" that the cal_pipe1_subtask starts running
-        self.tmss_client.set_subtask_status(cal_pipe1_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(cal_pipe1_subtask['id'], 'started')
         self.check_statuses(cal_pipe1_subtask['id'], "started", "started", "processing")
 
         # "mimic" that the cal_pipe1_subtask finished
-        self.tmss_client.set_subtask_status(cal_pipe1_subtask['id'], 'finished')
+        set_subtask_state_following_allowed_transitions(cal_pipe1_subtask['id'], 'finished')
         self.check_statuses(cal_pipe1_subtask['id'], "finished", "finished", "processing")
 
 
@@ -253,11 +256,11 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(target_pipe1_output_dataproducts))
 
         # "mimic" that the target_pipe1_subtask starts running
-        self.tmss_client.set_subtask_status(target_pipe1_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(target_pipe1_subtask['id'], 'started')
         self.check_statuses(target_pipe1_subtask['id'], "started", "started", "processing")
 
         # "mimic" that the target_pipe1_subtask finished
-        self.tmss_client.set_subtask_status(target_pipe1_subtask['id'], 'finished')
+        set_subtask_state_following_allowed_transitions(target_pipe1_subtask['id'], 'finished')
         self.check_statuses(target_pipe1_subtask['id'], "finished", "finished", "processing")
 
 
@@ -275,11 +278,11 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(target_pipe2_output_dataproducts))
 
         # "mimic" that the target_pipe2_subtask starts running
-        self.tmss_client.set_subtask_status(target_pipe2_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(target_pipe2_subtask['id'], 'started')
         self.check_statuses(target_pipe2_subtask['id'], "started", "started", "processing")
 
         # "mimic" that the target_pipe2_subtask finished
-        self.tmss_client.set_subtask_status(target_pipe2_subtask['id'], 'finished')
+        set_subtask_state_following_allowed_transitions(target_pipe2_subtask['id'], 'finished')
         self.check_statuses(target_pipe2_subtask['id'], "finished", "finished", "processing")
 
 
@@ -297,11 +300,11 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(244, len(cal_pipe2_output_dataproducts))
 
         # "mimic" that the cal_pipe2_subtask starts running
-        self.tmss_client.set_subtask_status(cal_pipe2_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(cal_pipe2_subtask['id'], 'started')
         self.check_statuses(cal_pipe2_subtask['id'], "started", "started", "processing")
 
         # "mimic" that the cal_pipe2_subtask finished
-        self.tmss_client.set_subtask_status(cal_pipe2_subtask['id'], 'finished')
+        set_subtask_state_following_allowed_transitions(cal_pipe2_subtask['id'], 'finished')
         self.check_statuses(cal_pipe2_subtask['id'], "finished", "finished", "processed")
 
 
@@ -331,6 +334,9 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
             self.assertEqual(False, strtobool(obs_parset.get('Observation.DataProducts.Output_InstrumentModel.enabled','false')))
             self.assertEqual(False, strtobool(obs_parset.get('Observation.DataProducts.Output_SkyImage.enabled','false')))
 
+        # import helper method to cycle through allowed state transitions
+        from lofar.sas.tmss.tmss.tmssapp.subtasks import set_subtask_state_following_allowed_transitions
+
         # setup: create a scheduling unit from the UC1 observation strategy template
         observing_strategy_templates = self.tmss_client.get_path_as_json_object('scheduling_unit_observing_strategy_template')
         self.assertGreater(len(observing_strategy_templates), 0)
@@ -379,12 +385,12 @@ class TestObservationStrategiesSpecificationAndScheduling(unittest.TestCase):
         self.assertEqual(1, len(obs_output_dataproducts))
 
         # "mimic" that the cal_obs1_subtask starts running
-        self.tmss_client.set_subtask_status(obs_subtask['id'], 'started')
+        set_subtask_state_following_allowed_transitions(obs_subtask['id'], 'started')
         self.check_statuses(obs_subtask['id'], "started", "started", "observing")
 
         # "mimic" that the cal_obs1_subtask finished (including qa subtasks)
         for subtask in obs_task['subtasks']:
-            self.tmss_client.set_subtask_status(subtask['id'], 'finished')
+            set_subtask_state_following_allowed_transitions(subtask['id'], 'finished')
         self.check_statuses(obs_subtask['id'], "finished", "finished", "finished")