diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
index 71b949d0c020dfcb75264816257aaaaa7b5fa2f2..ba3e07841b8387a98e8ce9390fe3245c5b36c8ab 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py
@@ -299,7 +299,6 @@ def create_observation_control_subtask_from_task_blueprint(task_blueprint: TaskB
     # an observation has no input, it just produces output data
     subtask_output = SubtaskOutput.objects.create(subtask=subtask,
                                                   task_blueprint=task_blueprint)
-    logger.warning("######## created subtaskoutput id=%s for tb=%s" % (subtask_output.id, task_blueprint.name))
 
     # step 3: set state to DEFINED, unless we have a target obs with a related parallel calibrator obs
     defined = True
@@ -1028,20 +1027,21 @@ def schedule_observation_subtask(observation_subtask: Subtask):
 
     # select correct output for each pointing based on name
     subtask_output_dict = {}
+
     for task_blueprint in observation_subtask.task_blueprints.all():
         output = observation_subtask.outputs.filter(task_blueprint=task_blueprint).first()
-        logger.warning('########### tb=%s | output=%s' % (task_blueprint.name, output))
         if not output:
-            # todo: Do not fall back. But why don't outputs alsways match the task blueprints
-            output = observation_subtask.outputs.first()
-            #raise Exception('####### %s | %s' % (observation_subtask.task_blueprints.all(), [out.task_blueprint for out in observation_subtask.outputs.all()]))
+            raise SubtaskSchedulingException('Cannot schedule subtask id=%s because it is missing the output for '
+                                             'task_blueprint id=%s (subtask has associated task_blueprints=%s, but '
+                                             'has outputs for task_blueprint=%s' % (observation_subtask.id,
+                                                                                   task_blueprint.id,
+                                                                                   [(tb.id, tb.specifications_template.type) for tb in observation_subtask.task_blueprints.all()],
+                                                                                   [(out.task_blueprint.id, out.task_blueprint.specifications_template.type) for out in observation_subtask.outputs.all()]))
         if 'SAPs' in task_blueprint.specifications_doc:  # target
             for sap in task_blueprint.specifications_doc['SAPs']:
-                logger.warning('########### tb=%s | output=%s | pointing=%s' % (task_blueprint.name, output, sap['name']))
                 subtask_output_dict[sap['name']] = output
         if 'pointing' in task_blueprint.specifications_doc:  # calibrator
             subtask_output_dict[task_blueprint.specifications_doc['name']] = output
-            logger.warning('########### tb=%s | output=%s | pointing=%s' % (task_blueprint.name, output, task_blueprint.specifications_doc['name']))
 
     for sap_nr, pointing in enumerate(specifications_doc['stations']['digital_pointings']):
         if pointing['name'] in subtask_output_dict:
diff --git a/SAS/TMSS/backend/test/t_scheduling.py b/SAS/TMSS/backend/test/t_scheduling.py
index 99c3555396cef4377553c3132f08959badba9f0c..ebc846edc6c52df1a79d65883b68a2d383184232 100755
--- a/SAS/TMSS/backend/test/t_scheduling.py
+++ b/SAS/TMSS/backend/test/t_scheduling.py
@@ -129,7 +129,8 @@ class SchedulingTest(unittest.TestCase):
                                                      task_blueprint_urls=[task_blueprint['url']])
             subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/')
             subtask_id = subtask['id']
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/')
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'],
+                                                                                    task_blueprint_url=task_blueprint['url']), '/subtask_output/')
 
             client.set_subtask_status(subtask_id, 'defined')
             subtask = client.schedule_subtask(subtask_id)
@@ -160,7 +161,8 @@ class SchedulingTest(unittest.TestCase):
                                                      task_blueprint_urls=[task_blueprint['url']])
             subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/')
             subtask_id = subtask['id']
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/')
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'],
+                                                                                    task_blueprint_url=task_blueprint['url']), '/subtask_output/')
 
             client.set_subtask_status(subtask_id, 'defined')
 
@@ -197,7 +199,8 @@ class SchedulingTest(unittest.TestCase):
                                                      task_blueprint_urls=[task_blueprint['url']])
             subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/')
             subtask_id = subtask['id']
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/')
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'],
+                                                                                    task_blueprint_url=task_blueprint['url']), '/subtask_output/')
 
             client.set_subtask_status(subtask_id, 'defined')
 
@@ -233,7 +236,8 @@ class SchedulingTest(unittest.TestCase):
                                                      task_blueprint_urls=[task_blueprint['url']])
             subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/')
             subtask_id = subtask['id']
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']),
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'],
+                                                                                    task_blueprint_url=task_blueprint['url']),
                                                     '/subtask_output/')
 
             client.set_subtask_status(subtask_id, 'defined')
@@ -258,7 +262,8 @@ class SchedulingTest(unittest.TestCase):
                                                          cluster_url=cluster_url,
                                                          task_blueprint_urls=[obs_task_blueprint['url']])
             obs_subtask = test_data_creator.post_data_and_get_response_as_json_object(obs_subtask_data, '/subtask/')
-            obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url']), '/subtask_output/')
+            obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url'],
+                                                                                                             task_blueprint_url=obs_task_blueprint['url']), '/subtask_output/')
             test_data_creator.post_data_and_get_url(test_data_creator.Dataproduct(filename="L%s_SB000.MS"%obs_subtask['id'],
                                                                                   subtask_output_url=obs_subtask_output_url), '/dataproduct/')
 
@@ -277,7 +282,8 @@ class SchedulingTest(unittest.TestCase):
 
             # ...and connect it to the observation
             test_data_creator.post_data_and_get_url(test_data_creator.SubtaskInput(subtask_url=pipe_subtask['url'], subtask_output_url=obs_subtask_output_url), '/subtask_input/')
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=pipe_subtask['url']), '/subtask_output/')
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=pipe_subtask['url'],
+                                                                                    task_blueprint_url=pipe_task_blueprint['url']), '/subtask_output/')
 
             for predecessor in client.get_subtask_predecessors(pipe_subtask['id']):
                 client.set_subtask_status(predecessor['id'], 'finished')
@@ -302,7 +308,8 @@ class SchedulingTest(unittest.TestCase):
                                                          cluster_url=cluster_url,
                                                          task_blueprint_urls=[test_data_creator.post_data_and_get_url(test_data_creator.TaskBlueprint(), '/task_blueprint/')])
             obs_subtask = test_data_creator.post_data_and_get_response_as_json_object(obs_subtask_data, '/subtask/')
-            obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url']), '/subtask_output/')
+            obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url'],
+                                                                                                             task_blueprint_url=obs_subtask['task_blueprints'][0]), '/subtask_output/')
             test_data_creator.post_data_and_get_url(test_data_creator.Dataproduct(filename="L%s_SB000.MS"%obs_subtask['id'],
                                                     subtask_output_url=obs_subtask_output_url), '/dataproduct/')
 
@@ -318,7 +325,8 @@ class SchedulingTest(unittest.TestCase):
 
             # ...and connect it to the observation
             test_data_creator.post_data_and_get_url(test_data_creator.SubtaskInput(subtask_url=ingest_subtask['url'], subtask_output_url=obs_subtask_output_url), '/subtask_input/')
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=ingest_subtask['url']), '/subtask_output/')
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=ingest_subtask['url'],
+                                                                                    task_blueprint_url=obs_subtask['task_blueprints'][0]), '/subtask_output/')  # todo: correct to link this to the obs?
 
             for predecessor in client.get_subtask_predecessors(ingest_subtask['id']):
                 client.set_subtask_status(predecessor['id'], 'finished')
@@ -536,7 +544,8 @@ class SAPTest(unittest.TestCase):
                                                      stop_time=datetime.utcnow() + timedelta(minutes=15))
             subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/')
             subtask_id = subtask['id']
-            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']),
+            test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'],
+                                                                                    task_blueprint_url=task_blueprint['url']),
                                                     '/subtask_output/')
 
             subtask_model = models.Subtask.objects.get(id=subtask_id)