diff --git a/aleksis/apps/alsijil/data_checks.py b/aleksis/apps/alsijil/data_checks.py
index 98decd9aaa5cfac0ace215146ab9740a19a1927b..be36446beaf9d1bfc2474df29242f47a23d9a1c8 100644
--- a/aleksis/apps/alsijil/data_checks.py
+++ b/aleksis/apps/alsijil/data_checks.py
@@ -56,11 +56,15 @@ class NoPersonalNotesInCancelledLessonsDataCheck(DataCheck):
     def check_data(cls):
         from .models import PersonalNote
 
-        personal_notes = PersonalNote.objects.filter(
-            lesson_period__substitutions__cancelled=True,
-            lesson_period__substitutions__week=F("week"),
-            lesson_period__substitutions__year=F("year"),
-        ).prefetch_related("lesson_period", "lesson_period__substitutions")
+        personal_notes = (
+            PersonalNote.objects.not_empty()
+            .filter(
+                lesson_period__substitutions__cancelled=True,
+                lesson_period__substitutions__week=F("week"),
+                lesson_period__substitutions__year=F("year"),
+            )
+            .prefetch_related("lesson_period", "lesson_period__substitutions")
+        )
 
         for note in personal_notes:
             logging.info(f"Check personal note {note}")
@@ -119,9 +123,9 @@ class LessonDocumentationOnHolidaysDataCheck(DataCheck):
 
         holidays = Holiday.objects.all()
 
-        documentations = LessonDocumentation.objects.filter(
-            ~Q(topic="") | ~Q(group_note="") | ~Q(homework="")
-        ).annotate(actual_date=weekday_to_date)
+        documentations = LessonDocumentation.objects.not_empty().annotate(
+            actual_date=weekday_to_date
+        )
 
         q = Q()
         for holiday in holidays:
@@ -155,9 +159,7 @@ class PersonalNoteOnHolidaysDataCheck(DataCheck):
 
         holidays = Holiday.objects.all()
 
-        personal_notes = PersonalNote.objects.filter(
-            ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False)
-        ).annotate(actual_date=weekday_to_date)
+        personal_notes = PersonalNote.objects.not_empty().annotate(actual_date=weekday_to_date)
 
         q = Q()
         for holiday in holidays:
diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 8ea5ee1c553a3d40e82c3a015ed30e0206b7fd6a..9a3e7ac7bbbbe6b03b3717e832f263966e353fe4 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -5,7 +5,6 @@ from django.core.exceptions import ValidationError
 from django.db.models import Count, Q
 from django.utils.translation import gettext_lazy as _
 
-from django_global_request.middleware import get_request
 from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget, Select2Widget
 from guardian.shortcuts import get_objects_for_user
 from material import Fieldset, Layout, Row
@@ -83,8 +82,8 @@ class SelectForm(forms.Form):
         data["instance"] = instance
         return data
 
-    def __init__(self, *args, **kwargs):
-        self.request = get_request()
+    def __init__(self, request, *args, **kwargs):
+        self.request = request
         super().__init__(*args, **kwargs)
 
         person = self.request.user.person
@@ -146,7 +145,6 @@ class RegisterAbsenceForm(forms.Form):
     remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False)
 
     def __init__(self, *args, **kwargs):
-        self.request = get_request()
         super().__init__(*args, **kwargs)
         period_choices = TimePeriod.period_choices
 
diff --git a/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po
index cc86fc5cf3595ae437aef2bd28e649204b1af4ff..a98f11e58e851ea9d34f885b57c0be53c9f646a9 100644
--- a/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,11 +18,63 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 
+#: data_checks.py:15
+msgid "Delete object"
+msgstr ""
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr ""
+
+#: data_checks.py:36
+msgid "Reset personal note to defaults"
+msgstr ""
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+
+#: data_checks.py:49
+msgid "The personal note is related to a cancelled lesson."
+msgstr ""
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr ""
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+
+#: data_checks.py:108
+msgid "The lesson documentation is on holidays."
+msgstr ""
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+
+#: data_checks.py:144
+msgid "The personal note is on holidays."
+msgstr ""
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+
+#: data_checks.py:175
+msgid "The personal note is marked as excused, but not as absent."
+msgstr ""
+
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr ""
@@ -53,16 +105,16 @@ msgid "End period"
 msgstr ""
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr ""
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -73,14 +125,14 @@ msgstr ""
 msgid "Excused"
 msgstr ""
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 msgid "Excuse type"
 msgstr ""
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr ""
@@ -111,14 +163,14 @@ msgstr ""
 msgid "My students"
 msgstr ""
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 msgid "Excuse types"
 msgstr ""
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -163,75 +215,75 @@ msgstr ""
 msgid "Can register an absence for a person"
 msgstr ""
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 msgid "Short name"
 msgstr ""
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr ""
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr ""
 
-#: models.py:101
+#: models.py:122
 msgid "Personal note"
 msgstr ""
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr ""
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr ""
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 msgid "Group note"
 msgstr ""
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr ""
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 msgid "Lesson documentations"
 msgstr ""
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr ""
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr ""
 
-#: models.py:209
+#: models.py:240
 msgid "Can register absence"
 msgstr ""
 
-#: models.py:210
+#: models.py:241
 msgid "Can list all personal note filters"
 msgstr ""
 
@@ -263,6 +315,10 @@ msgstr ""
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr ""
 
+#: preferences.py:68
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr ""
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr ""
@@ -274,13 +330,13 @@ msgstr ""
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr ""
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr ""
 
@@ -382,13 +438,12 @@ msgid "My next lesson"
 msgstr ""
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, python-format
 msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -396,8 +451,7 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -405,40 +459,40 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 msgid "Absent persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -447,10 +501,33 @@ msgstr ""
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 msgid "Tardiness (in m)"
 msgstr ""
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:387
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+
 #: templates/alsijil/class_register/person.html:8
 msgid "Class register: person"
 msgstr ""
@@ -555,44 +632,44 @@ msgid ""
 "      %(instance)s"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 msgid "Groups"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 msgid "Count of tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 msgid ""
 "\n"
 "            There are no lessons for the selected group or teacher in this week.\n"
@@ -661,7 +738,7 @@ msgid "Data complete"
 msgstr ""
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr ""
 
@@ -678,9 +755,9 @@ msgid "Substitution"
 msgstr ""
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr ""
 
@@ -836,17 +913,17 @@ msgid "Date"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr ""
 
@@ -854,70 +931,70 @@ msgstr ""
 msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr ""
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: views.py:127
+#: views.py:141
 msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr ""
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr ""
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr ""
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:741
+#: views.py:770
 msgid "The personal note has been deleted."
 msgstr ""
 
-#: views.py:762
+#: views.py:792
 msgid "The extra mark has been created."
 msgstr ""
 
-#: views.py:773
+#: views.py:804
 msgid "The extra mark has been saved."
 msgstr ""
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr ""
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr ""
diff --git a/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po
index add03b74eeb7a5e69c3c19dce2a7bedb2038c90d..5c542270637495824e90c2e8bbd1c4bfc8f746b3 100644
--- a/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
-"PO-Revision-Date: 2020-12-05 20:56+0000\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
+"PO-Revision-Date: 2021-01-22 21:30+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/"
 "aleksis-app-alsijil/de/>\n"
@@ -17,13 +17,76 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.4\n"
+
+#: data_checks.py:15
+msgid "Delete object"
+msgstr "Objekt löschen"
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr "Aktuelle Gruppen setzen"
+
+#: data_checks.py:36
+msgid "Reset personal note to defaults"
+msgstr "Persönliche Notiz zurücksetzen"
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+"Sicherstellen, dass es keine persönlichen Notizen in ausgefallenen Stunden "
+"gibt"
+
+#: data_checks.py:49
+msgid "The personal note is related to a cancelled lesson."
+msgstr "Die persönliche Notiz ist einer ausgefallenen Stunde zugeordnet."
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+"Sicherstellen, dass \"groups_of_person\" für alle persönlichen Notizen "
+"gesetzt ist"
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr "Die persönliche Notiz hat keine Gruppe in \"groups_of_person\"."
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+"Sicherstellen, dass es keine ausgefüllten Stundendokumentationen in den "
+"Ferien gibt"
+
+#: data_checks.py:108
+msgid "The lesson documentation is on holidays."
+msgstr "Die Stundendokumentation ist in den Ferien."
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+"Sicherstellen, dass es keine ausgefüllten persönlichen Notizen in den Ferien "
+"gibt"
+
+#: data_checks.py:144
+msgid "The personal note is on holidays."
+msgstr "Die persönliche Notiz ist in den Ferien."
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+"Sicherstellen, dass es keine entschuldigten persönlichen Notizen ohne eine "
+"Absenz gibt"
+
+#: data_checks.py:175
+msgid "The personal note is marked as excused, but not as absent."
+msgstr ""
+"Die persönliche Notiz ist als entschuldigt, aber nicht als abwesend markiert."
 
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr "Hausaufgabe zur nächsten Stunde"
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr "Gruppe"
@@ -54,16 +117,16 @@ msgid "End period"
 msgstr "Endstunde"
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr "Abwesend"
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -74,14 +137,14 @@ msgstr "Abwesend"
 msgid "Excused"
 msgstr "Entschuldigt"
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 msgid "Excuse type"
 msgstr "Entschuldigungsart"
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr "Bemerkungen"
@@ -112,14 +175,14 @@ msgstr "Meine Ãœbersicht"
 msgid "My students"
 msgstr "Meine Schüler*innen"
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 msgid "Excuse types"
 msgstr "Entschuldigungsarten"
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -164,75 +227,75 @@ msgstr "Kann eine Absenz für alle Mitglieder eine Gruppe registrieren"
 msgid "Can register an absence for a person"
 msgstr "Kann eine Absenz für eine Person registrieren"
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 msgid "Short name"
 msgstr "Kurzname"
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr "Name"
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr "Jahr"
 
-#: models.py:101
+#: models.py:122
 msgid "Personal note"
 msgstr "Persönliche Notiz"
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr "Persönliche Notizen"
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr "Stundenthema"
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr "Hausaufgaben"
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 msgid "Group note"
 msgstr "Gruppennotiz"
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr "Stunden-Dokumentation"
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 msgid "Lesson documentations"
 msgstr "Stunden-Dokumentationen"
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr "Zusätzliche Markierung"
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr "Kann die Wochenübersicht sehen"
 
-#: models.py:209
+#: models.py:240
 msgid "Can register absence"
 msgstr "Kann eine Absenz registrieren"
 
-#: models.py:210
+#: models.py:241
 msgid "Can list all personal note filters"
 msgstr "Kann alle Filter für persönliche Notizen anzeigen"
 
@@ -264,6 +327,10 @@ msgstr "Erlaube Lehrkräften, Unterrichtsstunden bereits am gleichen Tag und nic
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr "Unterrichtsstunden in der Vergangenheit werden nicht durch diese Einstellung beeinflusst, sie können immer geöffnet werden."
 
+#: preferences.py:68
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr "Lehrkräften erlauben, Daten für Stunden in den Ferien hinzuzufügen"
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr "Bearbeiten"
@@ -275,13 +342,13 @@ msgstr "Löschen"
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr "Abwesenheit eintragen"
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr "Person"
 
@@ -324,8 +391,7 @@ msgid ""
 "                "
 msgstr ""
 "\n"
-"                  Es gibt keine betroffenen Stunden. Das Eintragen dieser "
-"Abwesenheit wird keinen Effekt haben.\n"
+"                  Es gibt keine betroffenen Stunden. Das Eintragen dieser Abwesenheit wird keinen Effekt haben.\n"
 "                "
 
 #: templates/alsijil/absences/register_confirm.html:59
@@ -394,13 +460,12 @@ msgid "My next lesson"
 msgstr "Meine nächste Stunde"
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, python-format
 msgid "%(period)s. period"
 msgstr "%(period)s. Stunde"
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -411,8 +476,7 @@ msgstr ""
 "          Vorherige %(subject)s Stunde\n"
 "        "
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -423,40 +487,40 @@ msgstr ""
 "          Nächste %(subject)s Stunde\n"
 "        "
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 msgid "Previous lesson"
 msgstr "Vorherige Unterrichtsstunde"
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr "Veränderungen"
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr "Ãœbersicht: Vorherige Stunde"
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr "Stundenthema der vorherigen Stunde:"
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr "Hausaufgaben zu dieser Stunde:"
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr "Gruppennotizen für die vorherige Stunde:"
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 msgid "Absent persons:"
 msgstr "Abwesende Personen:"
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr "Verspätete Personen:"
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -465,10 +529,43 @@ msgstr "Verspätete Personen:"
 msgid "Tardiness"
 msgstr "Verspätung"
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 msgid "Tardiness (in m)"
 msgstr "Verspätung (in m)"
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+"\n"
+"            Vorherige %(subject)s Stunde\n"
+"          "
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+"\n"
+"            Nächste %(subject)s Stunde\n"
+"          "
+
+#: templates/alsijil/class_register/lesson.html:387
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+"\n"
+"                Diese Stunde ist in den Ferien und kann somit nicht "
+"bearbeitet werden.\n"
+"              "
+
 #: templates/alsijil/class_register/person.html:8
 msgid "Class register: person"
 msgstr "Klassenbuch: Person"
@@ -578,44 +675,44 @@ msgstr ""
 "KW %(week)s: \n"
 "%(instance)s"
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr "Stunde"
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 msgid "Groups"
 msgstr "Gruppen"
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr "Fach"
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr "Lehrkräfte"
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr "unentschuldigt"
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr "Summierte Verspätung"
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 msgid "Count of tardiness"
 msgstr "Anzahl der Verspätungen"
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr "Keine Stunden verfügbar"
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 msgid ""
 "\n"
 "            There are no lessons for the selected group or teacher in this week.\n"
@@ -691,7 +788,7 @@ msgid "Data complete"
 msgstr "Daten vollständig"
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr "Stunde ist ausgefallen"
 
@@ -708,9 +805,9 @@ msgid "Substitution"
 msgstr "Vertretung"
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr "e"
 
@@ -880,17 +977,17 @@ msgid "Date"
 msgstr "Datum"
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr "Std."
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr "Fa."
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr "Lk."
 
@@ -898,73 +995,73 @@ msgstr "Lk."
 msgid "Tard."
 msgstr "Verspät."
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr "Ja"
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 msgid "Lesson documentation for week"
 msgstr "Unterrichtsdokumentation für Woche"
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr "Notizen"
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 "Sie haben eine ungültige Stunde ausgewählt oder es\n"
 "      läuft momentan keine Stunde."
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr "Ihnen ist es nicht erlaubt, eine Eintragung für eine Unterrichtsstunde in der Zukunft vorzunehmen."
 
-#: views.py:127
+#: views.py:141
 msgid "The lesson documentation has been saved."
 msgstr "Die Stunden-Dokumentation wurde gespeichert."
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr "Die persönlichen Notizen wurden gespeichert."
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr "Die Fehlzeiten wurden als entschuldigt markiert."
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr "Die Fehlzeit wurde als entschuldigt markiert."
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr "Die Abwesenheit wurde gespeichert."
 
-#: views.py:741
+#: views.py:770
 msgid "The personal note has been deleted."
 msgstr "Die persönliche Notiz wurde gelöscht."
 
-#: views.py:762
+#: views.py:792
 msgid "The extra mark has been created."
 msgstr "Die zusätzliche Markierung wurde erstellt."
 
-#: views.py:773
+#: views.py:804
 msgid "The extra mark has been saved."
 msgstr "Die zusätzliche Markierung wurde gespeichert."
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr "Die zusätzliche Markierung wurde gelöscht."
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr "Die Entschuldigungsart wurde erstellt."
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr "Die Entschuldigunsart wurde gespeichert."
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr "Die Entschuldigungsart wurde gelöscht."
 
diff --git a/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
index 404d2879d67b75879d9fbae9e3f467a4f78e4f96..d848e625848478871d3a2f37c74f913a506feaef 100644
--- a/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
 "PO-Revision-Date: 2020-07-26 14:08+0000\n"
 "Last-Translator: Marlene Grundey <grundema@katharineum.de>\n"
 "Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil/fr/>\n"
@@ -18,11 +18,73 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 4.0.1\n"
 
+#: data_checks.py:15
+msgid "Delete object"
+msgstr ""
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr ""
+
+#: data_checks.py:36
+#, fuzzy
+#| msgid "Relevant personal notes"
+msgid "Reset personal note to defaults"
+msgstr "Notes personnelles importantes"
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+
+#: data_checks.py:49
+#, fuzzy
+#| msgid "Lesson documentation for calendar week"
+msgid "The personal note is related to a cancelled lesson."
+msgstr "Documentation de cours pour la semaine calendrier"
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr ""
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+
+#: data_checks.py:108
+#, fuzzy
+#| msgid "Lesson documentation for calendar week"
+msgid "The lesson documentation is on holidays."
+msgstr "Documentation de cours pour la semaine calendrier"
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+
+#: data_checks.py:144
+#, fuzzy
+#| msgid "Lesson documentation for calendar week"
+msgid "The personal note is on holidays."
+msgstr "Documentation de cours pour la semaine calendrier"
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+
+#: data_checks.py:175
+#, fuzzy
+#| msgid "Lesson documentation for calendar week"
+msgid "The personal note is marked as excused, but not as absent."
+msgstr "Documentation de cours pour la semaine calendrier"
+
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr "Groupe"
@@ -57,16 +119,16 @@ msgid "End period"
 msgstr "De la période"
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr "Absent(e)"
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -77,16 +139,16 @@ msgstr "Absent(e)"
 msgid "Excused"
 msgstr "Excusé"
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 #, fuzzy
 #| msgid "Excused"
 msgid "Excuse type"
 msgstr "Excusé"
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr "Remarque"
@@ -121,7 +183,7 @@ msgstr "Vue d'ensemble personnelle"
 msgid "My students"
 msgstr ""
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 #, fuzzy
@@ -129,8 +191,8 @@ msgstr ""
 msgid "Excuse types"
 msgstr "Excusé"
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -185,85 +247,85 @@ msgstr ""
 msgid "Can register an absence for a person"
 msgstr "Registre de la classe"
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
 msgstr "Prénom"
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr ""
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr ""
 
-#: models.py:101
+#: models.py:122
 #, fuzzy
 #| msgid "Personal notes"
 msgid "Personal note"
 msgstr "Notes personnelles"
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr "Notes personnelles"
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr "Sujet de cours"
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr "Devoirs"
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 #, fuzzy
 #| msgid "Group"
 msgid "Group note"
 msgstr "Groupe"
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr "Documentation de cours"
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 #, fuzzy
 #| msgid "Lesson documentation"
 msgid "Lesson documentations"
 msgstr "Documentation de cours"
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr ""
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr ""
 
-#: models.py:209
+#: models.py:240
 #, fuzzy
 #| msgid "Register absence"
 msgid "Can register absence"
 msgstr "Registre de Absence"
 
-#: models.py:210
+#: models.py:241
 #, fuzzy
 #| msgid "List of all personal note filters"
 msgid "Can list all personal note filters"
@@ -297,6 +359,12 @@ msgstr ""
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr ""
 
+#: preferences.py:68
+#, fuzzy
+#| msgid "Teachers and lessons in group"
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr "Profs et cours en groupe"
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr ""
@@ -308,13 +376,13 @@ msgstr ""
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr "Registre de Absence"
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr "Personne"
 
@@ -432,14 +500,13 @@ msgid "My next lesson"
 msgstr "Lecon actuelle"
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, fuzzy, python-format
 #| msgid "From period"
 msgid "%(period)s. period"
 msgstr "De la période"
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -447,8 +514,7 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -456,44 +522,44 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 #, fuzzy
 #| msgid "Current lesson"
 msgid "Previous lesson"
 msgstr "Lecon actuelle"
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr "Changement d' histoire"
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 #, fuzzy
 #| msgid "Absences"
 msgid "Absent persons:"
 msgstr "Absences"
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -502,12 +568,43 @@ msgstr ""
 msgid "Tardiness"
 msgstr "Retard"
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 #, fuzzy
 #| msgid "Tardiness"
 msgid "Tardiness (in m)"
 msgstr "Retard"
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:387
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "            There are no lessons for the selected group, teacher, room or time.\n"
+#| "          "
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+"\n"
+"            Il n' y a pas des cours pour le groupe sélectionné, les profs, le salle ou le temps.\n"
+"          "
+
 #: templates/alsijil/class_register/person.html:8
 #, fuzzy
 #| msgid "Class register"
@@ -616,48 +713,48 @@ msgid ""
 "      %(instance)s"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr "Période"
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 #, fuzzy
 #| msgid "Group"
 msgid "Groups"
 msgstr "Groupe"
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr "Sujet"
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr "Profs"
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr "Injustifié(e)"
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr "Résumé des retards"
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 #, fuzzy
 #| msgid "Summed up tardiness"
 msgid "Count of tardiness"
 msgstr "Résumé des retards"
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 #, fuzzy
 #| msgid ""
 #| "\n"
@@ -736,7 +833,7 @@ msgid "Data complete"
 msgstr ""
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr "Cours annulés"
 
@@ -753,9 +850,9 @@ msgid "Substitution"
 msgstr ""
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr "e"
 
@@ -917,17 +1014,17 @@ msgid "Date"
 msgstr "Date"
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr ""
 
@@ -935,81 +1032,81 @@ msgstr ""
 msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr "Oui"
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 #, fuzzy
 #| msgid "Lesson documentation for calendar week"
 msgid "Lesson documentation for week"
 msgstr "Documentation de cours pour la semaine calendrier"
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr "Notes"
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: views.py:127
+#: views.py:141
 #, fuzzy
 #| msgid "Lesson documentation for calendar week"
 msgid "The lesson documentation has been saved."
 msgstr "Documentation de cours pour la semaine calendrier"
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr ""
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr ""
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr ""
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:741
+#: views.py:770
 #, fuzzy
 #| msgid "Lesson documentation for calendar week"
 msgid "The personal note has been deleted."
 msgstr "Documentation de cours pour la semaine calendrier"
 
-#: views.py:762
+#: views.py:792
 #, fuzzy
 #| msgid "Lesson documentation for calendar week"
 msgid "The extra mark has been created."
 msgstr "Documentation de cours pour la semaine calendrier"
 
-#: views.py:773
+#: views.py:804
 #, fuzzy
 #| msgid "Lesson documentation for calendar week"
 msgid "The extra mark has been saved."
 msgstr "Documentation de cours pour la semaine calendrier"
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr ""
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr ""
 
diff --git a/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
index 053c32a5484cf531503f41a76d6e56ff51bcd59c..f084ed1f6bee2fb6607fb04229f5c1e492a7fd7d 100644
--- a/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
 "PO-Revision-Date: 2020-07-26 14:08+0000\n"
 "Last-Translator: Julian <leuckerj@gmail.com>\n"
 "Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil/la/>\n"
@@ -18,11 +18,63 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Weblate 4.0.1\n"
 
+#: data_checks.py:15
+msgid "Delete object"
+msgstr ""
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr ""
+
+#: data_checks.py:36
+msgid "Reset personal note to defaults"
+msgstr ""
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+
+#: data_checks.py:49
+msgid "The personal note is related to a cancelled lesson."
+msgstr ""
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr ""
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+
+#: data_checks.py:108
+msgid "The lesson documentation is on holidays."
+msgstr ""
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+
+#: data_checks.py:144
+msgid "The personal note is on holidays."
+msgstr ""
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+
+#: data_checks.py:175
+msgid "The personal note is marked as excused, but not as absent."
+msgstr ""
+
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr "Grex"
@@ -53,16 +105,16 @@ msgid "End period"
 msgstr ""
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr ""
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -73,14 +125,14 @@ msgstr ""
 msgid "Excused"
 msgstr ""
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 msgid "Excuse type"
 msgstr ""
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr ""
@@ -113,14 +165,14 @@ msgstr ""
 msgid "My students"
 msgstr ""
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 msgid "Excuse types"
 msgstr ""
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -165,81 +217,81 @@ msgstr ""
 msgid "Can register an absence for a person"
 msgstr ""
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
 msgstr "Primus nomen"
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr ""
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr ""
 
-#: models.py:101
+#: models.py:122
 #, fuzzy
 #| msgid "Person"
 msgid "Personal note"
 msgstr "Persona"
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr ""
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr ""
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 #, fuzzy
 #| msgid "Group"
 msgid "Group note"
 msgstr "Grex"
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr ""
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 msgid "Lesson documentations"
 msgstr ""
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr ""
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr ""
 
-#: models.py:209
+#: models.py:240
 msgid "Can register absence"
 msgstr ""
 
-#: models.py:210
+#: models.py:241
 msgid "Can list all personal note filters"
 msgstr ""
 
@@ -271,6 +323,10 @@ msgstr ""
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr ""
 
+#: preferences.py:68
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr ""
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr ""
@@ -282,13 +338,13 @@ msgstr ""
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr ""
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr "Persona"
 
@@ -390,13 +446,12 @@ msgid "My next lesson"
 msgstr ""
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, python-format
 msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -404,8 +459,7 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -413,40 +467,40 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 msgid "Absent persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -455,10 +509,33 @@ msgstr ""
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 msgid "Tardiness (in m)"
 msgstr ""
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:387
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+
 #: templates/alsijil/class_register/person.html:8
 msgid "Class register: person"
 msgstr ""
@@ -563,46 +640,46 @@ msgid ""
 "      %(instance)s"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 #, fuzzy
 #| msgid "Group"
 msgid "Groups"
 msgstr "Grex"
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 msgid "Count of tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 msgid ""
 "\n"
 "            There are no lessons for the selected group or teacher in this week.\n"
@@ -671,7 +748,7 @@ msgid "Data complete"
 msgstr ""
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr ""
 
@@ -688,9 +765,9 @@ msgid "Substitution"
 msgstr ""
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr ""
 
@@ -848,17 +925,17 @@ msgid "Date"
 msgstr "dies"
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr ""
 
@@ -866,71 +943,71 @@ msgstr ""
 msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr ""
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: views.py:127
+#: views.py:141
 msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr ""
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr ""
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr ""
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:741
+#: views.py:770
 msgid "The personal note has been deleted."
 msgstr ""
 
-#: views.py:762
+#: views.py:792
 msgid "The extra mark has been created."
 msgstr ""
 
-#: views.py:773
+#: views.py:804
 msgid "The extra mark has been saved."
 msgstr ""
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr ""
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr ""
 
diff --git a/aleksis/apps/alsijil/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/nb_NO/LC_MESSAGES/django.po
index 219d7af7ff7ca661ccb440d5fab0002ecb546788..4704f58a5eb1586fdaf87d76c815c27f80e81c30 100644
--- a/aleksis/apps/alsijil/locale/nb_NO/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/nb_NO/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,63 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: data_checks.py:15
+msgid "Delete object"
+msgstr ""
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr ""
+
+#: data_checks.py:36
+msgid "Reset personal note to defaults"
+msgstr ""
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+
+#: data_checks.py:49
+msgid "The personal note is related to a cancelled lesson."
+msgstr ""
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr ""
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+
+#: data_checks.py:108
+msgid "The lesson documentation is on holidays."
+msgstr ""
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+
+#: data_checks.py:144
+msgid "The personal note is on holidays."
+msgstr ""
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+
+#: data_checks.py:175
+msgid "The personal note is marked as excused, but not as absent."
+msgstr ""
+
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr ""
@@ -52,16 +104,16 @@ msgid "End period"
 msgstr ""
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr ""
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -72,14 +124,14 @@ msgstr ""
 msgid "Excused"
 msgstr ""
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 msgid "Excuse type"
 msgstr ""
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr ""
@@ -110,14 +162,14 @@ msgstr ""
 msgid "My students"
 msgstr ""
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 msgid "Excuse types"
 msgstr ""
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -162,75 +214,75 @@ msgstr ""
 msgid "Can register an absence for a person"
 msgstr ""
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 msgid "Short name"
 msgstr ""
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr ""
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr ""
 
-#: models.py:101
+#: models.py:122
 msgid "Personal note"
 msgstr ""
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr ""
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr ""
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 msgid "Group note"
 msgstr ""
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr ""
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 msgid "Lesson documentations"
 msgstr ""
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr ""
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr ""
 
-#: models.py:209
+#: models.py:240
 msgid "Can register absence"
 msgstr ""
 
-#: models.py:210
+#: models.py:241
 msgid "Can list all personal note filters"
 msgstr ""
 
@@ -262,6 +314,10 @@ msgstr ""
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr ""
 
+#: preferences.py:68
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr ""
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr ""
@@ -273,13 +329,13 @@ msgstr ""
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr ""
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr ""
 
@@ -381,13 +437,12 @@ msgid "My next lesson"
 msgstr ""
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, python-format
 msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -395,8 +450,7 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -404,40 +458,40 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 msgid "Absent persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -446,10 +500,33 @@ msgstr ""
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 msgid "Tardiness (in m)"
 msgstr ""
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:387
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+
 #: templates/alsijil/class_register/person.html:8
 msgid "Class register: person"
 msgstr ""
@@ -554,44 +631,44 @@ msgid ""
 "      %(instance)s"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 msgid "Groups"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 msgid "Count of tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 msgid ""
 "\n"
 "            There are no lessons for the selected group or teacher in this week.\n"
@@ -660,7 +737,7 @@ msgid "Data complete"
 msgstr ""
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr ""
 
@@ -677,9 +754,9 @@ msgid "Substitution"
 msgstr ""
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr ""
 
@@ -835,17 +912,17 @@ msgid "Date"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr ""
 
@@ -853,70 +930,70 @@ msgstr ""
 msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr ""
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: views.py:127
+#: views.py:141
 msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr ""
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr ""
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr ""
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:741
+#: views.py:770
 msgid "The personal note has been deleted."
 msgstr ""
 
-#: views.py:762
+#: views.py:792
 msgid "The extra mark has been created."
 msgstr ""
 
-#: views.py:773
+#: views.py:804
 msgid "The extra mark has been saved."
 msgstr ""
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr ""
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr ""
diff --git a/aleksis/apps/alsijil/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/tr_TR/LC_MESSAGES/django.po
index 219d7af7ff7ca661ccb440d5fab0002ecb546788..4704f58a5eb1586fdaf87d76c815c27f80e81c30 100644
--- a/aleksis/apps/alsijil/locale/tr_TR/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/tr_TR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-05 21:26+0100\n"
+"POT-Creation-Date: 2021-01-22 22:01+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,63 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: data_checks.py:15
+msgid "Delete object"
+msgstr ""
+
+#: data_checks.py:25
+msgid "Set current groups"
+msgstr ""
+
+#: data_checks.py:36
+msgid "Reset personal note to defaults"
+msgstr ""
+
+#: data_checks.py:48
+msgid "Ensure that there are no personal notes in cancelled lessons"
+msgstr ""
+
+#: data_checks.py:49
+msgid "The personal note is related to a cancelled lesson."
+msgstr ""
+
+#: data_checks.py:72
+msgid "Ensure that 'groups_of_person' is set for every personal note"
+msgstr ""
+
+#: data_checks.py:73
+msgid "The personal note has no group in 'groups_of_person'."
+msgstr ""
+
+#: data_checks.py:107
+msgid "Ensure that there are no filled out lesson documentations on holidays"
+msgstr ""
+
+#: data_checks.py:108
+msgid "The lesson documentation is on holidays."
+msgstr ""
+
+#: data_checks.py:143
+msgid "Ensure that there are no filled out personal notes on holidays"
+msgstr ""
+
+#: data_checks.py:144
+msgid "The personal note is on holidays."
+msgstr ""
+
+#: data_checks.py:174
+msgid "Ensure that there are no excused personal notes without an absence"
+msgstr ""
+
+#: data_checks.py:175
+msgid "The personal note is marked as excused, but not as absent."
+msgstr ""
+
 #: forms.py:29
 msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:54 templates/alsijil/class_register/week_view.html:168
+#: forms.py:54 templates/alsijil/class_register/week_view.html:191
 #: templates/alsijil/print/full_register.html:199
 msgid "Group"
 msgstr ""
@@ -52,16 +104,16 @@ msgid "End period"
 msgstr ""
 
 #: forms.py:130 templates/alsijil/absences/register_confirm.html:52
-#: templates/alsijil/class_register/lesson.html:243
+#: templates/alsijil/class_register/lesson.html:247
 #: templates/alsijil/class_register/person.html:207
-#: templates/alsijil/class_register/week_view.html:261
+#: templates/alsijil/class_register/week_view.html:287
 #: templates/alsijil/print/full_register.html:75
 #: templates/alsijil/print/full_register.html:312
 msgid "Absent"
 msgstr ""
 
 #: forms.py:131 templates/alsijil/absences/register_confirm.html:56
-#: templates/alsijil/class_register/lesson.html:245
+#: templates/alsijil/class_register/lesson.html:249
 #: templates/alsijil/class_register/person.html:98
 #: templates/alsijil/class_register/person.html:215
 #: templates/alsijil/partials/mark_as_buttons.html:2
@@ -72,14 +124,14 @@ msgstr ""
 msgid "Excused"
 msgstr ""
 
-#: forms.py:133 models.py:37 models.py:64
-#: templates/alsijil/class_register/lesson.html:246
-#: templates/alsijil/class_register/lesson.html:281
+#: forms.py:133 models.py:45 models.py:79
+#: templates/alsijil/class_register/lesson.html:250
+#: templates/alsijil/class_register/lesson.html:285
 msgid "Excuse type"
 msgstr ""
 
-#: forms.py:138 templates/alsijil/class_register/lesson.html:248
-#: templates/alsijil/class_register/lesson.html:302
+#: forms.py:138 templates/alsijil/class_register/lesson.html:252
+#: templates/alsijil/class_register/lesson.html:306
 #: templates/alsijil/print/full_register.html:314
 msgid "Remarks"
 msgstr ""
@@ -110,14 +162,14 @@ msgstr ""
 msgid "My students"
 msgstr ""
 
-#: menus.py:71 models.py:38 templates/alsijil/excuse_type/list.html:8
+#: menus.py:71 models.py:46 templates/alsijil/excuse_type/list.html:8
 #: templates/alsijil/excuse_type/list.html:9
 #: templates/alsijil/partials/legend.html:26
 msgid "Excuse types"
 msgstr ""
 
-#: menus.py:82 models.py:70 models.py:201
-#: templates/alsijil/class_register/lesson.html:247
+#: menus.py:82 models.py:84 models.py:232
+#: templates/alsijil/class_register/lesson.html:251
 #: templates/alsijil/extra_mark/list.html:8
 #: templates/alsijil/extra_mark/list.html:9
 #: templates/alsijil/partials/legend.html:41
@@ -162,75 +214,75 @@ msgstr ""
 msgid "Can register an absence for a person"
 msgstr ""
 
-#: models.py:25 models.py:188
+#: models.py:33 models.py:219
 msgid "Short name"
 msgstr ""
 
-#: models.py:26 models.py:189 templates/alsijil/class_register/groups.html:20
+#: models.py:34 models.py:220 templates/alsijil/class_register/groups.html:20
 #: templates/alsijil/partials/persons_with_stats.html:14
 #: templates/alsijil/partials/persons_with_stats.html:24
 msgid "Name"
 msgstr ""
 
-#: models.py:54 models.py:121
+#: models.py:69 models.py:144
 msgid "Year"
 msgstr ""
 
-#: models.py:101
+#: models.py:122
 msgid "Personal note"
 msgstr ""
 
-#: models.py:102 templates/alsijil/class_register/lesson.html:101
-#: templates/alsijil/class_register/lesson.html:233
-#: templates/alsijil/class_register/week_view.html:68
-#: templates/alsijil/class_register/week_view.html:242
+#: models.py:123 templates/alsijil/class_register/lesson.html:105
+#: templates/alsijil/class_register/lesson.html:237
+#: templates/alsijil/class_register/week_view.html:71
+#: templates/alsijil/class_register/week_view.html:267
 msgid "Personal notes"
 msgstr ""
 
-#: models.py:127 templates/alsijil/class_register/lesson.html:129
-#: templates/alsijil/class_register/week_view.html:90
-#: templates/alsijil/class_register/week_view.html:177
-#: templates/alsijil/print/full_register.html:371
+#: models.py:150 templates/alsijil/class_register/lesson.html:133
+#: templates/alsijil/class_register/week_view.html:106
+#: templates/alsijil/class_register/week_view.html:200
+#: templates/alsijil/print/full_register.html:369
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:128 templates/alsijil/class_register/lesson.html:137
-#: templates/alsijil/class_register/week_view.html:91
-#: templates/alsijil/class_register/week_view.html:183
-#: templates/alsijil/class_register/week_view.html:216
-#: templates/alsijil/print/full_register.html:372
+#: models.py:151 templates/alsijil/class_register/lesson.html:141
+#: templates/alsijil/class_register/week_view.html:107
+#: templates/alsijil/class_register/week_view.html:206
+#: templates/alsijil/class_register/week_view.html:239
+#: templates/alsijil/print/full_register.html:370
 msgid "Homework"
 msgstr ""
 
-#: models.py:129 templates/alsijil/class_register/lesson.html:145
-#: templates/alsijil/class_register/week_view.html:92
-#: templates/alsijil/class_register/week_view.html:189
-#: templates/alsijil/class_register/week_view.html:222
+#: models.py:152 templates/alsijil/class_register/lesson.html:149
+#: templates/alsijil/class_register/week_view.html:108
+#: templates/alsijil/class_register/week_view.html:212
+#: templates/alsijil/class_register/week_view.html:245
 msgid "Group note"
 msgstr ""
 
-#: models.py:171 templates/alsijil/class_register/lesson.html:97
-#: templates/alsijil/class_register/lesson.html:120
+#: models.py:202 templates/alsijil/class_register/lesson.html:101
+#: templates/alsijil/class_register/lesson.html:124
 msgid "Lesson documentation"
 msgstr ""
 
-#: models.py:172 templates/alsijil/class_register/week_view.html:67
+#: models.py:203 templates/alsijil/class_register/week_view.html:68
 msgid "Lesson documentations"
 msgstr ""
 
-#: models.py:200
+#: models.py:231
 msgid "Extra mark"
 msgstr ""
 
-#: models.py:208
+#: models.py:239
 msgid "Can view week overview"
 msgstr ""
 
-#: models.py:209
+#: models.py:240
 msgid "Can register absence"
 msgstr ""
 
-#: models.py:210
+#: models.py:241
 msgid "Can list all personal note filters"
 msgstr ""
 
@@ -262,6 +314,10 @@ msgstr ""
 msgid "Lessons in the past are not affected by this setting, you can open them whenever you want."
 msgstr ""
 
+#: preferences.py:68
+msgid "Allow teachers to add data for lessons in holidays"
+msgstr ""
+
 #: tables.py:16 tables.py:36
 msgid "Edit"
 msgstr ""
@@ -273,13 +329,13 @@ msgstr ""
 #: templates/alsijil/absences/register.html:5
 #: templates/alsijil/absences/register.html:6
 #: templates/alsijil/class_register/person.html:30
-#: templates/alsijil/class_register/week_view.html:256
+#: templates/alsijil/class_register/week_view.html:282
 #: templates/alsijil/partials/persons_with_stats.html:115
 msgid "Register absence"
 msgstr ""
 
 #: templates/alsijil/absences/register.html:9
-#: templates/alsijil/class_register/lesson.html:242
+#: templates/alsijil/class_register/lesson.html:246
 msgid "Person"
 msgstr ""
 
@@ -381,13 +437,12 @@ msgid "My next lesson"
 msgstr ""
 
 #: templates/alsijil/class_register/lesson.html:46
-#: templates/alsijil/class_register/lesson.html:167
+#: templates/alsijil/class_register/lesson.html:171
 #, python-format
 msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:77
-#: templates/alsijil/class_register/lesson.html:359
+#: templates/alsijil/class_register/lesson.html:79
 #, python-format
 msgid ""
 "\n"
@@ -395,8 +450,7 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:85
-#: templates/alsijil/class_register/lesson.html:367
+#: templates/alsijil/class_register/lesson.html:87
 #, python-format
 msgid ""
 "\n"
@@ -404,40 +458,40 @@ msgid ""
 "        "
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:107
+#: templates/alsijil/class_register/lesson.html:111
 msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:111
-#: templates/alsijil/class_register/lesson.html:342
+#: templates/alsijil/class_register/lesson.html:115
+#: templates/alsijil/class_register/lesson.html:346
 msgid "Change history"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:166
+#: templates/alsijil/class_register/lesson.html:170
 msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:173
+#: templates/alsijil/class_register/lesson.html:177
 msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:180
+#: templates/alsijil/class_register/lesson.html:184
 msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:187
+#: templates/alsijil/class_register/lesson.html:191
 msgid "Group notes for previous lesson:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:194
+#: templates/alsijil/class_register/lesson.html:198
 msgid "Absent persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:201
+#: templates/alsijil/class_register/lesson.html:205
 msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:244
+#: templates/alsijil/class_register/lesson.html:248
 #: templates/alsijil/class_register/person.html:110
 #: templates/alsijil/partials/persons_with_stats.html:17
 #: templates/alsijil/partials/persons_with_stats.html:34
@@ -446,10 +500,33 @@ msgstr ""
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/lesson.html:267
+#: templates/alsijil/class_register/lesson.html:271
 msgid "Tardiness (in m)"
 msgstr ""
 
+#: templates/alsijil/class_register/lesson.html:364
+#, python-format
+msgid ""
+"\n"
+"            Previous %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:372
+#, python-format
+msgid ""
+"\n"
+"            Next %(subject)s lesson\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:387
+msgid ""
+"\n"
+"                This lesson overlaps with holidays and can't be edited.\n"
+"              "
+msgstr ""
+
 #: templates/alsijil/class_register/person.html:8
 msgid "Class register: person"
 msgstr ""
@@ -554,44 +631,44 @@ msgid ""
 "      %(instance)s"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:84
+#: templates/alsijil/class_register/week_view.html:100
 msgid "Period"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:86
+#: templates/alsijil/class_register/week_view.html:102
 msgid "Groups"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:88
-#: templates/alsijil/class_register/week_view.html:163
+#: templates/alsijil/class_register/week_view.html:104
+#: templates/alsijil/class_register/week_view.html:186
 #: templates/alsijil/print/full_register.html:169
 #: templates/alsijil/print/full_register.html:200
 msgid "Subject"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:89
-#: templates/alsijil/class_register/week_view.html:173
+#: templates/alsijil/class_register/week_view.html:105
+#: templates/alsijil/class_register/week_view.html:196
 msgid "Teachers"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:262
+#: templates/alsijil/class_register/week_view.html:288
 msgid "unexcused"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:265
+#: templates/alsijil/class_register/week_view.html:291
 msgid "Summed up tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:268
+#: templates/alsijil/class_register/week_view.html:294
 #: templates/alsijil/partials/persons_with_stats.html:94
 msgid "Count of tardiness"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:297
+#: templates/alsijil/class_register/week_view.html:323
 msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/class_register/week_view.html:300
+#: templates/alsijil/class_register/week_view.html:326
 msgid ""
 "\n"
 "            There are no lessons for the selected group or teacher in this week.\n"
@@ -660,7 +737,7 @@ msgid "Data complete"
 msgstr ""
 
 #: templates/alsijil/partials/lesson_status_icon.html:12
-#: templates/alsijil/print/full_register.html:406
+#: templates/alsijil/print/full_register.html:404
 msgid "Lesson cancelled"
 msgstr ""
 
@@ -677,9 +754,9 @@ msgid "Substitution"
 msgstr ""
 
 #: templates/alsijil/partials/mark_as_buttons.html:4
-#: templates/alsijil/print/full_register.html:335
-#: templates/alsijil/print/full_register.html:424
-#: templates/alsijil/print/full_register.html:439
+#: templates/alsijil/print/full_register.html:334
+#: templates/alsijil/print/full_register.html:422
+#: templates/alsijil/print/full_register.html:437
 msgid "e"
 msgstr ""
 
@@ -835,17 +912,17 @@ msgid "Date"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:309
-#: templates/alsijil/print/full_register.html:369
+#: templates/alsijil/print/full_register.html:367
 msgid "Pe."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:310
-#: templates/alsijil/print/full_register.html:370
+#: templates/alsijil/print/full_register.html:368
 msgid "Subj."
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:311
-#: templates/alsijil/print/full_register.html:374
+#: templates/alsijil/print/full_register.html:372
 msgid "Te."
 msgstr ""
 
@@ -853,70 +930,70 @@ msgstr ""
 msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:330
+#: templates/alsijil/print/full_register.html:329
 msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:363
+#: templates/alsijil/print/full_register.html:361
 msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:373
+#: templates/alsijil/print/full_register.html:371
 msgid "Notes"
 msgstr ""
 
-#: views.py:65
+#: views.py:68
 msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: views.py:90
+#: views.py:93
 msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: views.py:127
+#: views.py:141
 msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: views.py:151
+#: views.py:165
 msgid "The personal notes have been saved."
 msgstr ""
 
-#: views.py:570
+#: views.py:591
 msgid "The absences have been marked as excused."
 msgstr ""
 
-#: views.py:585
+#: views.py:606
 msgid "The absence has been marked as excused."
 msgstr ""
 
-#: views.py:721
+#: views.py:749
 msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:741
+#: views.py:770
 msgid "The personal note has been deleted."
 msgstr ""
 
-#: views.py:762
+#: views.py:792
 msgid "The extra mark has been created."
 msgstr ""
 
-#: views.py:773
+#: views.py:804
 msgid "The extra mark has been saved."
 msgstr ""
 
-#: views.py:783
+#: views.py:815
 msgid "The extra mark has been deleted."
 msgstr ""
 
-#: views.py:803
+#: views.py:836
 msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:814
+#: views.py:848
 msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:824
+#: views.py:859
 msgid "The excuse type has been deleted."
 msgstr ""
diff --git a/aleksis/apps/alsijil/managers.py b/aleksis/apps/alsijil/managers.py
index b2589345adac4c2c02159ea54fc872fe9055408a..7350cf375a12205b7ebe56b9d5fd57bd045a2477 100644
--- a/aleksis/apps/alsijil/managers.py
+++ b/aleksis/apps/alsijil/managers.py
@@ -1,3 +1,6 @@
+from django.db.models import QuerySet
+from django.db.models.query_utils import Q
+
 from aleksis.core.managers import CurrentSiteManagerWithoutMigrations
 
 
@@ -21,3 +24,21 @@ class PersonalNoteManager(CurrentSiteManagerWithoutMigrations):
             )
             .prefetch_related("extra_marks")
         )
+
+
+class PersonalNoteQuerySet(QuerySet):
+    def not_empty(self):
+        """Get all not empty personal notes."""
+        return self.filter(
+            ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False)
+        )
+
+
+class LessonDocumentationManager(CurrentSiteManagerWithoutMigrations):
+    pass
+
+
+class LessonDocumentationQuerySet(QuerySet):
+    def not_empty(self):
+        """Get all not empty lesson documentations."""
+        return self.filter(~Q(topic="") | ~Q(group_note="") | ~Q(homework=""))
diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index 7ab840196988b80bffa63c9c4d3a5aa20aedffef..fdd05fd4bf3a867c98914b17ace921c65ffe052b 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -5,10 +5,7 @@ from django.db.models import Exists, OuterRef, Q, QuerySet
 from django.db.models.aggregates import Count, Sum
 from django.utils.translation import gettext as _
 
-import reversion
 from calendarweek import CalendarWeek
-from django_global_request.middleware import get_request
-from reversion import set_user
 
 from aleksis.apps.chronos.models import LessonPeriod
 from aleksis.core.models import Group, Person
@@ -63,31 +60,25 @@ def mark_absent(
             if sub and sub.cancelled:
                 continue
 
-            with reversion.create_revision():
-                set_user(get_request().user)
-                personal_note, created = (
-                    PersonalNote.objects.select_related(None)
-                    .prefetch_related(None)
-                    .update_or_create(
-                        person=self,
-                        lesson_period=lesson_period,
-                        week=wanted_week.week,
-                        year=wanted_week.year,
-                        defaults={
-                            "absent": absent,
-                            "excused": excused,
-                            "excuse_type": excuse_type,
-                        },
-                    )
+            personal_note, created = (
+                PersonalNote.objects.select_related(None)
+                .prefetch_related(None)
+                .update_or_create(
+                    person=self,
+                    lesson_period=lesson_period,
+                    week=wanted_week.week,
+                    year=wanted_week.year,
+                    defaults={"absent": absent, "excused": excused, "excuse_type": excuse_type,},
                 )
-                personal_note.groups_of_person.set(self.member_of.all())
+            )
+            personal_note.groups_of_person.set(self.member_of.all())
 
-                if remarks:
-                    if personal_note.remarks:
-                        personal_note.remarks += "; %s" % remarks
-                    else:
-                        personal_note.remarks = remarks
-                    personal_note.save()
+            if remarks:
+                if personal_note.remarks:
+                    personal_note.remarks += "; %s" % remarks
+                else:
+                    personal_note.remarks = remarks
+                personal_note.save()
 
     return lesson_periods.count()
 
@@ -276,11 +267,14 @@ def generate_person_list_with_class_register_statistics(
     self: Group, persons: Optional[Iterable] = None
 ) -> QuerySet:
     """Get with class register statistics annotated list of all members."""
-    persons = persons or self.members.all()
+    if persons is None:
+        persons = self.members.all()
+
     persons = persons.filter(
         personal_notes__groups_of_person=self,
         personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
-    ).annotate(
+    ).distinct()
+    persons = persons.annotate(
         absences_count=Count(
             "personal_notes__absent",
             filter=Q(
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index 8890c0d286110a06f3b651c51e886157270db36d..2335efe5f7e8b56a020198554dca9beaf0edaac5 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -12,7 +12,12 @@ from aleksis.apps.alsijil.data_checks import (
     NoPersonalNotesInCancelledLessonsDataCheck,
     PersonalNoteOnHolidaysDataCheck,
 )
-from aleksis.apps.alsijil.managers import PersonalNoteManager
+from aleksis.apps.alsijil.managers import (
+    LessonDocumentationManager,
+    LessonDocumentationQuerySet,
+    PersonalNoteManager,
+    PersonalNoteQuerySet,
+)
 from aleksis.apps.chronos.managers import GroupPropertiesMixin
 from aleksis.apps.chronos.mixins import WeekRelatedMixin
 from aleksis.apps.chronos.models import LessonPeriod
@@ -62,7 +67,7 @@ class PersonalNote(ExtensibleModel, WeekRelatedMixin):
         ExcusesWithoutAbsences,
     ]
 
-    objects = PersonalNoteManager()
+    objects = PersonalNoteManager.from_queryset(PersonalNoteQuerySet)()
 
     person = models.ForeignKey("core.Person", models.CASCADE, related_name="personal_notes")
     groups_of_person = models.ManyToManyField("core.Group", related_name="+")
@@ -140,6 +145,8 @@ class LessonDocumentation(ExtensibleModel, WeekRelatedMixin):
     Non-personal, includes the topic and homework of the lesson.
     """
 
+    objects = LessonDocumentationManager.from_queryset(LessonDocumentationQuerySet)()
+
     data_checks = [LessonDocumentationOnHolidaysDataCheck]
 
     week = models.IntegerField()
diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
index 85ac0fbca5b83004f40621abc5a39bde0864dc47..c95a168f7dc6bbe82f6a8823b0a074abf836b756 100644
--- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
+++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
@@ -316,40 +316,38 @@
       </thead>
 
       <tbody>
-      {% for note in person.personal_notes.all %}
-        {% if note.lesson_period in lesson_periods %}
-          {% if note.absent or note.late or note.remarks or note.extra_marks.all %}
-              {% weekday_to_date note.calendar_week note.lesson_period.period.weekday as note_date %}
-            <tr>
-              <td>{{ note_date }}</td>
-              <td>{{ note.lesson_period.period.period }}</td>
-              <td>{{ note.lesson_period.get_subject.short_name }} </td>
-              <td>{{ note.lesson_period.get_teachers.first.short_name }}</td>
-              <td>
-                {% if note.absent %}
-                  {% trans 'Yes' %}
-                  {% if note.excused %}
-                    {% if note.excuse_type %}
-                      ({{ note.excuse_type.short_name }})
-                    {% else %}
-                      ({% trans 'e' %})
-                    {% endif %}
+      {% for note in person.filtered_notes %}
+        {% if note.absent or note.late or note.remarks or note.extra_marks.all %}
+            {% weekday_to_date note.calendar_week note.lesson_period.period.weekday as note_date %}
+          <tr>
+            <td>{{ note_date }}</td>
+            <td>{{ note.lesson_period.period.period }}</td>
+            <td>{{ note.lesson_period.get_subject.short_name }} </td>
+            <td>{{ note.lesson_period.get_teachers.first.short_name }}</td>
+            <td>
+              {% if note.absent %}
+                {% trans 'Yes' %}
+                {% if note.excused %}
+                  {% if note.excuse_type %}
+                    ({{ note.excuse_type.short_name }})
+                  {% else %}
+                    ({% trans 'e' %})
                   {% endif %}
                 {% endif %}
-              </td>
-              <td>
-                {% if note.late %}
-                  {{ note.late }}'
-                {% endif %}
-              </td>
-              <td>
-                {% for extra_mark in note.extra_marks.all %}
-                  {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %}
-                {% endfor %}
-              </td>
-              <td>{{ note.remarks }}</td>
-            </tr>
-          {% endif %}
+              {% endif %}
+            </td>
+            <td>
+              {% if note.late %}
+                {{ note.late }}'
+              {% endif %}
+            </td>
+            <td>
+              {% for extra_mark in note.extra_marks.all %}
+                {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %}
+              {% endfor %}
+            </td>
+            <td>{{ note.remarks }}</td>
+          </tr>
         {% endif %}
       {% endfor %}
       </tbody>
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index b37becc357e78adcc680bcd4099594870973a9d7..24da1a73817d4fcf1d49bbb9360497a2decadb47 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -1,3 +1,4 @@
+from contextlib import nullcontext
 from datetime import date, datetime, timedelta
 from typing import Any, Dict, Optional
 
@@ -169,14 +170,16 @@ def lesson(
                         instances = personal_note_formset.save()
 
                     # Iterate over personal notes and carry changed absences to following lessons
-                    for instance in instances:
-                        instance.person.mark_absent(
-                            wanted_week[lesson_period.period.weekday],
-                            lesson_period.period.period + 1,
-                            instance.absent,
-                            instance.excused,
-                            instance.excuse_type,
-                        )
+                    with reversion.create_revision():
+                        reversion.set_user(request.user)
+                        for instance in instances:
+                            instance.person.mark_absent(
+                                wanted_week[lesson_period.period.weekday],
+                                lesson_period.period.period + 1,
+                                instance.absent,
+                                instance.excused,
+                                instance.excuse_type,
+                            )
 
                 messages.success(request, _("The personal notes have been saved."))
 
@@ -239,7 +242,7 @@ def week_view(
         initial = {type_.value: instance}
     else:
         initial = {}
-    select_form = SelectForm(request.POST or None, initial=initial)
+    select_form = SelectForm(request, request.POST or None, initial=initial)
 
     if request.method == "POST":
         if select_form.is_valid():
@@ -418,20 +421,29 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
 
     group = get_object_or_404(Group, pk=id_)
 
-    # Get all lesson periods for the selected group
-    lesson_periods = (
-        LessonPeriod.objects.filter_group(group)
-        .distinct()
+    personal_notes = (
+        PersonalNote.objects.select_related("lesson_period")
         .prefetch_related(
-            "documentations",
-            "personal_notes",
-            "personal_notes__excuse_type",
-            "personal_notes__extra_marks",
-            "personal_notes__person",
-            "personal_notes__groups_of_person",
+            "lesson_period__substitutions", "lesson_period__lesson__teachers", "groups_of_person"
+        )
+        .not_empty()
+        .filter(
+            Q(lesson_period__lesson__groups=group)
+            | Q(lesson_period__lesson__groups__parent_groups=group)
+        )
+    )
+    documentations = (
+        LessonDocumentation.objects.select_related("lesson_period")
+        .not_empty()
+        .filter(
+            Q(lesson_period__lesson__groups=group)
+            | Q(lesson_period__lesson__groups__parent_groups=group)
         )
     )
 
+    # Get all lesson periods for the selected group
+    lesson_periods = LessonPeriod.objects.filter_group(group).distinct()
+
     weeks = CalendarWeek.weeks_within(group.school_term.date_start, group.school_term.date_end,)
 
     periods_by_day = {}
@@ -444,39 +456,38 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
                 <= day
                 <= lesson_period.lesson.validity.date_end
             ):
-                documentations = list(
+                filtered_documentations = list(
                     filter(
-                        lambda d: d.week == week.week and d.year == week.year,
-                        lesson_period.documentations.all(),
+                        lambda d: d.week == week.week
+                        and d.year == week.year
+                        and d.lesson_period == lesson_period,
+                        documentations,
                     )
                 )
-                notes = list(
+                filtered_personal_notes = list(
                     filter(
-                        lambda d: d.week == week.week and d.year == week.year,
-                        lesson_period.personal_notes.all(),
+                        lambda d: d.week == week.week
+                        and d.year == week.year
+                        and d.lesson_period == lesson_period,
+                        personal_notes,
                     )
                 )
                 substitution = lesson_period.get_substitution(week)
 
                 periods_by_day.setdefault(day, []).append(
-                    (lesson_period, documentations, notes, substitution)
+                    (lesson_period, filtered_documentations, filtered_personal_notes, substitution)
                 )
 
-    persons = Person.objects.prefetch_related(
-        "personal_notes",
-        "personal_notes__excuse_type",
-        "personal_notes__extra_marks",
-        "personal_notes__lesson_period__lesson__subject",
-        "personal_notes__lesson_period__substitutions",
-        "personal_notes__lesson_period__substitutions__subject",
-        "personal_notes__lesson_period__substitutions__teachers",
-        "personal_notes__lesson_period__lesson__teachers",
-        "personal_notes__lesson_period__period",
-    )
+    persons = Person.objects.prefetch_related(None).select_related(None)
     persons = group.generate_person_list_with_class_register_statistics(persons)
 
+    prefetched_persons = []
+    for person in persons:
+        person.filtered_notes = list(filter(lambda d: d.person == person, personal_notes))
+        prefetched_persons.append(person)
+
     context["school_term"] = group.school_term
-    context["persons"] = persons
+    context["persons"] = prefetched_persons
     context["excuse_types"] = ExcuseType.objects.all()
     context["extra_marks"] = ExtraMark.objects.all()
     context["group"] = group
@@ -633,9 +644,7 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp
     unexcused_absences = allowed_personal_notes.filter(absent=True, excused=False)
     context["unexcused_absences"] = unexcused_absences
 
-    personal_notes = allowed_personal_notes.filter(
-        Q(absent=True) | Q(late__gt=0) | ~Q(remarks="") | Q(extra_marks__isnull=False)
-    ).order_by(
+    personal_notes = allowed_personal_notes.not_empty().order_by(
         "-lesson_period__lesson__validity__date_start",
         "-week",
         "lesson_period__period__weekday",
@@ -734,16 +743,17 @@ def register_absence(request: HttpRequest, id_: int) -> HttpResponse:
                 if holiday:
                     continue
 
-            affected_count += person.mark_absent(
-                day,
-                from_period_on_day,
-                absent,
-                excused,
-                excuse_type,
-                remarks,
-                to_period_on_day,
-                dry_run=not confirmed,
-            )
+            with reversion.create_revision() if confirmed else nullcontext():
+                affected_count += person.mark_absent(
+                    day,
+                    from_period_on_day,
+                    absent,
+                    excused,
+                    excuse_type,
+                    remarks,
+                    to_period_on_day,
+                    dry_run=not confirmed,
+                )
 
         if not confirmed:
             # Show confirmation page
diff --git a/tox.ini b/tox.ini
index e1283a1b72150383c5c2c9b7fbf43abb6cdf6ea2..f09d243fd2ddcd42c0eae1a6c298c08eb9557a13 100644
--- a/tox.ini
+++ b/tox.ini
@@ -35,6 +35,7 @@ commands =
 
 [testenv:build]
 commands_pre =
+    poetry run sh -c "cd aleksis; aleksis-admin compilemessages"
 commands = poetry build
 
 [testenv:docs]