diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
index d6e3103bda259c597d78d8c54bd5c15a75c179f1..0fb5ff13224502ff167dab66fbc75725100b7415 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
@@ -911,6 +911,7 @@ class SchedulingUnitBlueprintPropertyFilter(property_filters.PropertyFilterSet):
     direction_type = filters.CharFilter(field_name='requirements_doc__tasks__Target Observation__specifications_doc__SAPs__0__digital_pointing__direction_type', lookup_expr='iexact')
 
     scheduling_set = property_filters.PropertyCharFilter(field_name='draft__scheduling_set', lookup_expr='icontains')  # remove to filter based on list of options
+    observation_strategy_template = filters.ModelChoiceFilter(field_name='draft__observation_strategy_template', queryset=models.SchedulingUnitObservingStrategyTemplate.objects.all())
     observation_strategy_template_name = filters.CharFilter(field_name='draft__observation_strategy_template__name', lookup_expr='icontains')
     observation_strategy_template_description = filters.CharFilter(field_name='draft__observation_strategy_template__description', lookup_expr='icontains')
 
diff --git a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py
index bdf2770b43216d4b200cd9e49e308eabe76f1bea..1abe2b26896900fa7bfc9c36b3a7be3401fadf80 100755
--- a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py
+++ b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py
@@ -1628,8 +1628,8 @@ class SchedulingUnitDraftTestCase(unittest.TestCase):
 
         self.assertEqual(response_1['count'], 0)
         self.assertEqual(response_2['count'], 2)
-        self.assertEqual(response_2['results'][0]['name'], su_draft_1.name)
-        self.assertEqual(response_2['results'][1]['name'], su_draft_2.name)
+        self.assertEqual({result['name'] for result in response_2['results']},
+                         {su_draft_1.name, su_draft_2.name})
 
     def test_GET_SchedulingUnitDraft_view_filters_for_pointing(self):
         """
@@ -1656,6 +1656,28 @@ class SchedulingUnitDraftTestCase(unittest.TestCase):
         self.assertEqual(response_2['count'], 1)
         self.assertEqual(response_2['results'][0]['name'], su_draft_2.name)
 
+    def test_GET_SchedulingUnitBlueprint_view_filters_for_strategy_template(self):
+        """
+        Test we can filter on this field, which is explicitly named on the model-specific property filter
+        """
+        # setup
+        template_1 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4()))
+        template_2 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4()))
+        su_draft_1 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud1_%s' % uuid.uuid4(), observation_strategy_template=template_1))
+        su_draft_2 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud2_%s' % uuid.uuid4(), observation_strategy_template=template_2))
+
+        # assert
+        response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template=%s' % template_1.id, 200)
+        response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template_name=%s' % template_2.name[:-3], 200)
+        response_3 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template_name=%s' % 'gibberish', 200)
+        GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template=%s' % 999999, 400)
+
+        self.assertEqual(response_1['count'], 1)
+        self.assertEqual(response_1['results'][0]['name'], su_draft_1.name)
+        self.assertEqual(response_2['count'], 1)
+        self.assertEqual(response_2['results'][0]['name'], su_draft_2.name)
+        self.assertEqual(response_3['count'], 0)
+
 
 class TaskDraftTestCase(unittest.TestCase):
     @classmethod
@@ -2287,6 +2309,31 @@ class SchedulingUnitBlueprintTestCase(unittest.TestCase):
         self.assertEqual(response_4['results'][1]['name'], su_blueprint_3.name)
 
 
+    def test_GET_SchedulingUnitBlueprint_view_filters_for_strategy_template(self):
+        """
+        Test we can filter on this field, which is explicitly named on the model-specific property filter
+        """
+        # setup
+        template_1 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4()))
+        template_2 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4()))
+        su_draft_1 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud1_%s' % uuid.uuid4(), observation_strategy_template=template_1))
+        su_draft_2 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud2_%s' % uuid.uuid4(), observation_strategy_template=template_2))
+        su_blueprint_1 = models.SchedulingUnitBlueprint.objects.create(**SchedulingUnitBlueprint_test_data(name='sub1_%s' % uuid.uuid4(), draft=su_draft_1))
+        su_blueprint_2 = models.SchedulingUnitBlueprint.objects.create(**SchedulingUnitBlueprint_test_data(name='sub2_%s' % uuid.uuid4(), draft=su_draft_2))
+
+        # assert
+        response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template=%s' % template_1.id, 200)
+        response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template_name=%s' % template_2.name[:-3], 200)
+        response_3 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template_name=%s' % 'gibberish', 200)
+        GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template=%s' % 999999, 400)
+
+        self.assertEqual(response_1['count'], 1)
+        self.assertEqual(response_1['results'][0]['name'], su_blueprint_1.name)
+        self.assertEqual(response_2['count'], 1)
+        self.assertEqual(response_2['results'][0]['name'], su_blueprint_2.name)
+        self.assertEqual(response_3['count'], 0)
+
+
 class TaskBlueprintTestCase(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None: