diff --git a/aleksis/apps/untis/model_extensions.py b/aleksis/apps/untis/model_extensions.py
index 58f050277550a168645ae260d7874fe8c97417e1..b9a3eef0f95f75276ae745cc3f59c96ead640126 100644
--- a/aleksis/apps/untis/model_extensions.py
+++ b/aleksis/apps/untis/model_extensions.py
@@ -70,3 +70,7 @@ chronos_models.Event.field(
 chronos_models.Holiday.field(
     import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
 )
+chronos_models.ExtraLesson.field(
+    import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
+)
+
diff --git a/aleksis/apps/untis/util/mysql/importers/substitutions.py b/aleksis/apps/untis/util/mysql/importers/substitutions.py
index 33f6214c444735f705498d7731f187f1268c8e62..c25e65b537290db9d3d778e3e0a9656b2c3f89da 100644
--- a/aleksis/apps/untis/util/mysql/importers/substitutions.py
+++ b/aleksis/apps/untis/util/mysql/importers/substitutions.py
@@ -25,7 +25,14 @@ class SubstitutionFlag(Enum):
     CANCELLED_FOR_TEACHERS = "F"
 
 
-def import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref):
+def import_substitutions(
+    teachers_ref,
+    subjects_ref,
+    rooms_ref,
+    classes_ref,
+    supervision_areas_ref,
+    time_periods_ref,
+):
     """ Import substitutions """
 
     term = get_term()
@@ -161,8 +168,34 @@ def import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, sup
                     logger.info("  Substitution updated")
 
             else:
-                pass
-                # TODO: Special assignment, no existing lesson period for that substitution
+                logger.info("  Extra lesson detected")
+                time_period = time_periods_ref[date.weekday()][period]
+
+                groups = [
+                    classes_ref[pk] for pk in untis_split_first(sub.classids, int)
+                ]
+
+                room = room_old if not room_new and room_old else room_new
+                subject = subject_old if not subject_new else subject_new
+                (
+                    extra_lesson,
+                    created,
+                ) = chronos_models.ExtraLesson.objects.update_or_create(
+                    import_ref_untis=sub_id,
+                    defaults={
+                        "week": week.week,
+                        "period": time_period,
+                        "subject": subject,
+                        "room": room,
+                        "comment": comment,
+                    },
+                )
+
+                if created:
+                    logger.info("  Extra lesson created")
+
+                extra_lesson.teachers.set(teachers)
+                extra_lesson.groups.set(groups)
         else:
             if teacher_new:
                 logger.info("  Supervision substitution detected")
@@ -197,10 +230,20 @@ def import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, sup
                         logger.info("  Supervision substitution updated")
 
     # Delete all no longer existing substitutions
-    chronos_models.LessonSubstitution.objects.within_dates(date_start, date_end).exclude(
-        import_ref_untis__in=existing_subs
-    ).delete()
-    chronos_models.SupervisionSubstitution.objects.filter(
-        date__gte=date_start, date__lte=date_end
-    ).exclude(existing_subs__in=existing_subs).delete()
-    logger.info("Left-over substitutions deleted")
+    for s in chronos_models.LessonSubstitution.objects.within_dates(date_start, date_end):
+        if s.import_ref_untis and s.import_ref_untis not in existing_subs:
+            logger.info("Substitution {} deleted".format(s.id))
+            s.delete()
+
+    # Delete all no longer existing extra lessons
+    for s in chronos_models.ExtraLesson.objects.within_dates(date_start, date_end):
+        if s.import_ref_untis and s.import_ref_untis not in existing_subs:
+            logger.info("Extra lesson {} deleted".format(s.id))
+            s.delete()
+
+    # Delete all no longer existing supervision substitutions
+    for s in chronos_models.SupervisionSubstitution.objects.filter(date__gte=date_start, date__lte=date_end):
+        if s.import_ref_untis and s.import_ref_untis not in existing_subs:
+            logger.info("Supervision substitution {} deleted".format(s.id))
+            s.delete()
+
diff --git a/aleksis/apps/untis/util/mysql/main.py b/aleksis/apps/untis/util/mysql/main.py
index b28aae4bb7089f0a96621441a1094bf2772de1d2..7fd537e5629c7f8790d5f421839a924a7b3d3808 100644
--- a/aleksis/apps/untis/util/mysql/main.py
+++ b/aleksis/apps/untis/util/mysql/main.py
@@ -43,7 +43,7 @@ def untis_import_mysql():
 
     # Substitutions
     import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref)
-    import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref)
+    import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref, time_periods_ref)
 
     # Events
     import_events(time_periods_ref, teachers_ref, classes_ref, rooms_ref)