diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 30133f640ed2fd3a358104a49b1cfa823409d318..4458eeedd597df769772e69a1b0ec1a0ad451569 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+Changed
+~~~~~~~
+
+* Do not import incomplete substitutions.
+
 `2.1.1`_ - 2022-01-29
 ---------------------
 
diff --git a/aleksis/apps/untis/preferences.py b/aleksis/apps/untis/preferences.py
index 492ac0654db23d5e80c71c4e8f58a6ddf71c3f43..011f6bd31825a994e7c707ef48b048649db6bf4f 100644
--- a/aleksis/apps/untis/preferences.py
+++ b/aleksis/apps/untis/preferences.py
@@ -108,3 +108,10 @@ class CreateObjectsForWhichUntisIsNotPrimarySource(BooleanPreference):
     name = "create_objects_untis_not_primary_source"
     default = True
     verbose_name = _("Create objects for which Untis is not primary source")
+
+
+class IgnoreIncompleteSubstitutions(BooleanPreference):
+    section = untis_mysql
+    name = "ignore_incomplete_substitutions"
+    default = True
+    verbose_name = _("Ignore incomplete substitutions")
diff --git a/aleksis/apps/untis/util/mysql/importers/substitutions.py b/aleksis/apps/untis/util/mysql/importers/substitutions.py
index d499c06493fc45fdd5c6cf42e3d3c77d71f08cff..a7202efcdc09cc1c9a178cf66c9206a4e83ac798 100644
--- a/aleksis/apps/untis/util/mysql/importers/substitutions.py
+++ b/aleksis/apps/untis/util/mysql/importers/substitutions.py
@@ -8,6 +8,7 @@ from tqdm import tqdm
 
 from aleksis.apps.chronos import models as chronos_models
 from aleksis.apps.chronos.models import ValidityRange
+from aleksis.core.util.core_helpers import get_site_preferences
 
 from .... import models as mysql_models
 from ..util import (
@@ -138,6 +139,17 @@ def import_substitutions(
             for id_ in class_ids:
                 classes.append(classes_ref[id_])
 
+            if get_site_preferences()["untis_mysql__ignore_incomplete_substitutions"]:
+                # Skip incomplete substitutions
+                if (
+                    not room_new
+                    and not subject_new
+                    and not teachers
+                    and not cancelled
+                    and not cancelled_for_teachers
+                ):
+                    continue
+
             if lesson_period:
                 (substitution, created,) = chronos_models.LessonSubstitution.objects.get_or_create(
                     lesson_period=lesson_period, week=week.week, year=week.year