diff --git a/.gitignore b/.gitignore
index b7f983def7a1bfd21715a5e2e7d976a28ae586e1..11164f0193906b0be7a568b29a8a04444705ebf7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,3 +53,6 @@ db.sqlite3
 
 # Sphinx
 docs/_build/
+
+# Test
+.tox/
diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 88127e98c45d71fbe22ec9572fc04d89891489a7..167a73dbc378e01b1189db08508a4d1828fc6ca2 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -11,13 +11,13 @@ from material import Layout, Row
 from aleksis.apps.chronos.managers import TimetableType
 from aleksis.core.models import Group, Person
 
-from .models import ExcuseType, LessonDocumentation, PersonalNote, PersonalNoteFilter
+from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
 
 
 class LessonDocumentationForm(forms.ModelForm):
     class Meta:
         model = LessonDocumentation
-        fields = ["topic", "homework"]
+        fields = ["topic", "homework", "group_note"]
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -28,7 +28,7 @@ class LessonDocumentationForm(forms.ModelForm):
 class PersonalNoteForm(forms.ModelForm):
     class Meta:
         model = PersonalNote
-        fields = ["absent", "late", "excused", "excuse_type", "remarks"]
+        fields = ["absent", "late", "excused", "excuse_type", "extra_marks", "remarks"]
 
     person_name = forms.CharField(disabled=True)
 
@@ -109,12 +109,12 @@ class RegisterAbsenceForm(forms.Form):
     remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False)
 
 
-class PersonalNoteFilterForm(forms.ModelForm):
-    layout = Layout(Row("identifier", "description"), Row("regex"))
+class ExtraMarkForm(forms.ModelForm):
+    layout = Layout("short_name", "name")
 
     class Meta:
-        model = PersonalNoteFilter
-        fields = ["identifier", "description", "regex"]
+        model = ExtraMark
+        fields = ["short_name", "name"]
 
 
 class ExcuseTypeForm(forms.ModelForm):
diff --git a/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/ar/LC_MESSAGES/django.po
index 075f3e3ab07c2dbfead9a64998c893280beb29e0..64943027bfa78a70aa978fbc1252b3062ea6e5d2 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-04-01 13:20+0200\n"
+"POT-Creation-Date: 2020-07-26 16:10+0200\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"
@@ -16,49 +16,57 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "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"
+"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"
 
-#: forms.py:41
+#: forms.py:25
+msgid "Homework for the next lesson"
+msgstr ""
+
+#: forms.py:50 templates/alsijil/print/full_register.html:181
 msgid "Group"
 msgstr ""
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
 msgstr ""
 
-#: forms.py:57
-msgid "Room"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
 msgstr ""
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
 msgstr ""
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
 msgstr ""
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
 msgstr ""
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
 msgstr ""
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
 msgstr ""
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
 msgstr ""
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
 msgstr ""
 
@@ -78,306 +86,491 @@ msgstr ""
 msgid "Register absence"
 msgstr ""
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
 msgstr ""
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+msgid "Excuse types"
+msgstr ""
+
+#: models.py:18
+msgid "Short name"
+msgstr ""
+
+#: models.py:20
+msgid "Name"
+msgstr ""
+
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+msgid "Excuse type"
+msgstr ""
+
+#: models.py:70
+msgid "Personal note"
+msgstr ""
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr ""
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
 msgstr ""
 
-#: models.py:68
+#: models.py:96
+msgid "Group note"
+msgstr ""
+
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr ""
+
+#: models.py:100
+msgid "Lesson documentations"
+msgstr ""
+
+#: models.py:114
 msgid "Identifier"
 msgstr ""
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
 msgstr ""
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr ""
 
-#: tables.py:14
+#: models.py:128
+msgid "Personal note filter"
+msgstr ""
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr ""
 
-#: templates/alsijil/lesson.html:5
+#: tables.py:37
+msgid "Delete"
+msgstr ""
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, python-format
+msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/lesson.html:43
-msgid "Change history"
+#: templates/alsijil/class_register/lesson.html:38
+msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
+#: templates/alsijil/class_register/lesson.html:46
+msgid "Next lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:98
+msgid "Absent persons:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:130
+msgid "Change history"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
+#: templates/alsijil/class_register/lesson.html:173
+msgid "Tardiness (in m)"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-msgid "Delete filter"
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:124
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:12
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:7
+msgid "All personal note filters"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:12
 msgid "Add filter"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
-msgid "Owners"
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+msgid "Update personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+msgid "Create personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:6
+msgid "Class register:"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
+msgid "Owners"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:61
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:103
 msgid "Persons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:66
+#: templates/alsijil/print/full_register.html:108
 msgid "No."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:67
+#: templates/alsijil/print/full_register.html:109
 msgid "Last name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:68
+#: templates/alsijil/print/full_register.html:110
 msgid "First name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:69
+#: templates/alsijil/print/full_register.html:111
 msgid "Sex"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:70
+#: templates/alsijil/print/full_register.html:112
 msgid "Date of birth"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:95
+#: templates/alsijil/print/full_register.html:146
 msgid "Teachers and lessons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+msgid "Teachers and lessons in child groups"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:240
-msgid "Yes"
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
-msgid "e"
+#: templates/alsijil/print/full_register.html:322
+msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
+msgid "e"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
+#: templates/alsijil/print/full_register.html:349
+msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
+#: views.py:66
+msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
+#: views.py:80
+msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: templates/alsijil/week_view.html:6
-msgid "Week view"
+#: views.py:106
+msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:21
-msgid "Select"
+#: views.py:121
+msgid "The personal notes have been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:47
-msgid "Period"
+#: views.py:303
+msgid "There is no current school term."
 msgstr ""
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
-msgstr ""
-
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
-msgstr ""
-
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
-msgstr ""
-
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
-msgstr ""
-
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
+#: views.py:419
+msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:56
-msgid ""
-"You either selected an invalid lesson or there is currently no lesson in "
-"progress."
+#: views.py:459
+msgid "The filter has been saved"
 msgstr ""
 
-#: views.py:68
-msgid ""
-"You are not allowed to create a lesson documentation for a lesson in the "
-"future."
+#: views.py:474
+msgid "The filter has been deleted."
 msgstr ""
 
-#: views.py:306
-msgid "The absence has been saved."
+#: views.py:497
+msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:344
-msgid "The filter has been saved"
+#: views.py:508
+msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:360
-msgid "The filter has been deleted."
+#: views.py:518
+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 c91388c7ee373d3a0177a63f06b675a46ad8ed0d..19e781fa15510fb9fd521bd968238f6aa0266521 100644
--- a/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/de_DE/LC_MESSAGES/django.po
@@ -7,58 +7,67 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-04-01 13:20+0200\n"
-"PO-Revision-Date: 2019-11-24 21:56+0000\n"
-"Last-Translator: Tom Teichler <tom.teichler@teckids.org>\n"
-"Language-Team: German <https://translate.edugit.org/projects/aleksis-sis/"
+"POT-Creation-Date: 2020-07-26 16:10+0200\n"
+"PO-Revision-Date: 2020-07-28 12:51+0000\n"
+"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
+"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
 "aleksis-app-alsijil/de/>\n"
 "Language: de_DE\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.8\n"
+"X-Generator: Weblate 4.0.1\n"
 
-#: forms.py:41
+#: forms.py:25
+msgid "Homework for the next lesson"
+msgstr "Hausaufgabe zur nächsten Stunde"
+
+#: forms.py:50 templates/alsijil/print/full_register.html:181
 msgid "Group"
 msgstr "Gruppe"
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
 msgstr "Lehrkraft"
 
-#: forms.py:57
-msgid "Room"
-msgstr "Raum"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
+msgstr "Es kann nur entweder eine Gruppe oder eine Lehrkraft ausgewählt werden."
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
 msgstr "Startdatum"
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
 msgstr "Enddatum"
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
 msgstr "Ab Stunde"
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
 msgstr "Person"
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
 msgstr "Abwesend"
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
 msgstr "Entschuldigt"
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
 msgstr "Bemerkungen"
 
@@ -78,341 +87,543 @@ msgstr "Aktuelle Woche"
 msgid "Register absence"
 msgstr "Abwesenheit eintragen"
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
 msgstr "Filter für persönliche Notizen"
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+msgid "Excuse types"
+msgstr "Entschuldigungsarten"
+
+#: models.py:18
+msgid "Short name"
+msgstr "Kurzname"
+
+#: models.py:20
+msgid "Name"
+msgstr "Name"
+
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+msgid "Excuse type"
+msgstr "Entschuldigungsart"
+
+#: models.py:70
+msgid "Personal note"
+msgstr "Persönliche Notiz"
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr "Persönliche Notizen"
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
 msgstr "Stundenthema"
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
 msgstr "Hausaufgaben"
 
-#: models.py:68
+#: models.py:96
+msgid "Group note"
+msgstr "Gruppennotiz"
+
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr "Stunden-Dokumentation"
+
+#: models.py:100
+msgid "Lesson documentations"
+msgstr "Stunden-Dokumentationen"
+
+#: models.py:114
 msgid "Identifier"
 msgstr "Kennung"
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
 msgstr "Beschreibung"
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr "Suchausdruck"
 
-#: tables.py:14
+#: models.py:128
+msgid "Personal note filter"
+msgstr "Filter für persönliche Notizen"
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: templates/alsijil/lesson.html:5
-#, fuzzy
-#| msgid "Lessons"
+#: tables.py:37
+msgid "Delete"
+msgstr "Löschen"
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr "Abwesenheiten verwalten"
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
-msgstr "Unterrichtsstunden"
+msgstr "Unterrichtsstunde"
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
-msgstr "Stunden-Dokumentation"
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, python-format
+msgid "%(period)s. period"
+msgstr "%(period)s. Stunde"
+
+#: templates/alsijil/class_register/lesson.html:38
+msgid "Previous lesson"
+msgstr "Vorherige Unterrichtsstunde"
+
+#: templates/alsijil/class_register/lesson.html:46
+msgid "Next lesson"
+msgstr "Nächste Unterrichtsstunde"
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
+msgstr "Ãœbersicht: Vorherige Stunde"
+
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
+msgstr "Stundenthema der vorherigen Stunde:"
+
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
+msgstr "Hausaufgaben zu dieser Stunde:"
+
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr "Gruppennotizen für die vorherige Stunde:"
+
+#: templates/alsijil/class_register/lesson.html:98
+msgid "Absent persons:"
+msgstr "Abwesende Personen:"
+
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
+msgstr "Verspätete Personen:"
 
-#: templates/alsijil/lesson.html:43
+#: templates/alsijil/class_register/lesson.html:130
 msgid "Change history"
 msgstr "Veränderungen"
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
-msgstr "Persönliche Notizen"
-
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
 msgstr "Verspätung"
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
-msgstr "Filter für persönliche Notizen verwalten"
+#: templates/alsijil/class_register/lesson.html:173
+msgid "Tardiness (in m)"
+msgstr "Verspätung (in m)"
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-#, fuzzy
-#| msgid "Personal note filters"
-msgid "Delete filter"
-msgstr "Filter für persönliche Notizen"
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr "Wochenansicht"
 
-#: templates/alsijil/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
-msgstr "Liste aller Filter für persönliche Notizen"
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr "Auswählen"
 
-#: templates/alsijil/personal_note_filters.html:12
-msgid "Add filter"
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
+msgstr "KW %(week)s: %(instance)s"
+
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr "Stunde"
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr "Fach"
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr "Lehrkräfte"
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr "unentschuldigt"
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr "Summierte Verspätung"
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
+msgstr "Keine Stunden verfügbar"
+
+#: templates/alsijil/class_register/week_view.html:124
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\n"
+"          "
+msgstr ""
+"\n"
+"            Es gibt keine Stunden für die ausgewählte Gruppe oder Lehrkraft "
+"in dieser Woche.\n"
+"          "
+
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr "Entschuldigungsart erstellen"
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr "Entschuldigungsart bearbeiten"
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
 msgstr ""
+"\n"
+"      Diese Funktion sollte nur benutzt werden, um Alternativen zur normalen "
+"Entschuldigung, welche von sich aus extra gezählt wird, zu definieren.\n"
+"Benutzen Sie diese Funktion nicht, um eine Entschuldigungsart für normale "
+"Entschuldigungen zu erstellen oder wenn Sie nicht zwischen verschiedenen "
+"Entschuldigungsarten unterscheiden möchten.\n"
+"    "
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr "(e)"
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr "(u)"
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
+msgstr "Daten vollständig"
+
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
+msgstr "Fehlende Daten"
+
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr "Findet gerade statt"
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr "Stunde ist ausgefallen"
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr "Vertretung"
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
+#: templates/alsijil/personal_note_filter/list.html:7
+msgid "All personal note filters"
+msgstr "Alle Filter für persönliche Notizen"
+
+#: templates/alsijil/personal_note_filter/list.html:12
+msgid "Add filter"
+msgstr "Filter hinzufügen"
+
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+msgid "Update personal note filter"
+msgstr "Filter für persönliche Notizen aktualisieren"
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+msgid "Create personal note filter"
+msgstr "Filter für persönliche Notizen erstellen"
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
+msgstr "Filter löschen"
+
+#: templates/alsijil/print/full_register.html:6
+msgid "Class register:"
+msgstr "Klassenbuch:"
+
+#: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
 msgid "Owners"
 msgstr "Leiter/-innen"
 
-#: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
 msgstr "Gedruckt am"
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 "\n"
-"            Dieser Ausdruck ist für Archivierungszwecke gedacht. Die "
-"Hauptkopie\n"
-"            des Klassenbusches ist im AlekSIS-Schul-Informations-System "
+"        Dieser Ausdruck ist für Archivierungszwecke gedacht. Die Hauptkopie\n"
+"            des Klassenbuches ist im AlekSIS-Schul-Informations-System "
 "gespeichert.\n"
-"          "
+"      "
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "            Copies of the class register, both digital and as printout, must\n"
+#| "            only be kept inside the school and/or on devices authorised by the\n"
+#| "            school.\n"
+#| "          "
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 "\n"
-"            Kopien des Klassenbuches, sowohl digital als auch als Ausdruck, "
+"        Kopien des Klassenbuches, sowohl digital als auch als Ausdruck, "
 "dürfen\n"
 "            ausschließlich in der Schule und/oder auf vonder Schule "
 "autorisierten Geräten\n"
 "            gespeichert werden.\n"
-"          "
+"      "
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 "\n"
-"            Die Leitung der Gruppe sowie die Schulleitung bestätigen die "
-"obigen Hinweise sowie\n"
+"        Die Leitung der Gruppe sowie die Schulleitung bestätigen die obigen "
+"Hinweise sowie\n"
 "            die Richtigkeit des Ausdrucks.\n"
-"          "
+"      "
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
 msgstr "Schulleitung"
 
-#: templates/alsijil/print/full_register.html:61
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
+msgstr "Abkürzungen"
+
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
+msgstr "Allgemein"
+
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
+msgstr "Verspätet"
+
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
+msgstr "Unentschuldigt"
+
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
+msgstr "Benutzerdefinierte Entschuldigunsarten"
+
+#: templates/alsijil/print/full_register.html:103
 msgid "Persons in group"
 msgstr "Personen in der Gruppe"
 
-#: templates/alsijil/print/full_register.html:66
+#: templates/alsijil/print/full_register.html:108
 msgid "No."
 msgstr "Nr."
 
-#: templates/alsijil/print/full_register.html:67
+#: templates/alsijil/print/full_register.html:109
 msgid "Last name"
 msgstr "Nachname"
 
-#: templates/alsijil/print/full_register.html:68
+#: templates/alsijil/print/full_register.html:110
 msgid "First name"
 msgstr "Vorname"
 
-#: templates/alsijil/print/full_register.html:69
+#: templates/alsijil/print/full_register.html:111
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: templates/alsijil/print/full_register.html:70
+#: templates/alsijil/print/full_register.html:112
 msgid "Date of birth"
 msgstr "Geburtsdatum"
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
-msgstr "Abwesenheiten"
-
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
-msgstr "Unentschuldigt"
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
+msgstr "(a)"
 
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
-msgstr "Verspät."
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
+msgstr "(b)"
 
-#: templates/alsijil/print/full_register.html:95
+#: templates/alsijil/print/full_register.html:146
 msgid "Teachers and lessons in group"
 msgstr "Lehrkräfte und Fächer der Gruppe"
 
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
-msgstr "Fach"
-
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
 msgstr "Unterrichtsbeginn"
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
 msgstr "Unterrichtsende"
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
 msgstr "Pro Woche"
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+msgid "Teachers and lessons in child groups"
+msgstr "Lehrkräfte und Fächer von Untergruppen"
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
 msgstr "Persönliche Übersicht"
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
 msgstr "Kontaktdetails"
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr "Statistiken zu Bemerkungen"
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
 msgstr "Anzahl"
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
 msgstr "Abwesenheiten und Verspätungen"
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr "Absenzen"
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
+msgstr "davon"
+
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
 msgstr "Relevante persönliche Notizen"
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
 msgstr "Datum"
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr "Std."
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr "Fa."
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr "Lk."
 
-#: templates/alsijil/print/full_register.html:240
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
+msgstr "Verspät."
+
+#: templates/alsijil/print/full_register.html:322
 msgid "Yes"
 msgstr "Ja"
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
 msgid "e"
 msgstr "e"
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
-msgstr "Unterrichtsdokumentation für Kalenderwoche"
-
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
-msgstr "Vertr."
+#: templates/alsijil/print/full_register.html:349
+msgid "Lesson documentation for week"
+msgstr "Unterrichtsdokumentation für Woche"
 
-#: templates/alsijil/print/full_register.html:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
 msgstr "Notizen"
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
-msgstr "Stunde ist ausgefallen"
+#: views.py:66
+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."
 
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
-msgstr "Abwesenheiten verwalten"
+#: views.py:80
+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."
 
-#: templates/alsijil/week_view.html:6
-#, fuzzy
-#| msgid "Week"
-msgid "Week view"
-msgstr "Woche"
+#: views.py:106
+msgid "The lesson documentation has been saved."
+msgstr "Die Stunden-Dokumentation wurde gespeichert."
 
-#: templates/alsijil/week_view.html:21
-msgid "Select"
-msgstr "Auswählen"
+#: views.py:121
+msgid "The personal notes have been saved."
+msgstr "Die persönlichen Notizen wurden gespeichert."
 
-#: templates/alsijil/week_view.html:47
-msgid "Period"
-msgstr "Stunde"
+#: views.py:303
+msgid "There is no current school term."
+msgstr "Es gibt aktuell kein Schuljahr."
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
-msgstr "Lehrkräfte"
+#: views.py:419
+msgid "The absence has been saved."
+msgstr "Die Abwesenheit wurde gespeichert."
 
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
-msgstr "unentschuldigt"
+#: views.py:459
+msgid "The filter has been saved"
+msgstr "Der Filter wurde gespeichert"
 
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
-msgstr "Summierte Verspätung"
+#: views.py:474
+msgid "The filter has been deleted."
+msgstr "Der Filter wurde gespeichert."
 
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
-msgstr "Keine Gruppe ausgewählt"
+#: views.py:497
+msgid "The excuse type has been created."
+msgstr "Die Entschuldigungsart wurde erstellt."
 
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
-msgstr ""
-"\n"
-"            Es gibt keine Stunden für die ausgewählte Gruppe, den Lehrer "
-"oder Raum.\n"
-"          "
+#: views.py:508
+msgid "The excuse type has been saved."
+msgstr "Die Entschuldigunsart wurde gespeichert."
 
-#: views.py:56
-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:518
+msgid "The excuse type has been deleted."
+msgstr "Die Entschuldigungsart wurde gelöscht."
 
-#: views.py:68
-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."
+#~ msgid "Room"
+#~ msgstr "Raum"
 
-#: views.py:306
-msgid "The absence has been saved."
-msgstr "Die Abwesenheit wurde gespeichert."
+#~ msgid "List of all personal note filters"
+#~ msgstr "Liste aller Filter für persönliche Notizen"
 
-#: views.py:344
-msgid "The filter has been saved"
-msgstr "Der Filter wurde gespeichert"
+#~ msgid "Subs."
+#~ msgstr "Vertr."
 
-#: views.py:360
-msgid "The filter has been deleted."
-msgstr "Der Filter wurde gespeichert."
+#~ msgid "No group selected"
+#~ msgstr "Keine Gruppe ausgewählt"
 
 #~ msgid "Save"
 #~ msgstr "Speichern"
diff --git a/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
index c491f8a74e0717b777be7d612eed4eade787bcf7..cf0fdc479b7bc6078c1587307271b709ea49de33 100644
--- a/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/fr/LC_MESSAGES/django.po
@@ -3,380 +3,625 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-04-01 13:20+0200\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"
-"Language: \n"
+"POT-Creation-Date: 2020-07-26 16:10+0200\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"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.0.1\n"
 
-#: forms.py:41
-msgid "Group"
+#: forms.py:25
+msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:50 templates/alsijil/print/full_register.html:181
+msgid "Group"
+msgstr "Groupe"
+
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
-msgstr ""
+msgstr "Profs"
 
-#: forms.py:57
-msgid "Room"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
 msgstr ""
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
-msgstr ""
+msgstr "Date de début"
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
-msgstr ""
+msgstr "Date de fin"
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
-msgstr ""
+msgstr "De la période"
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
-msgstr ""
+msgstr "Personne"
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
-msgstr ""
+msgstr "Absent(e)"
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
-msgstr ""
+msgstr "Excusé"
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
-msgstr ""
+msgstr "Remarque"
 
 #: menus.py:6 templates/alsijil/print/full_register.html:16
 msgid "Class register"
-msgstr ""
+msgstr "Registre de la classe"
 
 #: menus.py:16
 msgid "Current lesson"
-msgstr ""
+msgstr "Lecon actuelle"
 
 #: menus.py:22
 msgid "Current week"
-msgstr ""
+msgstr "Semaine actuelle"
 
 #: menus.py:28
 msgid "Register absence"
-msgstr ""
+msgstr "Registre de Absence"
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
+msgstr "Filtres de notes personnelles"
+
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+#, fuzzy
+#| msgid "Excused"
+msgid "Excuse types"
+msgstr "Excusé"
+
+#: models.py:18
+#, fuzzy
+#| msgid "First name"
+msgid "Short name"
+msgstr "Prénom"
+
+#: models.py:20
+msgid "Name"
 msgstr ""
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+#, fuzzy
+#| msgid "Excused"
+msgid "Excuse type"
+msgstr "Excusé"
+
+#: models.py:70
+#, fuzzy
+#| msgid "Personal notes"
+msgid "Personal note"
+msgstr "Notes personnelles"
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr "Notes personnelles"
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
-msgstr ""
+msgstr "Sujet de cours"
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
-msgstr ""
+msgstr "Devoirs"
+
+#: models.py:96
+#, fuzzy
+#| msgid "Group"
+msgid "Group note"
+msgstr "Groupe"
 
-#: models.py:68
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr "Documentation de cours"
+
+#: models.py:100
+#, fuzzy
+#| msgid "Lesson documentation"
+msgid "Lesson documentations"
+msgstr "Documentation de cours"
+
+#: models.py:114
 msgid "Identifier"
-msgstr ""
+msgstr "Identificateur"
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
-msgstr ""
+msgstr "Description"
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr ""
 
-#: tables.py:14
+#: models.py:128
+#, fuzzy
+#| msgid "Personal note filters"
+msgid "Personal note filter"
+msgstr "Filtres de notes personnelles"
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr ""
 
-#: templates/alsijil/lesson.html:5
+#: tables.py:37
+msgid "Delete"
+msgstr ""
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
+msgstr "Cours"
+
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, fuzzy, python-format
+#| msgid "From period"
+msgid "%(period)s. period"
+msgstr "De la période"
+
+#: templates/alsijil/class_register/lesson.html:38
+#, fuzzy
+#| msgid "Current lesson"
+msgid "Previous lesson"
+msgstr "Lecon actuelle"
+
+#: templates/alsijil/class_register/lesson.html:46
+#, fuzzy
+#| msgid "Current lesson"
+msgid "Next lesson"
+msgstr "Lecon actuelle"
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:43
-msgid "Change history"
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:98
+#, fuzzy
+#| msgid "Absences"
+msgid "Absent persons:"
+msgstr "Absences"
+
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:130
+msgid "Change history"
+msgstr "Changement d' histoire"
+
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
+msgstr "Retard"
+
+#: templates/alsijil/class_register/lesson.html:173
+#, fuzzy
+#| msgid "Tardiness"
+msgid "Tardiness (in m)"
+msgstr "Retard"
+
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr "Vue de semaine"
+
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr "Sélectionner"
+
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr "Période"
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr "Sujet"
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr "Profs"
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr "Injustifié(e)"
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr "Résumé des retards"
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-msgid "Delete filter"
+#: templates/alsijil/class_register/week_view.html:124
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "            There are no lessons for the selected group, teacher, room or time.\n"
+#| "          "
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\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/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:12
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr "Cours annulés"
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:7
+#, fuzzy
+#| msgid "Personal note filters"
+msgid "All personal note filters"
+msgstr "Filtres de notes personnelles"
+
+#: templates/alsijil/personal_note_filter/list.html:12
 msgid "Add filter"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
-msgid "Owners"
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+#, fuzzy
+#| msgid "Personal note filters"
+msgid "Update personal note filter"
+msgstr "Filtres de notes personnelles"
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+#, fuzzy
+#| msgid "Personal note filters"
+msgid "Create personal note filter"
+msgstr "Filtres de notes personnelles"
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
 msgstr ""
 
+#: templates/alsijil/print/full_register.html:6
+#, fuzzy
+#| msgid "Class register"
+msgid "Class register:"
+msgstr "Registre de la classe"
+
 #: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
+msgid "Owners"
+msgstr "Propriétaires"
+
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
-msgstr ""
+msgstr "Imprimé sur"
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
+msgstr "Prof principale"
+
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:61
-msgid "Persons in group"
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:66
-msgid "No."
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:67
-msgid "Last name"
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
+msgstr "injustifié(e)"
+
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:68
+#: templates/alsijil/print/full_register.html:103
+msgid "Persons in group"
+msgstr "Personnes en groupe"
+
+#: templates/alsijil/print/full_register.html:108
+msgid "No."
+msgstr "Non."
+
+#: templates/alsijil/print/full_register.html:109
+msgid "Last name"
+msgstr "Nom de famille"
+
+#: templates/alsijil/print/full_register.html:110
 msgid "First name"
-msgstr ""
+msgstr "Prénom"
 
-#: templates/alsijil/print/full_register.html:69
+#: templates/alsijil/print/full_register.html:111
 msgid "Sex"
-msgstr ""
+msgstr "Sexe"
 
-#: templates/alsijil/print/full_register.html:70
+#: templates/alsijil/print/full_register.html:112
 msgid "Date of birth"
-msgstr ""
+msgstr "Date d'anniversaire"
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:95
+#: templates/alsijil/print/full_register.html:146
 msgid "Teachers and lessons in group"
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
-msgstr ""
+msgstr "Profs et cours en groupe"
 
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
-msgstr ""
+msgstr "Début de cours"
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
-msgstr ""
+msgstr "Fin de cours"
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
-msgstr ""
+msgstr "Par semaine"
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+#, fuzzy
+#| msgid "Teachers and lessons in group"
+msgid "Teachers and lessons in child groups"
+msgstr "Profs et cours en groupe"
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
-msgstr ""
+msgstr "Vue d'ensemble personnelle"
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
-msgstr ""
+msgstr "Détails de contact"
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
-msgstr ""
+msgstr "Compter"
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
+msgstr "Absences et retards"
+
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr "Absences"
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
-msgstr ""
+msgstr "Notes personnelles importantes"
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
-msgstr ""
+msgstr "Date"
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:240
-msgid "Yes"
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
-msgid "e"
-msgstr ""
+#: templates/alsijil/print/full_register.html:322
+msgid "Yes"
+msgstr "Oui"
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
-msgstr ""
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
+msgid "e"
+msgstr "e"
 
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
-msgstr ""
+#: templates/alsijil/print/full_register.html:349
+#, 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:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
-msgstr ""
+msgstr "Notes"
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
+#: views.py:66
+msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
+#: views.py:80
+msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: templates/alsijil/week_view.html:6
-msgid "Week view"
-msgstr ""
-
-#: templates/alsijil/week_view.html:21
-msgid "Select"
-msgstr ""
-
-#: templates/alsijil/week_view.html:47
-msgid "Period"
-msgstr ""
+#: views.py:106
+#, fuzzy
+#| msgid "Lesson documentation for calendar week"
+msgid "The lesson documentation has been saved."
+msgstr "Documentation de cours pour la semaine calendrier"
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
+#: views.py:121
+msgid "The personal notes have been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
+#: views.py:303
+msgid "There is no current school term."
 msgstr ""
 
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
+#: views.py:419
+msgid "The absence has been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
+#: views.py:459
+msgid "The filter has been saved"
 msgstr ""
 
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
+#: views.py:474
+msgid "The filter has been deleted."
 msgstr ""
 
-#: views.py:56
-msgid ""
-"You either selected an invalid lesson or there is currently no lesson in "
-"progress."
+#: views.py:497
+msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:68
-msgid ""
-"You are not allowed to create a lesson documentation for a lesson in the "
-"future."
+#: views.py:508
+msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:306
-msgid "The absence has been saved."
+#: views.py:518
+msgid "The excuse type has been deleted."
 msgstr ""
 
-#: views.py:344
-msgid "The filter has been saved"
-msgstr ""
+#~ msgid "Room"
+#~ msgstr "Salle"
 
-#: views.py:360
-msgid "The filter has been deleted."
-msgstr ""
+#~ msgid "List of all personal note filters"
+#~ msgstr "Liste de filtres de notes personnelles"
diff --git a/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po b/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
index 1b9dbace2c6602f12f716c93ba7b9853400790d4..02b275330dfb4e5882c0b211538134e445f05fa6 100644
--- a/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/apps/alsijil/locale/la/LC_MESSAGES/django.po
@@ -3,60 +3,70 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-04-01 13:20+0200\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"
-"Language: \n"
+"POT-Creation-Date: 2020-07-26 16:10+0200\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"
+"Language: la\n"
 "MIME-Version: 1.0\n"
 "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.0.1\n"
 
-#: forms.py:41
-msgid "Group"
+#: forms.py:25
+msgid "Homework for the next lesson"
 msgstr ""
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:50 templates/alsijil/print/full_register.html:181
+msgid "Group"
+msgstr "Grex"
+
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
 msgstr ""
 
-#: forms.py:57
-msgid "Room"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
 msgstr ""
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
 msgstr ""
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
 msgstr ""
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
 msgstr ""
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
-msgstr ""
+msgstr "Persona"
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
 msgstr ""
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
 msgstr ""
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
 msgstr ""
 
@@ -76,306 +86,497 @@ msgstr ""
 msgid "Register absence"
 msgstr ""
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
 msgstr ""
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+msgid "Excuse types"
+msgstr ""
+
+#: models.py:18
+#, fuzzy
+#| msgid "First name"
+msgid "Short name"
+msgstr "Primus nomen"
+
+#: models.py:20
+msgid "Name"
+msgstr ""
+
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+msgid "Excuse type"
+msgstr ""
+
+#: models.py:70
+#, fuzzy
+#| msgid "Person"
+msgid "Personal note"
+msgstr "Persona"
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr ""
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
 msgstr ""
 
-#: models.py:68
+#: models.py:96
+#, fuzzy
+#| msgid "Group"
+msgid "Group note"
+msgstr "Grex"
+
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr ""
+
+#: models.py:100
+msgid "Lesson documentations"
+msgstr ""
+
+#: models.py:114
 msgid "Identifier"
 msgstr ""
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
-msgstr ""
+msgstr "Descriptio"
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr ""
 
-#: tables.py:14
+#: models.py:128
+msgid "Personal note filter"
+msgstr ""
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr ""
 
-#: templates/alsijil/lesson.html:5
+#: tables.py:37
+msgid "Delete"
+msgstr ""
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, python-format
+msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/lesson.html:43
-msgid "Change history"
+#: templates/alsijil/class_register/lesson.html:38
+msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
+#: templates/alsijil/class_register/lesson.html:46
+msgid "Next lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:98
+msgid "Absent persons:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:130
+msgid "Change history"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
+#: templates/alsijil/class_register/lesson.html:173
+msgid "Tardiness (in m)"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-msgid "Delete filter"
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:124
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:12
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:7
+msgid "All personal note filters"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:12
 msgid "Add filter"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
-msgid "Owners"
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+msgid "Update personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+msgid "Create personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:6
+msgid "Class register:"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
+msgid "Owners"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:61
-msgid "Persons in group"
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:66
-msgid "No."
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:67
-msgid "Last name"
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:68
-msgid "First name"
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:69
-msgid "Sex"
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:70
-msgid "Date of birth"
+#: templates/alsijil/print/full_register.html:103
+msgid "Persons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
+#: templates/alsijil/print/full_register.html:108
+msgid "No."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
-msgstr ""
+#: templates/alsijil/print/full_register.html:109
+msgid "Last name"
+msgstr "Secondus nomen"
 
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
+#: templates/alsijil/print/full_register.html:110
+msgid "First name"
+msgstr "Primus nomen"
+
+#: templates/alsijil/print/full_register.html:111
+msgid "Sex"
+msgstr "Genus"
+
+#: templates/alsijil/print/full_register.html:112
+msgid "Date of birth"
+msgstr "Dies natalis"
+
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:95
-msgid "Teachers and lessons in group"
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
+#: templates/alsijil/print/full_register.html:146
+msgid "Teachers and lessons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+msgid "Teachers and lessons in child groups"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
-msgstr ""
+msgstr "dies"
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:240
-msgid "Yes"
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
-msgid "e"
+#: templates/alsijil/print/full_register.html:322
+msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
+msgid "e"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
+#: templates/alsijil/print/full_register.html:349
+msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
-msgstr ""
-
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
-msgstr ""
-
-#: templates/alsijil/week_view.html:6
-msgid "Week view"
-msgstr ""
-
-#: templates/alsijil/week_view.html:21
-msgid "Select"
-msgstr ""
-
-#: templates/alsijil/week_view.html:47
-msgid "Period"
+#: views.py:66
+msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
+#: views.py:80
+msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
+#: views.py:106
+msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
+#: views.py:121
+msgid "The personal notes have been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
+#: views.py:303
+msgid "There is no current school term."
 msgstr ""
 
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
+#: views.py:419
+msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:56
-msgid ""
-"You either selected an invalid lesson or there is currently no lesson in "
-"progress."
+#: views.py:459
+msgid "The filter has been saved"
 msgstr ""
 
-#: views.py:68
-msgid ""
-"You are not allowed to create a lesson documentation for a lesson in the "
-"future."
+#: views.py:474
+msgid "The filter has been deleted."
 msgstr ""
 
-#: views.py:306
-msgid "The absence has been saved."
+#: views.py:497
+msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:344
-msgid "The filter has been saved"
+#: views.py:508
+msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:360
-msgid "The filter has been deleted."
+#: views.py:518
+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 1b9dbace2c6602f12f716c93ba7b9853400790d4..c6b337e73f6b33c3b537b7070f556dba6916bf52 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-04-01 13:20+0200\n"
+"POT-Creation-Date: 2020-07-26 16:10+0200\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,46 +17,55 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: forms.py:41
+#: forms.py:25
+msgid "Homework for the next lesson"
+msgstr ""
+
+#: forms.py:50 templates/alsijil/print/full_register.html:181
 msgid "Group"
 msgstr ""
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
 msgstr ""
 
-#: forms.py:57
-msgid "Room"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
 msgstr ""
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
 msgstr ""
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
 msgstr ""
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
 msgstr ""
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
 msgstr ""
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
 msgstr ""
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
 msgstr ""
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
 msgstr ""
 
@@ -76,306 +85,491 @@ msgstr ""
 msgid "Register absence"
 msgstr ""
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
 msgstr ""
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+msgid "Excuse types"
+msgstr ""
+
+#: models.py:18
+msgid "Short name"
+msgstr ""
+
+#: models.py:20
+msgid "Name"
+msgstr ""
+
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+msgid "Excuse type"
+msgstr ""
+
+#: models.py:70
+msgid "Personal note"
+msgstr ""
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr ""
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
 msgstr ""
 
-#: models.py:68
+#: models.py:96
+msgid "Group note"
+msgstr ""
+
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr ""
+
+#: models.py:100
+msgid "Lesson documentations"
+msgstr ""
+
+#: models.py:114
 msgid "Identifier"
 msgstr ""
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
 msgstr ""
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr ""
 
-#: tables.py:14
+#: models.py:128
+msgid "Personal note filter"
+msgstr ""
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr ""
 
-#: templates/alsijil/lesson.html:5
+#: tables.py:37
+msgid "Delete"
+msgstr ""
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, python-format
+msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/lesson.html:43
-msgid "Change history"
+#: templates/alsijil/class_register/lesson.html:38
+msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
+#: templates/alsijil/class_register/lesson.html:46
+msgid "Next lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:98
+msgid "Absent persons:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:130
+msgid "Change history"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
+#: templates/alsijil/class_register/lesson.html:173
+msgid "Tardiness (in m)"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-msgid "Delete filter"
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:124
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:12
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:7
+msgid "All personal note filters"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:12
 msgid "Add filter"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
-msgid "Owners"
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+msgid "Update personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+msgid "Create personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:6
+msgid "Class register:"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
+msgid "Owners"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:61
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:103
 msgid "Persons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:66
+#: templates/alsijil/print/full_register.html:108
 msgid "No."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:67
+#: templates/alsijil/print/full_register.html:109
 msgid "Last name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:68
+#: templates/alsijil/print/full_register.html:110
 msgid "First name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:69
+#: templates/alsijil/print/full_register.html:111
 msgid "Sex"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:70
+#: templates/alsijil/print/full_register.html:112
 msgid "Date of birth"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:95
+#: templates/alsijil/print/full_register.html:146
 msgid "Teachers and lessons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+msgid "Teachers and lessons in child groups"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:240
-msgid "Yes"
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
-msgid "e"
+#: templates/alsijil/print/full_register.html:322
+msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
+msgid "e"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
+#: templates/alsijil/print/full_register.html:349
+msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
+#: views.py:66
+msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
+#: views.py:80
+msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: templates/alsijil/week_view.html:6
-msgid "Week view"
+#: views.py:106
+msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:21
-msgid "Select"
+#: views.py:121
+msgid "The personal notes have been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:47
-msgid "Period"
+#: views.py:303
+msgid "There is no current school term."
 msgstr ""
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
-msgstr ""
-
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
-msgstr ""
-
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
-msgstr ""
-
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
-msgstr ""
-
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
+#: views.py:419
+msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:56
-msgid ""
-"You either selected an invalid lesson or there is currently no lesson in "
-"progress."
+#: views.py:459
+msgid "The filter has been saved"
 msgstr ""
 
-#: views.py:68
-msgid ""
-"You are not allowed to create a lesson documentation for a lesson in the "
-"future."
+#: views.py:474
+msgid "The filter has been deleted."
 msgstr ""
 
-#: views.py:306
-msgid "The absence has been saved."
+#: views.py:497
+msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:344
-msgid "The filter has been saved"
+#: views.py:508
+msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:360
-msgid "The filter has been deleted."
+#: views.py:518
+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 1b9dbace2c6602f12f716c93ba7b9853400790d4..c6b337e73f6b33c3b537b7070f556dba6916bf52 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-04-01 13:20+0200\n"
+"POT-Creation-Date: 2020-07-26 16:10+0200\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,46 +17,55 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: forms.py:41
+#: forms.py:25
+msgid "Homework for the next lesson"
+msgstr ""
+
+#: forms.py:50 templates/alsijil/print/full_register.html:181
 msgid "Group"
 msgstr ""
 
-#: forms.py:49 templates/alsijil/print/full_register.html:101
+#: forms.py:56 templates/alsijil/print/full_register.html:152
+#: templates/alsijil/print/full_register.html:183
 msgid "Teacher"
 msgstr ""
 
-#: forms.py:57
-msgid "Room"
+#: forms.py:73
+msgid "You can't select a group and a teacher both."
 msgstr ""
 
-#: forms.py:70
+#: forms.py:101
 msgid "Start date"
 msgstr ""
 
-#: forms.py:73
+#: forms.py:102
 msgid "End date"
 msgstr ""
 
-#: forms.py:75
+#: forms.py:103
 msgid "From period"
 msgstr ""
 
-#: forms.py:77 templates/alsijil/lesson.html:58
+#: forms.py:105 templates/alsijil/class_register/lesson.html:150
 msgid "Person"
 msgstr ""
 
-#: forms.py:79 templates/alsijil/lesson.html:59
-#: templates/alsijil/print/full_register.html:223
-#: templates/alsijil/week_view.html:96
+#: forms.py:107 templates/alsijil/class_register/lesson.html:151
+#: templates/alsijil/class_register/week_view.html:93
+#: templates/alsijil/print/full_register.html:75
+#: templates/alsijil/print/full_register.html:305
 msgid "Absent"
 msgstr ""
 
-#: forms.py:80 templates/alsijil/lesson.html:61
+#: forms.py:108 templates/alsijil/class_register/lesson.html:153
+#: templates/alsijil/print/full_register.html:84
+#: templates/alsijil/print/full_register.html:280
 msgid "Excused"
 msgstr ""
 
-#: forms.py:81 templates/alsijil/lesson.html:62
-#: templates/alsijil/print/full_register.html:225
+#: forms.py:109 templates/alsijil/class_register/lesson.html:155
+#: templates/alsijil/class_register/lesson.html:195
+#: templates/alsijil/print/full_register.html:307
 msgid "Remarks"
 msgstr ""
 
@@ -76,306 +85,491 @@ msgstr ""
 msgid "Register absence"
 msgstr ""
 
-#: menus.py:34
+#: menus.py:34 models.py:129 templates/alsijil/personal_note_filter/list.html:8
 msgid "Personal note filters"
 msgstr ""
 
-#: models.py:51 templates/alsijil/print/full_register.html:271
+#: menus.py:40 models.py:32 templates/alsijil/excuse_type/list.html:8
+#: templates/alsijil/excuse_type/list.html:9
+msgid "Excuse types"
+msgstr ""
+
+#: models.py:18
+msgid "Short name"
+msgstr ""
+
+#: models.py:20
+msgid "Name"
+msgstr ""
+
+#: models.py:31 models.py:59 templates/alsijil/class_register/lesson.html:154
+#: templates/alsijil/class_register/lesson.html:187
+msgid "Excuse type"
+msgstr ""
+
+#: models.py:70
+msgid "Personal note"
+msgstr ""
+
+#: models.py:71 templates/alsijil/class_register/lesson.html:143
+#: templates/alsijil/class_register/week_view.html:88
+msgid "Personal notes"
+msgstr ""
+
+#: models.py:94 templates/alsijil/print/full_register.html:357
 msgid "Lesson topic"
 msgstr ""
 
-#: models.py:52 templates/alsijil/print/full_register.html:272
+#: models.py:95 templates/alsijil/print/full_register.html:358
 msgid "Homework"
 msgstr ""
 
-#: models.py:68
+#: models.py:96
+msgid "Group note"
+msgstr ""
+
+#: models.py:99 templates/alsijil/class_register/lesson.html:119
+msgid "Lesson documentation"
+msgstr ""
+
+#: models.py:100
+msgid "Lesson documentations"
+msgstr ""
+
+#: models.py:114
 msgid "Identifier"
 msgstr ""
 
-#: models.py:71 templates/alsijil/print/full_register.html:178
+#: models.py:120 templates/alsijil/print/full_register.html:253
 msgid "Description"
 msgstr ""
 
-#: models.py:74
+#: models.py:124
 msgid "Match expression"
 msgstr ""
 
-#: tables.py:14
+#: models.py:128
+msgid "Personal note filter"
+msgstr ""
+
+#: tables.py:17 tables.py:31
 msgid "Edit"
 msgstr ""
 
-#: templates/alsijil/lesson.html:5
+#: tables.py:37
+msgid "Delete"
+msgstr ""
+
+#: templates/alsijil/absences/register.html:5
+#: templates/alsijil/absences/register.html:6
+msgid "Manage absence"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:6
 msgid "Lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:34
-msgid "Lesson documentation"
+#: templates/alsijil/class_register/lesson.html:14
+#: templates/alsijil/class_register/lesson.html:71
+#, python-format
+msgid "%(period)s. period"
 msgstr ""
 
-#: templates/alsijil/lesson.html:43
-msgid "Change history"
+#: templates/alsijil/class_register/lesson.html:38
+msgid "Previous lesson"
 msgstr ""
 
-#: templates/alsijil/lesson.html:52 templates/alsijil/week_view.html:91
-msgid "Personal notes"
+#: templates/alsijil/class_register/lesson.html:46
+msgid "Next lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:70
+msgid "Overview: Previous lesson"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:77
+msgid "Lesson topic of previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:84
+msgid "Homework for this lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:91
+msgid "Group notes for previous lesson:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:98
+msgid "Absent persons:"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:105
+msgid "Late persons:"
 msgstr ""
 
-#: templates/alsijil/lesson.html:60
-#: templates/alsijil/print/full_register.html:202
+#: templates/alsijil/class_register/lesson.html:130
+msgid "Change history"
+msgstr ""
+
+#: templates/alsijil/class_register/lesson.html:152
+#: templates/alsijil/print/full_register.html:292
 msgid "Tardiness"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:5
-#: templates/alsijil/manage_personal_note_filter.html:6
-msgid "Manage personal note filter"
+#: templates/alsijil/class_register/lesson.html:173
+msgid "Tardiness (in m)"
 msgstr ""
 
-#: templates/alsijil/manage_personal_note_filter.html:11
-msgid "Delete filter"
+#: templates/alsijil/class_register/week_view.html:6
+msgid "Week view"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:27
+msgid "Select"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:33
+#, python-format
+msgid "CW %(week)s: %(instance)s"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:50
+msgid "Period"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:51
+#: templates/alsijil/print/full_register.html:151
+#: templates/alsijil/print/full_register.html:182
+msgid "Subject"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:52
+msgid "Teachers"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:94
+msgid "unexcused"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:97
+msgid "Summed up tardiness"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:121
+msgid "No lessons available"
+msgstr ""
+
+#: templates/alsijil/class_register/week_view.html:124
+msgid ""
+"\n"
+"            There are no lessons for the selected group or teacher in this week.\n"
+"          "
+msgstr ""
+
+#: templates/alsijil/excuse_type/create.html:6
+#: templates/alsijil/excuse_type/create.html:7
+#: templates/alsijil/excuse_type/list.html:16
+msgid "Create excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/edit.html:6
+#: templates/alsijil/excuse_type/edit.html:7
+msgid "Edit excuse type"
+msgstr ""
+
+#: templates/alsijil/excuse_type/warning.html:5
+msgid ""
+"\n"
+"      This function should only be used to define alternatives to the default excuse which also will be counted extra.\n"
+"      Don't use this to create a default excuse or if you don't divide between different types of excuse.\n"
+"    "
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:114
+msgid "(e)"
+msgstr ""
+
+#: templates/alsijil/partials/absences.html:4
+#: templates/alsijil/print/full_register.html:118
+msgid "(u)"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:6
+msgid "Data complete"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:7
-#: templates/alsijil/personal_note_filters.html:8
-msgid "List of all personal note filters"
+#: templates/alsijil/partials/lesson_status_icon.html:12
+msgid "Missing data"
 msgstr ""
 
-#: templates/alsijil/personal_note_filters.html:12
+#: templates/alsijil/partials/lesson_status_icon.html:14
+msgid "Pending"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:18
+#: templates/alsijil/print/full_register.html:392
+msgid "Lesson cancelled"
+msgstr ""
+
+#: templates/alsijil/partials/lesson_status_icon.html:20
+msgid "Substitution"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:7
+msgid "All personal note filters"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/list.html:12
 msgid "Add filter"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:22
-#: templates/alsijil/print/full_register.html:54
-msgid "Owners"
+#: templates/alsijil/personal_note_filter/manage.html:7
+#: templates/alsijil/personal_note_filter/manage.html:14
+msgid "Update personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:9
+#: templates/alsijil/personal_note_filter/manage.html:16
+msgid "Create personal note filter"
+msgstr ""
+
+#: templates/alsijil/personal_note_filter/manage.html:29
+msgid "Delete filter"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:6
+msgid "Class register:"
 msgstr ""
 
 #: templates/alsijil/print/full_register.html:26
+#: templates/alsijil/print/full_register.html:59
+msgid "Owners"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:30
 msgid "Printed on"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:34
+#: templates/alsijil/print/full_register.html:38
 msgid ""
 "\n"
-"            This printout is intended for archival purposes. The main copy "
-"of\n"
-"            the class register is stored in the AlekSIS School Information\n"
-"            System.\n"
-"          "
+"        This printout is intended for archival purposes. The main copy of\n"
+"        the class register is stored in the AlekSIS School Information\n"
+"        System.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:41
+#: templates/alsijil/print/full_register.html:45
 msgid ""
 "\n"
-"            Copies of the class register, both digital and as printout, "
-"must\n"
-"            only be kept inside the school and/or on devices authorised by "
-"the\n"
-"            school.\n"
-"          "
+"        Copies of the class register, both digital and as printout, must\n"
+"        only be kept inside the school and/or on devices authorised by the\n"
+"        school.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:48
+#: templates/alsijil/print/full_register.html:52
 msgid ""
 "\n"
-"            The owner of the group and the headteacher confirm the above, "
-"as\n"
-"            well as the correctness of this printout.\n"
-"          "
+"        The owner of the group and the headteacher confirm the above, as\n"
+"        well as the correctness of this printout.\n"
+"      "
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:55
+#: templates/alsijil/print/full_register.html:62
 msgid "Headteacher"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:61
+#: templates/alsijil/print/full_register.html:69
+msgid "Abbreviations"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:71
+msgid "General"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:78
+msgid "Late"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:81
+#: templates/alsijil/print/full_register.html:288
+msgid "Unexcused"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:89
+msgid "Custom excuse types"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:103
 msgid "Persons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:66
+#: templates/alsijil/print/full_register.html:108
 msgid "No."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:67
+#: templates/alsijil/print/full_register.html:109
 msgid "Last name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:68
+#: templates/alsijil/print/full_register.html:110
 msgid "First name"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:69
+#: templates/alsijil/print/full_register.html:111
 msgid "Sex"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:70
+#: templates/alsijil/print/full_register.html:112
 msgid "Date of birth"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:71
-#: templates/alsijil/print/full_register.html:200
-msgid "Absences"
+#: templates/alsijil/print/full_register.html:113
+msgid "(a)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:72
-#: templates/alsijil/print/full_register.html:201
-msgid "Unexcused"
+#: templates/alsijil/print/full_register.html:119
+msgid "(b)"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:73
-#: templates/alsijil/print/full_register.html:224
-msgid "Tard."
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:95
+#: templates/alsijil/print/full_register.html:146
 msgid "Teachers and lessons in group"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:100
-#: templates/alsijil/week_view.html:48
-msgid "Subject"
-msgstr ""
-
-#: templates/alsijil/print/full_register.html:102
+#: templates/alsijil/print/full_register.html:153
+#: templates/alsijil/print/full_register.html:184
 msgid "Lesson start"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:103
+#: templates/alsijil/print/full_register.html:154
+#: templates/alsijil/print/full_register.html:185
 msgid "Lesson end"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:104
+#: templates/alsijil/print/full_register.html:155
+#: templates/alsijil/print/full_register.html:186
 msgid "Per week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:124
+#: templates/alsijil/print/full_register.html:176
+msgid "Teachers and lessons in child groups"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:209
 msgid "Personal overview"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:126
+#: templates/alsijil/print/full_register.html:211
 msgid "Contact details"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:174
+#: templates/alsijil/print/full_register.html:249
 msgid "Statistics on remarks"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:179
+#: templates/alsijil/print/full_register.html:254
 msgid "Count"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:196
+#: templates/alsijil/print/full_register.html:271
 msgid "Absences and tardiness"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:215
+#: templates/alsijil/print/full_register.html:274
+msgid "Absences"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:279
+msgid "thereof"
+msgstr ""
+
+#: templates/alsijil/print/full_register.html:297
 msgid "Relevant personal notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:219
+#: templates/alsijil/print/full_register.html:301
 msgid "Date"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:220
-#: templates/alsijil/print/full_register.html:268
+#: templates/alsijil/print/full_register.html:302
+#: templates/alsijil/print/full_register.html:355
 msgid "Pe."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:221
-#: templates/alsijil/print/full_register.html:269
+#: templates/alsijil/print/full_register.html:303
+#: templates/alsijil/print/full_register.html:356
 msgid "Subj."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:222
-#: templates/alsijil/print/full_register.html:274
+#: templates/alsijil/print/full_register.html:304
+#: templates/alsijil/print/full_register.html:360
 msgid "Te."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:240
-msgid "Yes"
+#: templates/alsijil/print/full_register.html:306
+msgid "Tard."
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:242
-#: templates/alsijil/print/full_register.html:314
-#: templates/alsijil/print/full_register.html:324
-msgid "e"
+#: templates/alsijil/print/full_register.html:322
+msgid "Yes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:262
-msgid "Lesson documentation for calendar week"
+#: templates/alsijil/print/full_register.html:327
+#: templates/alsijil/print/full_register.html:409
+#: templates/alsijil/print/full_register.html:424
+msgid "e"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:270
-msgid "Subs."
+#: templates/alsijil/print/full_register.html:349
+msgid "Lesson documentation for week"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:273
+#: templates/alsijil/print/full_register.html:359
 msgid "Notes"
 msgstr ""
 
-#: templates/alsijil/print/full_register.html:301
-msgid "Lesson cancelled"
+#: views.py:66
+msgid "You either selected an invalid lesson or there is currently no lesson in progress."
 msgstr ""
 
-#: templates/alsijil/register_absence.html:5
-#: templates/alsijil/register_absence.html:6
-msgid "Manage absence"
+#: views.py:80
+msgid "You are not allowed to create a lesson documentation for a lesson in the future."
 msgstr ""
 
-#: templates/alsijil/week_view.html:6
-msgid "Week view"
+#: views.py:106
+msgid "The lesson documentation has been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:21
-msgid "Select"
+#: views.py:121
+msgid "The personal notes have been saved."
 msgstr ""
 
-#: templates/alsijil/week_view.html:47
-msgid "Period"
+#: views.py:303
+msgid "There is no current school term."
 msgstr ""
 
-#: templates/alsijil/week_view.html:49
-msgid "Teachers"
-msgstr ""
-
-#: templates/alsijil/week_view.html:97
-msgid "unexcused"
-msgstr ""
-
-#: templates/alsijil/week_view.html:100
-msgid "Summed up tardiness"
-msgstr ""
-
-#: templates/alsijil/week_view.html:122
-msgid "No group selected"
-msgstr ""
-
-#: templates/alsijil/week_view.html:125
-msgid ""
-"\n"
-"            There are no lessons for the selected group, teacher, room or "
-"time.\n"
-"          "
+#: views.py:419
+msgid "The absence has been saved."
 msgstr ""
 
-#: views.py:56
-msgid ""
-"You either selected an invalid lesson or there is currently no lesson in "
-"progress."
+#: views.py:459
+msgid "The filter has been saved"
 msgstr ""
 
-#: views.py:68
-msgid ""
-"You are not allowed to create a lesson documentation for a lesson in the "
-"future."
+#: views.py:474
+msgid "The filter has been deleted."
 msgstr ""
 
-#: views.py:306
-msgid "The absence has been saved."
+#: views.py:497
+msgid "The excuse type has been created."
 msgstr ""
 
-#: views.py:344
-msgid "The filter has been saved"
+#: views.py:508
+msgid "The excuse type has been saved."
 msgstr ""
 
-#: views.py:360
-msgid "The filter has been deleted."
+#: views.py:518
+msgid "The excuse type has been deleted."
 msgstr ""
diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py
index c5fea59e3790fba0407d55d760434ac2e3dd0d3d..a3ec5e9cc443a951ca5ddf4803361bd29e0637f9 100644
--- a/aleksis/apps/alsijil/menus.py
+++ b/aleksis/apps/alsijil/menus.py
@@ -31,14 +31,14 @@ MENUS = {
                     "validators": ["menu_generator.validators.is_superuser"],
                 },
                 {
-                    "name": _("Personal note filters"),
-                    "url": "list_personal_note_filters",
-                    "icon": "filter_list",
+                    "name": _("Excuse types"),
+                    "url": "excuse_types",
+                    "icon": "label",
                     "validators": ["menu_generator.validators.is_superuser"],
                 },
                 {
-                    "name": _("Excuse types"),
-                    "url": "excuse_types",
+                    "name": _("Extra marks"),
+                    "url": "extra_marks",
                     "icon": "label",
                     "validators": ["menu_generator.validators.is_superuser"],
                 },
diff --git a/aleksis/apps/alsijil/migrations/0003_extra_mark.py b/aleksis/apps/alsijil/migrations/0003_extra_mark.py
new file mode 100644
index 0000000000000000000000000000000000000000..307d9168a296661c8b520b55a1b5cd400b5e6df3
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0003_extra_mark.py
@@ -0,0 +1,72 @@
+# Generated by Django 3.0.8 on 2020-07-12 12:43
+
+import django.contrib.postgres.fields.jsonb
+import django.contrib.sites.managers
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("sites", "0002_alter_domain_unique"),
+        ("alsijil", "0002_excuse_type"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="ExtraMark",
+            fields=[
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "extended_data",
+                    django.contrib.postgres.fields.jsonb.JSONField(
+                        default=dict, editable=False
+                    ),
+                ),
+                (
+                    "short_name",
+                    models.CharField(
+                        max_length=255, unique=True, verbose_name="Short name"
+                    ),
+                ),
+                (
+                    "name",
+                    models.CharField(max_length=255, unique=True, verbose_name="Name"),
+                ),
+                (
+                    "site",
+                    models.ForeignKey(
+                        default=1,
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="sites.Site",
+                    ),
+                ),
+            ],
+            options={
+                "verbose_name": "Extra mark",
+                "verbose_name_plural": "Extra marks",
+                "ordering": ["short_name"],
+            },
+            managers=[("objects", django.contrib.sites.managers.CurrentSiteManager()),],
+        ),
+        migrations.AddField(
+            model_name="personalnote",
+            name="extra_marks",
+            field=models.ManyToManyField(
+                blank=True,
+                null=True,
+                to="alsijil.ExtraMark",
+                verbose_name="Extra marks",
+            ),
+        ),
+    ]
diff --git a/aleksis/apps/alsijil/migrations/0004_group_notes.py b/aleksis/apps/alsijil/migrations/0004_group_notes.py
new file mode 100644
index 0000000000000000000000000000000000000000..dfe800654e5ce97879d6587c2d908cc14be13c6a
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0004_group_notes.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.8 on 2020-07-10 16:16
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('alsijil', '0003_extra_mark'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='lessondocumentation',
+            name='group_note',
+            field=models.CharField(blank=True, max_length=200, verbose_name='Group note'),
+        ),
+    ]
diff --git a/aleksis/apps/alsijil/migrations/0005_groups_of_person.py b/aleksis/apps/alsijil/migrations/0005_groups_of_person.py
new file mode 100644
index 0000000000000000000000000000000000000000..5f6a5ef1d74f2af102be9db597d55ae734d5d73d
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0005_groups_of_person.py
@@ -0,0 +1,33 @@
+# Generated by Django 3.0.8 on 2020-07-22 17:29
+
+from django.db import migrations, models
+
+
+def add_groups(apps, schema_editor):
+    PersonalNote = apps.get_model("alsijil", "PersonalNote")
+
+    db_alias = schema_editor.connection.alias
+
+    for personal_note in PersonalNote.objects.using(db_alias).all():
+        groups = list(personal_note.person.member_of.using(db_alias).all())
+        personal_note.groups_of_person.set(groups)
+        personal_note.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("core", "0003_drop_image_cropping"),
+        ("alsijil", "0004_group_notes"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="personalnote",
+            name="groups_of_person",
+            field=models.ManyToManyField(
+                related_name="_personalnote_groups_of_person_+", to="core.Group"
+            ),
+        ),
+        migrations.RunPython(add_groups),
+    ]
diff --git a/aleksis/apps/alsijil/migrations/0006_delete_personal_notes_filter.py b/aleksis/apps/alsijil/migrations/0006_delete_personal_notes_filter.py
new file mode 100644
index 0000000000000000000000000000000000000000..723dda8ec898e69d60e9b065d9bb157395ad5dff
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0006_delete_personal_notes_filter.py
@@ -0,0 +1,14 @@
+# Generated by Django 3.0.8 on 2020-07-18 15:23
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("alsijil", "0005_groups_of_person"),
+    ]
+
+    operations = [
+        migrations.DeleteModel(name="PersonalNoteFilter",),
+    ]
diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index a09aa38c9be47c6a73e5d1e86caf6f375c9045e1..ecba9f773f54ba1343fbf86ab2cd2fc7003a760b 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -1,5 +1,5 @@
 from datetime import date
-from typing import Optional, Union
+from typing import Dict, Optional, Union
 
 from django.db.models import Exists, OuterRef, QuerySet
 
@@ -8,7 +8,7 @@ from calendarweek import CalendarWeek
 from aleksis.apps.chronos.models import LessonPeriod
 from aleksis.core.models import Group, Person
 
-from .models import ExcuseType, LessonDocumentation, PersonalNote
+from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
 
 
 @Person.method
@@ -151,3 +151,20 @@ def get_tardinesses(self, week: Optional[CalendarWeek] = None) -> QuerySet:
     if not week:
         week = self.week
     return self.personal_notes.filter(week=week.week, late__gt=0)
+
+
+@LessonPeriod.method
+def get_extra_marks(
+    self, week: Optional[CalendarWeek] = None
+) -> Dict[ExtraMark, QuerySet]:
+    """Get all statistics on extra marks for this lesson."""
+    if not week:
+        week = self.week
+
+    stats = {}
+    for extra_mark in ExtraMark.objects.all():
+        qs = self.personal_notes.filter(week=week.week, extra_marks=extra_mark)
+        if qs:
+            stats[extra_mark] = qs
+
+    return stats
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index d10243b0deabba12b49d4b3d28211be925f80f79..04f868be69b32d3a35b80373fa900cae64b4b3a7 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -42,6 +42,7 @@ class PersonalNote(ExtensibleModel):
     person = models.ForeignKey(
         "core.Person", models.CASCADE, related_name="personal_notes"
     )
+    groups_of_person = models.ManyToManyField("core.Group", related_name="+")
 
     week = models.IntegerField()
     lesson_period = models.ForeignKey(
@@ -61,6 +62,10 @@ class PersonalNote(ExtensibleModel):
 
     remarks = models.CharField(max_length=200, blank=True)
 
+    extra_marks = models.ManyToManyField(
+        "ExtraMark", null=True, blank=True, verbose_name=_("Extra marks")
+    )
+
     def save(self, *args, **kwargs):
         if self.excuse_type:
             self.excused = True
@@ -93,6 +98,7 @@ class LessonDocumentation(ExtensibleModel):
 
     topic = models.CharField(verbose_name=_("Lesson topic"), max_length=200, blank=True)
     homework = models.CharField(verbose_name=_("Homework"), max_length=200, blank=True)
+    group_note = models.CharField(verbose_name=_("Group note"), max_length=200, blank=True)
 
     class Meta:
         verbose_name = _("Lesson documentation")
@@ -106,24 +112,25 @@ class LessonDocumentation(ExtensibleModel):
         ]
 
 
-class PersonalNoteFilter(ExtensibleModel):
-    """A filter definition that can generate statistics on personal note texts."""
+class ExtraMark(ExtensibleModel):
+    """A model for extra marks.
 
-    identifier = models.CharField(
-        verbose_name=_("Identifier"),
-        max_length=30,
-        validators=[isidentifier],
-        unique=True,
-    )
-    description = models.CharField(
-        verbose_name=_("Description"), max_length=60, blank=True, unique=True
-    )
+    Can be used for lesson-based counting of things (like forgotten homework).
+    """
 
-    regex = models.CharField(
-        verbose_name=_("Match expression"), max_length=100, unique=True
+    short_name = models.CharField(
+        max_length=255, unique=True, verbose_name=_("Short name")
     )
+    name = models.CharField(max_length=255, unique=True, verbose_name=_("Name"))
+
+    def __str__(self):
+        return f"{self.name}"
+
+    @property
+    def count_label(self):
+        return f"{self.short_name}_count"
 
     class Meta:
-        verbose_name = _("Personal note filter")
-        verbose_name_plural = _("Personal note filters")
-        ordering = ["identifier"]
+        ordering = ["short_name"]
+        verbose_name = _("Extra mark")
+        verbose_name_plural = _("Extra marks")
diff --git a/aleksis/apps/alsijil/static/css/alsijil/lesson.css b/aleksis/apps/alsijil/static/css/alsijil/lesson.css
index 83b7db8e90d35891d0106f73ebf6176b36d32262..6d57c7e9910063dc8dfe359c643e65765cb6ad9c 100644
--- a/aleksis/apps/alsijil/static/css/alsijil/lesson.css
+++ b/aleksis/apps/alsijil/static/css/alsijil/lesson.css
@@ -1,3 +1,11 @@
+.alsijil-check-box {
+    margin-right: 10px;
+}
+
+.alsijil-check-box [type="checkbox"] {
+    padding-left: 30px;
+}
+
 .alsijil-lesson-cancelled {
     text-decoration: line-through;
 }
diff --git a/aleksis/apps/alsijil/tables.py b/aleksis/apps/alsijil/tables.py
index 3a6762c3744ead9d02e9917aa975b530b5e448f0..bd6b47a73f34c5e4343138993ee70162cd19b847 100644
--- a/aleksis/apps/alsijil/tables.py
+++ b/aleksis/apps/alsijil/tables.py
@@ -4,18 +4,23 @@ import django_tables2 as tables
 from django_tables2.utils import A
 
 
-class PersonalNoteFilterTable(tables.Table):
+class ExtraMarkTable(tables.Table):
     class Meta:
         attrs = {"class": "highlight"}
 
-    identifier = tables.Column()
-    description = tables.Column()
-    regex = tables.Column()
-    edit_filter = tables.LinkColumn(
-        "edit_personal_note_filter",
+    name = tables.LinkColumn("edit_extra_mark", args=[A("id")])
+    short_name = tables.Column()
+    edit = tables.LinkColumn(
+        "edit_extra_mark",
         args=[A("id")],
         text=_("Edit"),
-        attrs={"a": {"class": "btn-flat waves-effect waves-orange"}},
+        attrs={"a": {"class": "btn-flat waves-effect waves-orange orange-text"}},
+    )
+    delete = tables.LinkColumn(
+        "delete_extra_mark",
+        args=[A("id")],
+        text=_("Delete"),
+        attrs={"a": {"class": "btn-flat waves-effect waves-red red-text"}},
     )
 
 
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
index 9b2338a81005dd0f56668fe81fb819cf9e43ec56..6c3fe8815a34397c7158d6a7bc340693ef4a9883 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
@@ -1,6 +1,6 @@
 {# -*- engine:django -*- #}
 {% extends "core/base.html" %}
-{% load week_helpers %}
+{% load week_helpers material_form_internal %}
 {% load material_form i18n static %}
 
 {% block browser_title %}{% blocktrans %}Lesson{% endblocktrans %}{% endblock %}
@@ -50,17 +50,29 @@
   </div>
 
   <form method="post">
+    <p>{% include "core/partials/save_button.html" %}</p>
+    {% csrf_token %}
+
     <div class="row">
       <div class="col s12">
-        {% include "core/partials/save_button.html" %}
+        <ul class="tabs">
+          <li class="tab">
+            <a href="#lesson-documentation">{% trans "Lesson documentation" %}</a>
+          </li>
+          {% if not lesson_period.get_substitution.cancelled %}
+            <li class="tab">
+              <a href="#personal-notes">{% trans "Personal notes" %}</a>
+            </li>
+          {% endif %}
+          <li class="tab">
+            <a href="#version-history">{% trans "Change history" %}</a>
+          </li>
+        </ul>
       </div>
-    </div>
-    {% csrf_token %}
 
-    <div class="row">
-      <div class="col s12 m12 l6 xl8">
+      <div class="col s12" id="lesson-documentation">
         {% with prev_lesson=lesson_period.prev prev_doc=prev_lesson.get_lesson_documentation %}
-          {% with prev_doc=prev_lesson.get_lesson_documentation absences=prev_lesson.get_absences tardinesses=prev_lesson.get_tardinesses %}
+          {% with prev_doc=prev_lesson.get_lesson_documentation absences=prev_lesson.get_absences tardinesses=prev_lesson.get_tardinesses extra_marks=prev_lesson.get_extra_marks %}
             {% if prev_doc %}
               {% weekday_to_date prev_lesson.week prev_lesson.period.weekday as prev_date %}
 
@@ -86,6 +98,13 @@
                       </tr>
                     {% endif %}
 
+                    {% if prev_doc.group_note %}
+                      <tr>
+                        <th class="collection-item">{% trans "Group notes for previous lesson:" %}</th>
+                        <td>{{ prev_doc.group_note }}</td>
+                      </tr>
+                    {% endif %}
+
                     {% if absences %}
                       <tr>
                         <th>{% trans "Absent persons:" %}</th>
@@ -99,6 +118,18 @@
                         <td>{% include "alsijil/partials/tardinesses.html" with notes=tardinesses %}</td>
                       </tr>
                     {% endif %}
+
+                    {% for extra_mark, notes in extra_marks.items %}
+                      <tr>
+                        <th>{{ extra_mark.name }}</th>
+                        <td>
+                          {% for note in notes %}
+                            <span>{{ note.person }}{% if not forloop.last %},{% endif %}</span>
+                          {% endfor %}
+                        </td>
+                      </tr>
+                    {% endfor %}
+
                   </table>
                 </div>
               </div>
@@ -116,21 +147,9 @@
           </div>
         </div>
       </div>
-      <div class="col s12 m12 l6 xl4">
-        <div class="card">
-          <div class="card-content">
-          <span class="card-title">
-            {% blocktrans %}Change history{% endblocktrans %}
-          </span>
-            {% include 'core/partials/crud_events.html' with obj=lesson_documentation %}
-          </div>
-        </div>
-      </div>
-    </div>
 
-    {% if not lesson_period.get_substitution.cancelled %}
-      <div class="row">
-        <div class="col s12">
+      {% if not lesson_period.get_substitution.cancelled %}
+        <div class="col s12" id="personal-notes">
           <div class="card">
             <div class="card-content">
       <span class="card-title">
@@ -146,6 +165,8 @@
                   <th>{% blocktrans %}Tardiness{% endblocktrans %}</th>
                   <th>{% blocktrans %}Excused{% endblocktrans %}</th>
                   <th>{% blocktrans %}Excuse type{% endblocktrans %}</th>
+                  <th>{% blocktrans %}Extra marks{% endblocktrans %}</th>
+
                   <th>{% blocktrans %}Remarks{% endblocktrans %}</th>
                 </tr>
                 </thead>
@@ -182,6 +203,27 @@
                         </label>
                       </div>
                     </td>
+                    <td>
+                      {% for group, items in form.extra_marks|select_options %}
+                        {% for choice, value, selected in items %}
+                          <label class="{% if selected %} active{% endif %} alsijil-check-box">
+                            <input type="checkbox"
+                                   {% if value == None or value == '' %}disabled{% else %}value="{{ value }}"{% endif %}
+                                    {% if selected %} checked="checked"{% endif %}
+                                   name="{{ form.extra_marks.html_name }}">
+                            <span>{{ choice }}</span>
+                          </label>
+                        {% endfor %}
+                      {% endfor %}
+                    </td>
+                    <td>
+                      <div class="input-field">
+                        {{ form.remarks }}
+                        <label for="{{ form.absent.id_for_label }}">
+                          {% trans "Remarks" %}
+                        </label>
+                      </div>
+                    </td>
                     <td>
                       <div class="input-field">
                         {{ form.remarks }}
@@ -197,13 +239,21 @@
             </div>
           </div>
         </div>
-      </div>
-    {% endif %}
 
-    <div class="row">
-      <div class="col s12">
-        {% include "core/partials/save_button.html" %}
+      {% endif %}
+
+      <div class="col s12" id="version-history">
+        <div class="card">
+          <div class="card-content">
+          <span class="card-title">
+            {% blocktrans %}Change history{% endblocktrans %}
+          </span>
+            {% include 'core/partials/crud_events.html' with obj=lesson_documentation %}
+          </div>
+        </div>
       </div>
     </div>
+
+    <p>{% include "core/partials/save_button.html" %}</p>
   </form>
 {% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
index f1b94d845db471586524254cc582df7d3cebd2f0..e23e103fca8d7496e7faec521a05645b3b098764 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html
@@ -1,7 +1,7 @@
 {# -*- engine:django -*- #}
 
 {% extends "core/base.html" %}
-{% load material_form i18n week_helpers static %}
+{% load material_form i18n week_helpers static data_helpers %}
 
 {% block browser_title %}{% blocktrans %}Week view{% endblocktrans %}{% endblock %}
 
@@ -48,8 +48,12 @@
                 <tr>
                   <th></th>
                   <th>{% blocktrans %}Period{% endblocktrans %}</th>
+                  {% if not group %}
+                    <th>{% blocktrans %}Groups{% endblocktrans %}</th>
+                  {% endif %}
                   <th>{% blocktrans %}Subject{% endblocktrans %}</th>
                   <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
+                  <th>{% blocktrans %}Lesson topic{% endblocktrans %}</th>
                 </tr>
                 </thead>
                 <tbody>
@@ -63,6 +67,13 @@
                         {{ period.period.period }}.
                       </a>
                     </td>
+                    {% if not group %}
+                      <td>
+                        <a class="tr-link" href="{% url 'lesson_by_week_and_period' week.year week.week period.id %}">
+                          {{ period.lesson.group_names }}
+                        </a>
+                      </td>
+                    {% endif %}
                     <td>
                       <a class="tr-link" href="{% url 'lesson_by_week_and_period' week.year week.week period.id %}">
                         {{ period.get_subject.name }}
@@ -73,6 +84,11 @@
                         {{ period.get_teacher_names }}
                       </a>
                     </td>
+                    <td>
+                      <a class="tr-link" href="{% url 'lesson_by_week_and_period' week.year week.week period.id %}">
+                        {{ period.get_lesson_documentation.topic }}
+                      </a>
+                    </td>
                   </tr>
                 {% endfor %}
                 </tbody>
@@ -96,6 +112,11 @@
               <p class="card-text">
                 {% trans "Summed up tardiness" %}: {{ person.person.tardiness_sum }}'
               </p>
+              {% for extra_mark in extra_marks %}
+                <p class="card-text">
+                  {{ extra_mark.name }}: {{ person.person|get_dict:extra_mark.count_label }}
+                </p>
+              {% endfor %}
               {% for note in person.personal_notes %}
                 {% if note.remarks %}
                   <blockquote>
diff --git a/aleksis/apps/alsijil/templates/alsijil/extra_mark/create.html b/aleksis/apps/alsijil/templates/alsijil/extra_mark/create.html
new file mode 100644
index 0000000000000000000000000000000000000000..d0ee3a9055561df1f468692f79d794404a60c1d1
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/extra_mark/create.html
@@ -0,0 +1,17 @@
+	{# -*- engine:django -*- #}
+
+	{% extends "core/base.html" %}
+	{% load material_form i18n %}
+
+	{% block browser_title %}{% blocktrans %}Create extra mark{% endblocktrans %}{% endblock %}
+	{% block page_title %}{% blocktrans %}Create extra mark{% endblocktrans %}{% endblock %}
+
+	{% block content %}
+
+	  <form method="post">
+	    {% csrf_token %}
+	    {% form form=form %}{% endform %}
+	    {% include "core/partials/save_button.html" %}
+	  </form>
+
+	{% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/extra_mark/edit.html b/aleksis/apps/alsijil/templates/alsijil/extra_mark/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..7adee30a1cfd30256d70b2a823827384de331e05
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/extra_mark/edit.html
@@ -0,0 +1,17 @@
+{# -*- engine:django -*- #}
+
+{% extends "core/base.html" %}
+{% load material_form i18n %}
+
+{% block browser_title %}{% blocktrans %}Edit extra mark{% endblocktrans %}{% endblock %}
+{% block page_title %}{% blocktrans %}Edit extra mark{% endblocktrans %}{% endblock %}
+
+{% block content %}
+
+  <form method="post">
+    {% csrf_token %}
+    {% form form=form %}{% endform %}
+    {% include "core/partials/save_button.html" %}
+  </form>
+
+{% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/extra_mark/list.html b/aleksis/apps/alsijil/templates/alsijil/extra_mark/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..a1a12b38096de60bae34d61425a1da9c688ab9d6
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/extra_mark/list.html
@@ -0,0 +1,18 @@
+{# -*- engine:django -*- #}
+
+{% extends "core/base.html" %}
+
+{% load i18n %}
+{% load render_table from django_tables2 %}
+
+{% block browser_title %}{% blocktrans %}Extra marks{% endblocktrans %}{% endblock %}
+{% block page_title %}{% blocktrans %}Extra marks{% endblocktrans %}{% endblock %}
+
+{% block content %}
+  <a class="btn green waves-effect waves-light" href="{% url 'create_extra_mark' %}">
+    <i class="material-icons left">add</i>
+    {% trans "Create extra mark" %}
+  </a>
+
+  {% render_table table %}
+{% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html b/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html
deleted file mode 100644
index 3673e60abb2395a368d6721320dbf654d139d953..0000000000000000000000000000000000000000
--- a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{# -*- engine:django -*- #}
-
-{% extends "core/base.html" %}
-{% load i18n %}
-{% load render_table from django_tables2 %}
-
-{% block browser_title %}{% blocktrans %}All personal note filters{% endblocktrans %}{% endblock %}
-{% block page_title %}{% blocktrans %}Personal note filters{% endblocktrans %}{% endblock %}
-
-{% block content %}
-  <a href="{% url 'create_personal_note_filter' %}" class="waves-effect waves-light green btn">
-    <i class="material-icons left">add</i>{% blocktrans %}Add filter{% endblocktrans %}
-  </a>
-
-  {% render_table personal_note_filters_table %}
-{% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html b/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html
deleted file mode 100644
index 427777439d73975a0cf3434bd507d27077cb9a2a..0000000000000000000000000000000000000000
--- a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html
+++ /dev/null
@@ -1,34 +0,0 @@
-{# -*- engine:django -*- #}
-{% extends "core/base.html" %}
-{% load material_form i18n static %}
-
-{% block browser_title %}
-  {% if personal_note_filter %}
-    {% trans "Update personal note filter" %}
-  {% else %}
-    {% trans "Create personal note filter" %}
-  {% endif %}
-{% endblock %}
-{% block page_title %}
-  {% if personal_note_filter %}
-    {% trans "Update personal note filter" %}
-  {% else %}
-    {% trans "Create personal note filter" %}
-  {% endif %}
-{% endblock %}
-
-
-{% block content %}
-  <form method="post">
-    {% csrf_token %}
-    {% form form=personal_note_filter_form %}{% endform %}
-    {% include "core/partials/save_button.html" %}
-    {% if personal_note_filter %}
-      <a href="{% url 'delete_personal_note_filter' personal_note_filter.id %}"
-         class="waves-effect waves-light btn red">
-        <i class="material-icons left">delete</i>{% blocktrans %}Delete filter{% endblocktrans %}
-      </a>
-    {% endif %}
-  </form>
-
-{% endblock %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
index 8cd9938b62e4bd39c0feead34b46fe4360987ec0..373ae6a88f6f42953dfa0b4ffeceb8a26716104b 100644
--- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
+++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
@@ -97,6 +97,18 @@
     </ul>
   {% endif %}
 
+  {% if extra_marks %}
+    <h5>{% trans "Available extra marks" %}</h5>
+
+    <ul class="collection">
+      {% for extra_mark in extra_marks %}
+        <li class="collection-item">
+          <strong>{{ extra_mark.short_name }}</strong> {{ extra_mark.name }}
+        </li>
+      {% endfor %}
+    </ul>
+  {% endif %}
+
   <div class="page-break">&nbsp;</div>
 
 
@@ -117,6 +129,9 @@
       {% endfor %}
       <th>{% trans '(u)' %}</th>
       <th>{% trans '(b)' %}</th>
+      {% for extra_mark in extra_marks %}
+        <th>{{ extra_mark.short_name }}</th>
+      {% endfor %}
     </tr>
     </thead>
 
@@ -135,6 +150,9 @@
         {% endfor %}
         <td>{{ person.unexcused }}</td>
         <td>{{ person.tardiness }}'</td>
+        {% for extra_mark in extra_marks %}
+          <td>{{ person|get_dict:extra_mark.count_label }}</td>
+        {% endfor %}
       </tr>
     {% endfor %}
     </tbody>
@@ -245,29 +263,6 @@
       </tr>
     </table>
 
-    {% if personal_note_filters %}
-      <h5>{% trans 'Statistics on remarks' %}</h5>
-      <table>
-        <thead>
-        <tr>
-          <th>{% trans 'Description' %}</th>
-          <th>{% trans 'Count' %}</th>
-        </tr>
-        </thead>
-
-        <tbody>
-        {% for note_filter in personal_note_filters %}
-          <tr>
-            <td>{{ note_filter.description }}</td>
-            {% with "_personal_notes_with_"|add:note_filter.identifier as identifier %}
-              <td>{{ person|get_dict:identifier }}</td>
-            {% endwith %}
-          </tr>
-        {% endfor %}
-        </tbody>
-      </table>
-    {% endif %}
-
     <h5>{% trans 'Absences and tardiness' %}</h5>
     <table>
       <tr>
@@ -294,6 +289,18 @@
       </tr>
     </table>
 
+    {% if extra_marks %}
+      <h5>{% trans 'Extra marks' %}</h5>
+      <table>
+        {% for extra_mark in extra_marks %}
+          <tr>
+            <th>{{ extra_mark.name }}</th>
+            <td>{{ person|get_dict:extra_mark.count_label }}</td>
+          </tr>
+        {% endfor %}
+      </table>
+    {% endif %}
+
     <h5>{% trans 'Relevant personal notes' %}</h5>
     <table class="small-print">
       <thead>
@@ -304,38 +311,45 @@
         <th>{% trans 'Te.' %}</th>
         <th>{% trans 'Absent' %}</th>
         <th>{% trans 'Tard.' %}</th>
-        <th>{% trans 'Remarks' %}</th>
+        <th colspan="2">{% trans 'Remarks' %}</th>
       </tr>
       </thead>
 
       <tbody>
       {% for note in person.personal_notes.all %}
-        {% if note.absent or note.late or note.remarks %}
-          {% period_to_date note.week note.lesson_period.period 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' %})
+        {% if note.lesson_period in lesson_periods %}
+          {% if note.absent or note.late or note.remarks or note.extra_marks.all %}
+            {% period_to_date note.week note.lesson_period.period 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 %}
                 {% endif %}
-              {% endif %}
-            </td>
-            <td>
-              {% if note.late %}
-                {{ note.late }}'
-              {% endif %}
-            </td>
-            <td>{{ note.remarks }}</td>
-          </tr>
+              </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 %}
       {% endfor %}
       </tbody>
@@ -396,36 +410,45 @@
               </td>
               <td class="lesson-homework">{{ documentations.0.homework }}</td>
               <td class="lesson-notes">
+                {{ documentations.0.group_note }}
                 {% for note in notes %}
-                  {% if note.absent %}
-                    <span class="lesson-note-absent">
-                      {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
-                      {% if note.excused %}
-                        <span class="lesson-note-excused">
-                          {% if note.excuse_type %}
-                            ({{ note.excuse_type.short_name }})
-                          {% else %}
-                            ({% trans 'e' %})
-                          {% endif %}
-                        </span>
-                      {% endif %}
+                  {% if group in note.groups_of_person.all %}
+                    {% if note.absent %}
+                      <span class="lesson-note-absent">
+                        {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
+                        {% if note.excused %}
+                          <span class="lesson-note-excused">
+                            {% if note.excuse_type %}
+                              ({{ note.excuse_type.short_name }})
+                            {% else %}
+                              ({% trans 'e' %})
+                            {% endif %}
+                          </span>
+                        {% endif %}
                       </span>
-                  {% endif %}
-                  {% if note.late %}
-                    <span class="lesson-note-late">
-                      {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
-                      ({{ note.late }}′)
-                      {% if note.excused %}
-                        <span class="lesson-note-excused">
-                          {% if note.excuse_type %}
-                            ({{ note.excuse_type.short_name }})
-                          {% else %}
-                            ({% trans 'e' %})
-                          {% endif %}
-                        </span>
-                      {% endif %}
+                    {% endif %}
+                    {% if note.late %}
+                      <span class="lesson-note-late">
+                        {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
+                        ({{ note.late }}′)
+                        {% if note.excused %}
+                          <span class="lesson-note-excused">
+                            {% if note.excuse_type %}
+                              ({{ note.excuse_type.short_name }})
+                            {% else %}
+                              ({% trans 'e' %})
+                            {% endif %}
+                          </span>
+                        {% endif %}
                       </span>
+                    {% endif %}
                   {% endif %}
+                  {% for extra_mark in note.extra_marks.all %}
+                    <span>
+                      {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
+                      ({{ extra_mark.short_name }})
+                    </span>
+                  {% endfor %}
                 {% endfor %}
               </td>
               <td class="lesson-te">
diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py
index 89ab0ffe5f47c8cfebb015a6f76e597af4dd11dd..3f68362598ec4c8e624f0d5df42e3d028de7ceb9 100644
--- a/aleksis/apps/alsijil/urls.py
+++ b/aleksis/apps/alsijil/urls.py
@@ -21,25 +21,21 @@ urlpatterns = [
         "print/group/<int:id_>", views.full_register_group, name="full_register_group"
     ),
     path("absence/new", views.register_absence, name="register_absence"),
+    path("extra_marks/", views.ExtraMarkListView.as_view(), name="extra_marks"),
     path(
-        "filters/list",
-        views.list_personal_note_filters,
-        name="list_personal_note_filters",
+        "extra_marks/create/",
+        views.ExtraMarkCreateView.as_view(),
+        name="create_extra_mark",
     ),
     path(
-        "filters/create",
-        views.edit_personal_note_filter,
-        name="create_personal_note_filter",
+        "extra_marks/<int:pk>/edit/",
+        views.ExtraMarkEditView.as_view(),
+        name="edit_extra_mark",
     ),
     path(
-        "filters/edit/<int:id_>",
-        views.edit_personal_note_filter,
-        name="edit_personal_note_filter",
-    ),
-    path(
-        "filters/delete/<int:id_>",
-        views.delete_personal_note_filter,
-        name="delete_personal_note_filter",
+        "extra_marks/<int:pk>/delete/",
+        views.ExtraMarkDeleteView.as_view(),
+        name="delete_extra_mark",
     ),
     path("excuse_types/", views.ExcuseTypeListView.as_view(), name="excuse_types"),
     path(
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 1ca4b4cabeec1ea0cd5edbfb1588f9255ee2f55a..8bcd3da417c3c3935f83d86b5bc718e4134728c6 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -16,20 +16,21 @@ from rules.contrib.views import PermissionRequiredMixin
 from aleksis.apps.chronos.managers import TimetableType
 from aleksis.apps.chronos.models import LessonPeriod, LessonSubstitution
 from aleksis.apps.chronos.util.chronos_helpers import get_el_by_pk
+from aleksis.apps.chronos.util.date import week_weekday_to_date
 from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
 from aleksis.core.models import Group, Person, SchoolTerm
 from aleksis.core.util import messages
 
 from .forms import (
     ExcuseTypeForm,
+    ExtraMarkForm,
     LessonDocumentationForm,
-    PersonalNoteFilterForm,
     PersonalNoteFormSet,
     RegisterAbsenceForm,
     SelectForm,
 )
-from .models import ExcuseType, LessonDocumentation, PersonalNoteFilter
-from .tables import ExcuseTypeTable, PersonalNoteFilterTable
+from .models import ExcuseType, ExtraMark, LessonDocumentation
+from .tables import ExcuseTypeTable, ExtraMarkTable
 
 
 def lesson(
@@ -46,6 +47,14 @@ def lesson(
         lesson_period = LessonPeriod.objects.annotate_week(wanted_week).get(
             pk=period_id
         )
+
+        date_of_lesson = week_weekday_to_date(wanted_week, lesson_period.period.weekday)
+
+        if (
+            date_of_lesson < lesson_period.lesson.validity.date_start
+            or date_of_lesson > lesson_period.lesson.validity.date_end
+        ):
+            return HttpResponseNotFound()
     else:
         # Determine current lesson by current date and time
         lesson_period = (
@@ -248,6 +257,21 @@ def week_view(
             )
         )
 
+        for extra_mark in ExtraMark.objects.all():
+            persons_qs = persons_qs.annotate(
+                **{
+                    extra_mark.count_label: Count(
+                        "personal_notes",
+                        filter=Q(
+                            personal_notes__lesson_period__in=lesson_periods_pk,
+                            personal_notes__week=wanted_week.week,
+                            personal_notes__extra_marks=extra_mark,
+                        ),
+                        distinct=True,
+                    )
+                }
+            )
+
         persons = []
         for person in persons_qs:
             persons.append(
@@ -266,6 +290,7 @@ def week_view(
         lesson_periods, key=lambda x: (x.period.weekday, x.period.period)
     )
 
+    context["extra_marks"] = ExtraMark.objects.all()
     context["week"] = wanted_week
     context["lesson_periods"] = lesson_periods
     context["persons"] = persons
@@ -292,18 +317,19 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
 
     group = get_object_or_404(Group, pk=id_)
 
+    current_school_term = SchoolTerm.current
+
+    if not current_school_term:
+        return HttpResponseNotFound(_("There is no current school term."))
+
     # Get all lesson periods for the selected group
     lesson_periods = (
         LessonPeriod.objects.filter_group(group)
+        .filter(lesson__validity__school_term=current_school_term)
         .distinct()
         .prefetch_related("documentations", "personal_notes")
     )
 
-    current_school_term = SchoolTerm.current
-
-    if not current_school_term:
-        return HttpResponseNotFound(_("There is no current school term."))
-
     weeks = CalendarWeek.weeks_within(
         current_school_term.date_start, current_school_term.date_end,
     )
@@ -336,10 +362,16 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
                     (lesson_period, documentations, notes, substitution)
                 )
 
-    persons = group.members.annotate(
+    persons = Person.objects.filter(
+        personal_notes__groups_of_person=group,
+        personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
+    ).annotate(
         absences_count=Count(
             "personal_notes__absent",
-            filter=Q(personal_notes__absent=True)
+            filter=Q(
+                personal_notes__absent=True,
+                personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
+            )
             & ~Q(
                 personal_notes__lesson_period__substitutions=Subquery(
                     LessonSubstitution.objects.filter(
@@ -356,38 +388,42 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
                 personal_notes__absent=True,
                 personal_notes__excused=True,
                 personal_notes__excuse_type__isnull=True,
+                personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
             ),
         ),
         unexcused=Count(
             "personal_notes__absent",
-            filter=Q(personal_notes__absent=True, personal_notes__excused=False),
+            filter=Q(
+                personal_notes__absent=True,
+                personal_notes__excused=False,
+                personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
+            ),
         ),
         tardiness=Sum("personal_notes__late"),
     )
 
-    for excuse_type in ExcuseType.objects.all():
+    for extra_mark in ExtraMark.objects.all():
         persons = persons.annotate(
             **{
-                excuse_type.count_label: Count(
-                    "personal_notes__absent",
+                extra_mark.count_label: Count(
+                    "personal_notes",
                     filter=Q(
-                        personal_notes__absent=True,
-                        personal_notes__excuse_type=excuse_type,
+                        personal_notes__extra_marks=extra_mark,
+                        personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
                     ),
                 )
             }
         )
 
-    # FIXME Move to manager
-    personal_note_filters = PersonalNoteFilter.objects.all()
-    for personal_note_filter in personal_note_filters:
+    for excuse_type in ExcuseType.objects.all():
         persons = persons.annotate(
             **{
-                "_personal_notes_with_%s"
-                % personal_note_filter.identifier: Count(
-                    "personal_notes__remarks",
+                excuse_type.count_label: Count(
+                    "personal_notes__absent",
                     filter=Q(
-                        personal_notes__remarks__iregex=personal_note_filter.regex
+                        personal_notes__absent=True,
+                        personal_notes__excuse_type=excuse_type,
+                        personal_notes__lesson_period__lesson__validity__school_term=current_school_term,
                     ),
                 )
             }
@@ -395,11 +431,12 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
 
     context["school_term"] = current_school_term
     context["persons"] = persons
-    context["personal_note_filters"] = personal_note_filters
     context["excuse_types"] = ExcuseType.objects.all()
+    context["extra_marks"] = ExtraMark.objects.all()
     context["group"] = group
     context["weeks"] = weeks
     context["periods_by_day"] = periods_by_day
+    context["lesson_periods"] = lesson_periods
     context["today"] = date.today()
 
     return render(request, "alsijil/print/full_register.html", context)
@@ -436,57 +473,45 @@ def register_absence(request: HttpRequest) -> HttpResponse:
     return render(request, "alsijil/absences/register.html", context)
 
 
-def list_personal_note_filters(request: HttpRequest) -> HttpResponse:
-    context = {}
+class ExtraMarkListView(SingleTableView, PermissionRequiredMixin):
+    """Table of all extra marks."""
 
-    personal_note_filters = PersonalNoteFilter.objects.all()
+    model = ExtraMark
+    table_class = ExtraMarkTable
+    permission_required = "core.view_extramark"
+    template_name = "alsijil/extra_mark/list.html"
 
-    # Prepare table
-    personal_note_filters_table = PersonalNoteFilterTable(personal_note_filters)
-    RequestConfig(request).configure(personal_note_filters_table)
 
-    context["personal_note_filters_table"] = personal_note_filters_table
+class ExtraMarkCreateView(AdvancedCreateView, PermissionRequiredMixin):
+    """Create view for extra marks."""
 
-    return render(request, "alsijil/personal_note_filter/list.html", context)
+    model = ExtraMark
+    form_class = ExtraMarkForm
+    permission_required = "core.create_extramark"
+    template_name = "alsijil/extra_mark/create.html"
+    success_url = reverse_lazy("extra_marks")
+    success_message = _("The extra mark has been created.")
 
 
-def edit_personal_note_filter(
-    request: HttpRequest, id_: Optional["int"] = None
-) -> HttpResponse:
-    context = {}
+class ExtraMarkEditView(AdvancedEditView, PermissionRequiredMixin):
+    """Edit view for extra marks."""
 
-    if id_:
-        personal_note_filter = PersonalNoteFilter.objects.get(id=id_)
-        context["personal_note_filter"] = personal_note_filter
-        personal_note_filter_form = PersonalNoteFilterForm(
-            request.POST or None, instance=personal_note_filter
-        )
-    else:
-        personal_note_filter_form = PersonalNoteFilterForm(request.POST or None)
-
-    if request.method == "POST":
-        if personal_note_filter_form.is_valid():
-            personal_note_filter_form.save(commit=True)
-
-            messages.success(request, _("The filter has been saved"))
-            return redirect("list_personal_note_filters")
-
-    context["personal_note_filter_form"] = personal_note_filter_form
+    model = ExtraMark
+    form_class = ExtraMarkForm
+    permission_required = "core.edit_extramark"
+    template_name = "alsijil/extra_mark/edit.html"
+    success_url = reverse_lazy("extra_marks")
+    success_message = _("The extra mark has been saved.")
 
-    return render(request, "alsijil/personal_note_filter/manage.html", context)
 
+class ExtraMarkDeleteView(AdvancedDeleteView, PermissionRequiredMixin, RevisionMixin):
+    """Delete view for extra marks"""
 
-def delete_personal_note_filter(request: HttpRequest, id_: int) -> HttpResponse:
-    context = {}
-
-    personal_note_filter = get_object_or_404(PersonalNoteFilter, pk=id_)
-
-    PersonalNoteFilter.objects.filter(pk=id_).delete()
-
-    messages.success(request, _("The filter has been deleted."))
-
-    context["personal_note_filter"] = personal_note_filter
-    return redirect("list_personal_note_filters")
+    model = ExtraMark
+    permission_required = "core.delete_extramark"
+    template_name = "core/pages/delete.html"
+    success_url = reverse_lazy("extra_marks")
+    success_message = _("The extra mark has been deleted.")
 
 
 class ExcuseTypeListView(SingleTableView, PermissionRequiredMixin):