diff --git a/openlobby/core/api/mutations.py b/openlobby/core/api/mutations.py
index 8eb754319edf2cc398062a1d51c9c3374e6f546f..14d6f0d5aab3424946f7fc086551f57d10685338 100644
--- a/openlobby/core/api/mutations.py
+++ b/openlobby/core/api/mutations.py
@@ -174,6 +174,9 @@ class UpdateReport(relay.ClientIDMutation):
                 "Viewer is not the Author of this Report or Report does not exist."
             )
 
+        if report.superseded_by_id is not None:
+            raise Exception("You cannot update superseded Report.")
+
         is_draft = input.get("is_draft")
 
         if is_draft and not report.is_draft:
diff --git a/tests/mutations/snapshots/snap_test_update_report.py b/tests/mutations/snapshots/snap_test_update_report.py
index 3c737e7876f465e271c65493ad782794c6eefbf9..32aa1adbe63f1e4835ba3ecb271fc773e75af2fe 100644
--- a/tests/mutations/snapshots/snap_test_update_report.py
+++ b/tests/mutations/snapshots/snap_test_update_report.py
@@ -465,3 +465,43 @@ snapshots['test_update_published_with_published__late_edit 3'] = {
     'superseded_by_id': 666,
     'title': 'Original'
 }
+
+snapshots['test_update_superseded_with_draft 1'] = {
+    'data': {
+        'updateReport': None
+    },
+    'errors': [
+        {
+            'locations': [
+                {
+                    'column': 5,
+                    'line': 3
+                }
+            ],
+            'message': 'You cannot update superseded Report.',
+            'path': [
+                'updateReport'
+            ]
+        }
+    ]
+}
+
+snapshots['test_update_superseded_with_published 1'] = {
+    'data': {
+        'updateReport': None
+    },
+    'errors': [
+        {
+            'locations': [
+                {
+                    'column': 5,
+                    'line': 3
+                }
+            ],
+            'message': 'You cannot update superseded Report.',
+            'path': [
+                'updateReport'
+            ]
+        }
+    ]
+}
diff --git a/tests/mutations/test_update_report.py b/tests/mutations/test_update_report.py
index d27d5bd991b6db404fe1104cf117ab4b824c4e68..ef883b8bb9207946b1bfe6d353d1af17c31aac46 100644
--- a/tests/mutations/test_update_report.py
+++ b/tests/mutations/test_update_report.py
@@ -77,12 +77,19 @@ def original_report(author_fix, report_factory):
 
 
 @pytest.fixture
-def original_report_draft(original_report):
+def original_draft(original_report):
     original_report.is_draft = True
     original_report.save()
     return original_report
 
 
+@pytest.fixture
+def original_superseded(report, original_report):
+    original_report.superseded_by_id = report.id
+    original_report.save()
+    return original_report
+
+
 def prepare_input(is_draft=False, id=1):
     return {
         "id": to_global_id("Report", id),
@@ -121,46 +128,56 @@ def test_update_published_with_draft(call_api, snapshot, original_report):
     snapshot.assert_match(response)
 
 
-def test_update_draft_with_draft(call_api, snapshot, original_report_draft):
-    input = prepare_input(id=original_report_draft.id, is_draft=True)
+def test_update_superseded_with_draft(call_api, snapshot, original_superseded):
+    input = prepare_input(id=original_superseded.id, is_draft=True)
+    response = call_api(query, input, original_superseded.author)
+    snapshot.assert_match(response)
+
+
+def test_update_superseded_with_published(call_api, snapshot, original_superseded):
+    input = prepare_input(id=original_superseded.id)
+    response = call_api(query, input, original_superseded.author)
+    snapshot.assert_match(response)
+
+
+def test_update_draft_with_draft(call_api, snapshot, original_draft):
+    input = prepare_input(id=original_draft.id, is_draft=True)
 
     with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=edited):
-        response = call_api(query, input, original_report_draft.author)
+        response = call_api(query, input, original_draft.author)
 
     snapshot.assert_match(response)
     reports = list(map(dates_to_iso, Report.objects.all().values()))
     snapshot.assert_match(reports)
 
 
-def test_update_draft_with_draft__late_edit(call_api, snapshot, original_report_draft):
-    input = prepare_input(id=original_report_draft.id, is_draft=True)
+def test_update_draft_with_draft__late_edit(call_api, snapshot, original_draft):
+    input = prepare_input(id=original_draft.id, is_draft=True)
 
     with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited):
-        response = call_api(query, input, original_report_draft.author)
+        response = call_api(query, input, original_draft.author)
 
     snapshot.assert_match(response)
     reports = list(map(dates_to_iso, Report.objects.all().values()))
     snapshot.assert_match(reports)
 
 
-def test_update_draft_with_published(call_api, snapshot, original_report_draft):
-    input = prepare_input(id=original_report_draft.id)
+def test_update_draft_with_published(call_api, snapshot, original_draft):
+    input = prepare_input(id=original_draft.id)
 
     with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=edited):
-        response = call_api(query, input, original_report_draft.author)
+        response = call_api(query, input, original_draft.author)
 
     snapshot.assert_match(response)
     reports = list(map(dates_to_iso, Report.objects.all().values()))
     snapshot.assert_match(reports)
 
 
-def test_update_draft_with_published__late_edit(
-    call_api, snapshot, original_report_draft
-):
-    input = prepare_input(id=original_report_draft.id)
+def test_update_draft_with_published__late_edit(call_api, snapshot, original_draft):
+    input = prepare_input(id=original_draft.id)
 
     with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited):
-        response = call_api(query, input, original_report_draft.author)
+        response = call_api(query, input, original_draft.author)
 
     snapshot.assert_match(response)
     reports = list(map(dates_to_iso, Report.objects.all().values()))