diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
index ebb0af2bdda4b4ae87b55a13c98ab8b54e071262..b3c9176da36dd24ff227eb38d4a3424b7ee4b7b5 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
@@ -1481,7 +1481,16 @@ class SchedulingUnitBlueprint(ProjectPropertyMixin, TemplateSchemaMixin, Schedul
             specifications_doc['parameters'] = self.draft.observation_strategy_template.template.get('parameters', [])
 
         # ensure that the generated specifications_doc is valid according to the schema (raises if not valid)
-        self.specifications_template.validate_document(specifications_doc)
+        try:
+            if self.status.value in SchedulingUnitStatus.PRE_ACTIVE_STATUS_VALUES:
+                self.specifications_template.validate_document(specifications_doc, raise_on_obsolete=False)
+            else:
+                # we only validate against the schema for active units (skip rule-based validation) because rules can
+                # change and old specs should still be readable.
+                self.specifications_template.validate_document_against_schema(specifications_doc)
+        except ValidationException as ve:
+            # wrap validation exception, and add object info
+            raise ValidationException("%s\nfor SchedulingUnitBlueprint id=%s name=%s" % (str(ve), self.id, self.name))
 
         return specifications_doc