diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
index bc148f823f14da605cf9d2481eaf1873c47151f8..0ef33e5a944adac03db001c32e3b097bd02c8661 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py
@@ -1318,7 +1318,14 @@ class SchedulingUnitDraft(TemplateSchemaMixin, ProjectPropertyMixin, SchedulingU
             specifications_doc['parameters'] = self.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, raise_on_obsolete=False)
+        try:
+            # we only validate against the schema and skip rule-based validation because rules can change and old
+            # specs should still be readable. Once we can deal with that, use:
+            # self.specifications_template.validate_document(specifications_doc, raise_on_obsolete=False)
+            self.specifications_template.validate_document_against_schema(specifications_doc)
+        except ValidationException as ve:
+            # wrap validation exception, and add object info
+            raise ValidationException("%s\nfor SchedulingUnitDraft id=%s name=%s" % (str(ve), self.id, self.name))
 
         return specifications_doc
 
@@ -1507,7 +1514,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