diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html
new file mode 100644
index 0000000000000000000000000000000000000000..f9f533c84e1682e5bc710025a4d22e12674e79bf
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html
@@ -0,0 +1,160 @@
+<h4>{% trans 'Personal overview' %}: {{ person.last_name }}, {{ person.first_name }}</h4>
+
+<h5>{% blocktrans %}Contact details{% endblocktrans %}</h5>
+<table class="person-info">
+  <tr>
+    <td rowspan="6" class="person-img">
+      {% if person.photo %}
+        <img src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}"/>
+      {% else %}
+        <img src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}"/>
+      {% endif %}
+    </td>
+    <td><i class="material-icons iconify" data-icon="mdi:account-outline"></i></td>
+    <td colspan="2">{{ person.first_name }} {{ person.additional_name }} {{ person.last_name }}</td>
+  </tr>
+  <tr>
+    <td><i class="material-icons iconify" data-icon="mdi:human-non-binary"></i></td>
+    <td colspan="2">{{ person.get_sex_display }}</td>
+  </tr>
+  <tr>
+    <td><i class="material-icons iconify" data-icon="mdi:map-marker-outline"></i></td>
+    <td>{{ person.street }} {{ person.housenumber }}</td>
+    <td>{{ person.postal_code }} {{ person.place }}</td>
+  </tr>
+  <tr>
+    <td><i class="material-icons iconify" data-icon="mdi:phone-outline"></i></td>
+    <td>{{ person.phone_number }}</td>
+    <td>{{ person.mobile_number }}</td>
+  </tr>
+  <tr>
+    <td><i class="material-icons iconify" data-icon="mdi:email-outline"></i></td>
+    <td colspan="2">{{ person.email }}</td>
+  </tr>
+  <tr>
+    <td><i class="material-icons iconify" data-icon="mdi:cake"></i></td>
+    <td colspan="2">{{ person.date_of_birth|date }}</td>
+  </tr>
+</table>
+
+<div class="row">
+  <div class="col s6">
+    <h5>{% trans 'Absences and tardiness' %}</h5>
+    <table>
+      <tr>
+        <th colspan="3">{% trans 'Absences' %}</th>
+        <td>{{ person.absences_count }}</td>
+      </tr>
+      <tr>
+        <td rowspan="{{ excuse_types.count|add:3 }}" style="width: 16mm;"
+            class="rotate small-print">{% trans "thereof" %}</td>
+        <th colspan="2">{% trans 'Excused' %}</th>
+        <td>{{ person.excused }}</td>
+      </tr>
+      <tr>
+        <td rowspan="{{ excuse_types.count|add:1 }}" style="width: 16mm;"
+            class="rotate small-print">{% trans "thereof" %}</td>
+        <th>{% trans "Without excuse type" %}</th>
+        <td>{{ person.excused_without_excuse_type }}</td>
+      </tr>
+      {% for excuse_type in excuse_types %}
+        <tr>
+          <th>{{ excuse_type.name }}</th>
+          <td>{{ person|get_dict:excuse_type.count_label }}</td>
+        </tr>
+      {% endfor %}
+      <tr>
+        <th colspan="2">{% trans 'Unexcused' %}</th>
+        <td>{{ person.unexcused }}</td>
+      </tr>
+      {% for excuse_type in excuse_types_not_absent %}
+        <tr>
+          <th colspan="3">{{ excuse_type.name }}</th>
+          <td>{{ person|get_dict:excuse_type.count_label }}</td>
+        </tr>
+      {% endfor %}
+      <tr>
+        <th colspan="3">{% trans 'Tardiness' %}</th>
+        <td>{{ person.tardiness }}'/{{ person.tardiness_count }}&times;</td>
+      </tr>
+    </table>
+  </div>
+
+  <div class="col s6">
+    {% 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 %}
+  </div>
+</div>
+
+<h5>{% trans 'Relevant personal notes' %}</h5>
+<table class="small-print">
+  <thead>
+  <tr>
+    <th>{% trans 'Date' %}</th>
+    <th>{% trans 'Pe.' %}</th>
+    <th>{% trans 'Subj.' %}</th>
+    <th>{% trans 'Te.' %}</th>
+    <th>{% trans 'Absent' %}</th>
+    <th>{% trans 'Tard.' %}</th>
+    <th colspan="2">{% trans 'Remarks' %}</th>
+  </tr>
+  </thead>
+
+  <tbody>
+  {% for note in person.filtered_notes %}
+    {% if note.absent or note.tardiness or note.remarks or note.extra_marks.all %}
+      <tr>
+        {% if note.date %}
+          <td>{{ note.date }}</td>
+          <td>{{ note.register_object.period.period }}</td>
+        {% else %}
+          <td colspan="2">
+            {{ note.register_object.date_start }} {{ note.register_object.period_from.period }}.–{{ note.register_object.date_end }}
+            {{ note.register_object.period_to.period }}.
+          </td>
+        {% endif %}
+        <td>
+          {% if note.register_object.label_ != "event" %}
+            {{ note.register_object.get_subject.short_name }}
+          {% else %}
+            {% trans "Event" %}
+          {% endif %}
+        </td>
+        <td>{{ note.register_object.teacher_short_names }}</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 %}
+        </td>
+        <td>
+          {% if note.tardiness %}
+            {{ note.tardiness }}'
+          {% endif %}
+        </td>
+        <td>
+          {% for extra_mark in note.extra_marks.all %}
+            {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %}
+          {% endfor %}
+        </td>
+        <td>{{ note.remarks }}</td>
+      </tr>
+    {% endif %}
+  {% endfor %}
+  </tbody>
+</table>
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html
new file mode 100644
index 0000000000000000000000000000000000000000..12ad365d00795a2f9b4703b574337bd9be867a32
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html
@@ -0,0 +1,54 @@
+<h4>{% trans "Abbreviations" %}</h4>
+
+<h5>{% trans "General" %}</h5>
+
+<ul class="collection">
+  <li class="collection-item">
+    <strong>(a)</strong> {% trans "Absent" %}
+  </li>
+  <li class="collection-item">
+    <strong>(b)</strong> {% trans "Late" %}
+  </li>
+  <li class="collection-item">
+    <strong>(u)</strong> {% trans "Unexcused" %}
+  </li>
+  <li class="collection-item">
+    <strong>(e)</strong> {% trans "Excused" %}
+  </li>
+</ul>
+
+{% if excuse_types %}
+  <h5>{% trans "Custom excuse types" %}</h5>
+
+  <ul class="collection">
+    {% for excuse_type in excuse_types %}
+      <li class="collection-item">
+        <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }}
+      </li>
+    {% endfor %}
+  </ul>
+{% endif %}
+
+{% if excuse_types_not_absent %}
+  <h5>{% trans "Custom excuse types (not counted as absent)" %}</h5>
+
+  <ul class="collection">
+    {% for excuse_type in excuse_types_not_absent %}
+      <li class="collection-item">
+        <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }}
+      </li>
+    {% endfor %}
+  </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 %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html
new file mode 100644
index 0000000000000000000000000000000000000000..122eedc7567e5ead796e33da356c0d3a4173da30
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html
@@ -0,0 +1,114 @@
+{% for week in weeks %}
+  <h4>{% trans 'Week' %} {{ week.week }}: {{ week.0 }}–{{ week.6 }}</h4>
+
+  <table class="small-print">
+    <thead>
+    <tr>
+      <th></th>
+      <th>{% trans 'Pe.' %}</th>
+      <th>{% trans 'Subj.' %}</th>
+      <th>{% trans 'Lesson topic' %}</th>
+      <th>{% trans 'Homework' %}</th>
+      <th>{% trans 'Notes' %}</th>
+      <th>{% trans 'Te.' %}</th>
+    </tr>
+    </thead>
+    <tbody>
+    {% for day in week %}
+      {% with register_objects_by_day|get_dict:day as register_objects %}
+        {% for register_object, documentation, notes, substitution in register_objects %}
+          <tr class="
+                  {% if substitution %}
+                    {% if substitution.cancelled %}
+                      lesson-cancelled
+                    {% else %}
+                      lesson-substituted
+                    {% endif %}
+                  {% endif %}
+                  {% if forloop.first %}
+                    lessons-day-first
+                  {% endif %}
+                ">
+            {% if forloop.first %}
+              <th rowspan="{{ register_objects|length }}" class="lessons-day-head">{{ day|date:"D" }}</th>
+            {% endif %}
+            <td class="lesson-pe">
+              {% if register_object.label_ != "event" %}
+                {{ register_object.period.period }}
+              {% else %}
+                {{ register_object.period_from_on_day }}.–{{ register_object.period_to_on_day }}.
+              {% endif %}
+            </td>
+            <td class="lesson-subj">
+              {% if register_object.label_ == "event" %}
+                <strong>{% trans "Event" %}</strong>
+                {% elif substitution %}
+                {% include "chronos/partials/subs/subject.html" with type="substitution" el=substitution %}
+              {% else %}
+                {% include "chronos/partials/subject.html" with subject=register_object.get_subject %}
+              {% endif %}
+            </td>
+            <td class="lesson-topic">
+              {% if register_object.label_ == "event" %}
+                {{ register_object.title }}: {{ documentation.topic }}
+              {% elif substitution.cancelled %}
+                {% trans 'Lesson cancelled' %}
+              {% else %}
+                {{ documentation.topic }}
+              {% endif %}
+            </td>
+            <td class="lesson-homework">{{ documentation.homework }}</td>
+            <td class="lesson-notes">
+              {{ documentation.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 %}
+                  </span>
+                {% endif %}
+                {% if note.tardiness %}
+                  <span class="lesson-note-late">
+                    {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
+                    ({{ note.tardiness }}′)
+                    {% 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 %}
+                {% 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">
+              {% if documentation.topic %}
+                {{ register_object.get_teachers.first.short_name }}
+              {% endif %}
+            </td>
+          </tr>
+        {% endfor %}
+      {% endwith %}
+    {% endfor %}
+    </tbody>
+  </table>
+
+  <div class="page-break">&nbsp;</div>
+{% endfor %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html
new file mode 100644
index 0000000000000000000000000000000000000000..193e19094711bdcaa96293267a3b08e9afd8a334
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html
@@ -0,0 +1,51 @@
+<div class="center-align">
+  <h1>{% trans 'Class register' %}</h1>
+  <h5>{{ school_term }}</h5>
+  <p>({{ school_term.date_start }}–{{ school_term.date_end }})</p>
+  {% static "img/aleksis-banner.svg" as aleksis_banner %}
+  <img src="{% firstof SITE_PREFERENCES.theme__logo.url aleksis_banner %}"
+       alt="{{ SITE_PREFERENCES.general__title }} – Logo" class="max-size-600 center">
+  <h4 id="group-desc">
+    {{ group.name }}
+  </h4>
+  <p id="group-owners" class="flow-text">
+    {% trans 'Owners' %}:
+    {{ group.owners.all|join:', ' }}
+  </p>
+  <p id="printed-info">
+    {% trans 'Printed on' %} {{ today }}
+  </p>
+</div>
+<div>
+  <hr/>
+</div>
+<div>
+  <p>
+    {% blocktrans %}
+      This printout is intended for archival purposes. The main copy of
+      the class register is stored in the AlekSIS School Information
+      System.
+    {% endblocktrans %}
+  </p>
+  <p>
+    {% blocktrans %}
+      Copies of the class register, both digital and as printout, must
+      only be kept inside the school and/or on devices authorised by the
+      school.
+    {% endblocktrans %}
+  </p>
+  <p>
+    {% blocktrans %}
+      The owner of the group and the headteacher confirm the above, as
+      well as the correctness of this printout.
+    {% endblocktrans %}
+  </p>
+  <div id="signatures">
+    <div class="signature">
+      {% trans 'Owners' %}
+    </div>
+    <div class="signature">
+      {% trans 'Headteacher' %}
+    </div>
+  </div>
+</div>
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html
new file mode 100644
index 0000000000000000000000000000000000000000..23a310b5b41ae4234170f6c8ec83b109bdb8ee56
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html
@@ -0,0 +1,53 @@
+<h4>{% trans 'Persons in group' %} {{ group.name }}</h4>
+
+<table id="persons">
+  <thead>
+  <tr>
+    <th>{% trans 'No.' %}</th>
+    <th>{% trans 'Last name' %}</th>
+    <th>{% trans 'First name' %}</th>
+    <th>{% trans 'Sex' %}</th>
+    <th>{% trans 'Date of birth' %}</th>
+    <th>{% trans '(a)' %}</th>
+    <th>{% trans "Sum (e)" %}</th>
+    <th>{% trans "(e)" %}</th>
+    {% for excuse_type in excuse_types %}
+      <th>({{ excuse_type.short_name }})</th>
+    {% endfor %}
+    <th>{% trans '(u)' %}</th>
+    {% for excuse_type in excuse_types_not_absent %}
+      <th>({{ excuse_type.short_name }})</th>
+    {% endfor %}
+    <th>{% trans '(b)' %}</th>
+    {% for extra_mark in extra_marks %}
+      <th>{{ extra_mark.short_name }}</th>
+    {% endfor %}
+  </tr>
+  </thead>
+
+  <tbody>
+  {% for person in persons %}
+    <tr>
+      <td>{{ forloop.counter }}</td>
+      <td>{{ person.last_name }}</td>
+      <td>{{ person.first_name }}</td>
+      <td>{{ person.get_sex_display }}</td>
+      <td>{{ person.date_of_birth }}</td>
+      <td>{{ person.absences_count }}</td>
+      <td>{{ person.excused }}</td>
+      <td>{{ person.excused_without_excuse_type }}</td>
+      {% for excuse_type in excuse_types %}
+        <td>{{ person|get_dict:excuse_type.count_label }}</td>
+      {% endfor %}
+      <td>{{ person.unexcused }}</td>
+      {% for excuse_type in excuse_types_not_absent %}
+        <td>{{ person|get_dict:excuse_type.count_label }}</td>
+      {% endfor %}
+      <td>{{ person.tardiness }}'/{{ person.tardiness_count }}&times;</td>
+      {% for extra_mark in extra_marks %}
+        <td>{{ person|get_dict:extra_mark.count_label }}</td>
+      {% endfor %}
+    </tr>
+  {% endfor %}
+  </tbody>
+</table>
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html
new file mode 100644
index 0000000000000000000000000000000000000000..d3de44993a5b9c3678e226f6d678a532fa8adb1c
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html
@@ -0,0 +1,31 @@
+<table id="lessons">
+  <thead>
+  <tr>
+    {% if len(groups) > 1 %}
+      <th>{% trans 'Group' %}</th>
+    {% endif %}
+    <th>{% trans 'Subject' %}</th>
+    <th>{% trans 'Teacher' %}</th>
+    <th>{% trans 'Lesson start' %}</th>
+    <th>{% trans 'Lesson end' %}</th>
+    <th>{% trans 'Per week' %}</th>
+  </tr>
+  </thead>
+
+  <tbody>
+  {% for group in groups %}
+    {% for lesson in group.lessons.all %}
+      <tr>
+        {% if len(groups) > 1 %}
+          <td>{{ group.name }}</td>
+        {% endif %}
+        <td>{{ lesson.subject.name }}</td>
+        <td>{{ lesson.teachers.all|join:', ' }}</td>
+        <td>{{ lesson.validity.date_start }}</td>
+        <td>{{ lesson.validity.date_end }}</td>
+        <td>{{ lesson.lesson_periods.count }}</td>
+      </tr>
+    {% endfor %}
+  {% endfor %}
+  </tbody>
+</table>
diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
index c699287a00987ad99c1fd0c2d4617827670fae2f..5d740a2a31551950b0dc57e29d0163b0c85d6f12 100644
--- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
+++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
@@ -11,516 +11,45 @@
 {% endblock %}
 
 {% block content %}
-
-  <div class="center-align">
-    <h1>{% trans 'Class register' %}</h1>
-    <h5>{{ school_term }}</h5>
-    <p>({{ school_term.date_start }}–{{ school_term.date_end }})</p>
-    {% static "img/aleksis-banner.svg" as aleksis_banner %}
-    <img src="{% firstof SITE_PREFERENCES.theme__logo.url aleksis_banner %}"
-         alt="{{ SITE_PREFERENCES.general__title }} – Logo" class="max-size-600 center">
-    <h4 id="group-desc">
-      {{ group.name }}
-    </h4>
-    <p id="group-owners" class="flow-text">
-      {% trans 'Owners' %}:
-      {{ group.owners.all|join:', ' }}
-    </p>
-    <p id="printed-info">
-      {% trans 'Printed on' %} {{ today }}
-    </p>
-  </div>
-  <div>
-    <hr/>
-  </div>
-  <div>
-    <p>
-      {% blocktrans %}
-        This printout is intended for archival purposes. The main copy of
-        the class register is stored in the AlekSIS School Information
-        System.
-      {% endblocktrans %}
-    </p>
-    <p>
-      {% blocktrans %}
-        Copies of the class register, both digital and as printout, must
-        only be kept inside the school and/or on devices authorised by the
-        school.
-      {% endblocktrans %}
-    </p>
-    <p>
-      {% blocktrans %}
-        The owner of the group and the headteacher confirm the above, as
-        well as the correctness of this printout.
-      {% endblocktrans %}
-    </p>
-    <div id="signatures">
-      <div class="signature">
-        {% trans 'Owners' %}
-      </div>
-      <div class="signature">
-        {% trans 'Headteacher' %}
-      </div>
-    </div>
-  </div>
-
-  <div class="page-break">&nbsp;</div>
-
-  <h4>{% trans "Abbreviations" %}</h4>
-
-  <h5>{% trans "General" %}</h5>
-
-  <ul class="collection">
-    <li class="collection-item">
-      <strong>(a)</strong> {% trans "Absent" %}
-    </li>
-    <li class="collection-item">
-      <strong>(b)</strong> {% trans "Late" %}
-    </li>
-    <li class="collection-item">
-      <strong>(u)</strong> {% trans "Unexcused" %}
-    </li>
-    <li class="collection-item">
-      <strong>(e)</strong> {% trans "Excused" %}
-    </li>
-  </ul>
-
-  {% if excuse_types %}
-    <h5>{% trans "Custom excuse types" %}</h5>
-
-    <ul class="collection">
-      {% for excuse_type in excuse_types %}
-        <li class="collection-item">
-          <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }}
-        </li>
-      {% endfor %}
-    </ul>
+  {% if include_cover %}
+    {% include "alsijil/partials/register_cover.html" %}
   {% endif %}
 
-  {% if excuse_types_not_absent %}
-    <h5>{% trans "Custom excuse types (not counted as absent)" %}</h5>
-
-    <ul class="collection">
-      {% for excuse_type in excuse_types_not_absent %}
-        <li class="collection-item">
-          <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }}
-        </li>
-      {% endfor %}
-    </ul>
+  <div class="page-break">&nbsp;</div>
+  
+  {% if include_abbreviations %}
+    {% include "alsijil/partials/register_abbreviations.html" %}
   {% endif %}
 
-  {% if extra_marks %}
-    <h5>{% trans "Available extra marks" %}</h5>
+  <div class="page-break">&nbsp;</div>
 
-    <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>
+  {% if include_members_table %}
+    {% include "alsijil/partials/register_members_table.html" %}
   {% endif %}
 
   <div class="page-break">&nbsp;</div>
 
+  {% if include_teachers_and_subjects_table %}
+    {% if group.lessons %}
+      <h4>{% trans 'Teachers and lessons in group' %} {{ group.name }}</h4>
+      {% include "alsijil/partials/register_teachers_and_subjects_table.html" with groups=[group] only %}
+      <div class="page-break">&nbsp;</div>
+    {% endif %}
+    {% if child_groups %}
+      <h4>{% trans 'Teachers and lessons in child groups' %}</h4>
+      {% include "alsijil/partials/register_teachers_and_subjects_table.html" with groups=child_groups only}
+      <div class="page-break">&nbsp;</div>
+    {% endif %}
+  {% endif %}
 
-  <h4>{% trans 'Persons in group' %} {{ group.name }}</h4>
-
-  <table id="persons">
-    <thead>
-    <tr>
-      <th>{% trans 'No.' %}</th>
-      <th>{% trans 'Last name' %}</th>
-      <th>{% trans 'First name' %}</th>
-      <th>{% trans 'Sex' %}</th>
-      <th>{% trans 'Date of birth' %}</th>
-      <th>{% trans '(a)' %}</th>
-      <th>{% trans "Sum (e)" %}</th>
-      <th>{% trans "(e)" %}</th>
-      {% for excuse_type in excuse_types %}
-        <th>({{ excuse_type.short_name }})</th>
-      {% endfor %}
-      <th>{% trans '(u)' %}</th>
-      {% for excuse_type in excuse_types_not_absent %}
-        <th>({{ excuse_type.short_name }})</th>
-      {% endfor %}
-      <th>{% trans '(b)' %}</th>
-      {% for extra_mark in extra_marks %}
-        <th>{{ extra_mark.short_name }}</th>
-      {% endfor %}
-    </tr>
-    </thead>
-
-    <tbody>
+  {% if include_person_overviews %}
     {% for person in persons %}
-      <tr>
-        <td>{{ forloop.counter }}</td>
-        <td>{{ person.last_name }}</td>
-        <td>{{ person.first_name }}</td>
-        <td>{{ person.get_sex_display }}</td>
-        <td>{{ person.date_of_birth }}</td>
-        <td>{{ person.absences_count }}</td>
-        <td>{{ person.excused }}</td>
-        <td>{{ person.excused_without_excuse_type }}</td>
-        {% for excuse_type in excuse_types %}
-          <td>{{ person|get_dict:excuse_type.count_label }}</td>
-        {% endfor %}
-        <td>{{ person.unexcused }}</td>
-        {% for excuse_type in excuse_types_not_absent %}
-          <td>{{ person|get_dict:excuse_type.count_label }}</td>
-        {% endfor %}
-        <td>{{ person.tardiness }}'/{{ person.tardiness_count }}&times;</td>
-        {% for extra_mark in extra_marks %}
-          <td>{{ person|get_dict:extra_mark.count_label }}</td>
-        {% endfor %}
-      </tr>
+      {% include "alsijil/partials/person_overview.html with person=person only %}  
+      <div class="page-break">&nbsp;</div>
     {% endfor %}
-    </tbody>
-  </table>
-
-  <div class="page-break">&nbsp;</div>
-
-  {% if lessons %}
-    <h4>{% trans 'Teachers and lessons in group' %} {{ group.name }}</h4>
-
-    <table id="lessons">
-      <thead>
-      <tr>
-        <th>{% trans 'Subject' %}</th>
-        <th>{% trans 'Teacher' %}</th>
-        <th>{% trans 'Lesson start' %}</th>
-        <th>{% trans 'Lesson end' %}</th>
-        <th>{% trans 'Per week' %}</th>
-      </tr>
-      </thead>
-
-      <tbody>
-      {% for lesson in lessons %}
-        <tr>
-          <td>{{ lesson.subject.name }}</td>
-          <td>{{ lesson.teachers.all|join:', ' }}</td>
-          <td>{{ lesson.validity.date_start }}</td>
-          <td>{{ lesson.validity.date_end }}</td>
-          <td>{{ lesson.lesson_periods.count }}</td>
-        </tr>
-      {% endfor %}
-      </tbody>
-    </table>
-    <div class="page-break">&nbsp;</div>
-
   {% endif %}
-
-  {% if child_groups %}
-    <h4>{% trans 'Teachers and lessons in child groups' %}</h4>
-
-    <table id="lessons">
-      <thead>
-      <tr>
-        <th>{% trans 'Group' %}</th>
-        <th>{% trans 'Subject' %}</th>
-        <th>{% trans 'Teacher' %}</th>
-        <th>{% trans 'Lesson start' %}</th>
-        <th>{% trans 'Lesson end' %}</th>
-        <th>{% trans 'Per week' %}</th>
-      </tr>
-      </thead>
-
-      <tbody>
-      {% for child_group in child_groups %}
-        {% for lesson in child_group.lessons.all %}
-          <tr>
-            <td>{{ child_group.name }}</td>
-            <td>{{ lesson.subject.name }}</td>
-            <td>{{ lesson.teachers.all|join:', ' }}</td>
-            <td>{{ lesson.validity.date_start }}</td>
-            <td>{{ lesson.validity.date_end }}</td>
-            <td>{{ lesson.lesson_periods.count }}</td>
-          </tr>
-        {% endfor %}
-      {% endfor %}
-      </tbody>
-    </table>
-    <div class="page-break">&nbsp;</div>
+      
+  {% if include_coursebook %}
+    {% include "alsijil/partials/register_coursebook.html" %}
   {% endif %}
-
-  {% for person in persons %}
-    <h4>{% trans 'Personal overview' %}: {{ person.last_name }}, {{ person.first_name }}</h4>
-
-    <h5>{% blocktrans %}Contact details{% endblocktrans %}</h5>
-    <table class="person-info">
-      <tr>
-        <td rowspan="6" class="person-img">
-          {% if person.photo %}
-            <img src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}"/>
-          {% else %}
-            <img src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}"/>
-          {% endif %}
-        </td>
-        <td><i class="material-icons iconify" data-icon="mdi:account-outline"></i></td>
-        <td colspan="2">{{ person.first_name }} {{ person.additional_name }} {{ person.last_name }}</td>
-      </tr>
-      <tr>
-        <td><i class="material-icons iconify" data-icon="mdi:human-non-binary"></i></td>
-        <td colspan="2">{{ person.get_sex_display }}</td>
-      </tr>
-      <tr>
-        <td><i class="material-icons iconify" data-icon="mdi:map-marker-outline"></i></td>
-        <td>{{ person.street }} {{ person.housenumber }}</td>
-        <td>{{ person.postal_code }} {{ person.place }}</td>
-      </tr>
-      <tr>
-        <td><i class="material-icons iconify" data-icon="mdi:phone-outline"></i></td>
-        <td>{{ person.phone_number }}</td>
-        <td>{{ person.mobile_number }}</td>
-      </tr>
-      <tr>
-        <td><i class="material-icons iconify" data-icon="mdi:email-outline"></i></td>
-        <td colspan="2">{{ person.email }}</td>
-      </tr>
-      <tr>
-        <td><i class="material-icons iconify" data-icon="mdi:cake"></i></td>
-        <td colspan="2">{{ person.date_of_birth|date }}</td>
-      </tr>
-    </table>
-
-    <div class="row">
-      <div class="col s6">
-        <h5>{% trans 'Absences and tardiness' %}</h5>
-        <table>
-          <tr>
-            <th colspan="3">{% trans 'Absences' %}</th>
-            <td>{{ person.absences_count }}</td>
-          </tr>
-          <tr>
-            <td rowspan="{{ excuse_types.count|add:3 }}" style="width: 16mm;"
-                class="rotate small-print">{% trans "thereof" %}</td>
-            <th colspan="2">{% trans 'Excused' %}</th>
-            <td>{{ person.excused }}</td>
-          </tr>
-          <tr>
-            <td rowspan="{{ excuse_types.count|add:1 }}" style="width: 16mm;"
-                class="rotate small-print">{% trans "thereof" %}</td>
-            <th>{% trans "Without excuse type" %}</th>
-            <td>{{ person.excused_without_excuse_type }}</td>
-          </tr>
-          {% for excuse_type in excuse_types %}
-            <tr>
-              <th>{{ excuse_type.name }}</th>
-              <td>{{ person|get_dict:excuse_type.count_label }}</td>
-            </tr>
-          {% endfor %}
-          <tr>
-            <th colspan="2">{% trans 'Unexcused' %}</th>
-            <td>{{ person.unexcused }}</td>
-          </tr>
-          {% for excuse_type in excuse_types_not_absent %}
-            <tr>
-              <th colspan="3">{{ excuse_type.name }}</th>
-              <td>{{ person|get_dict:excuse_type.count_label }}</td>
-            </tr>
-          {% endfor %}
-          <tr>
-            <th colspan="3">{% trans 'Tardiness' %}</th>
-            <td>{{ person.tardiness }}'/{{ person.tardiness_count }}&times;</td>
-          </tr>
-        </table>
-      </div>
-
-      <div class="col s6">
-        {% 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 %}
-      </div>
-    </div>
-
-    <h5>{% trans 'Relevant personal notes' %}</h5>
-    <table class="small-print">
-      <thead>
-      <tr>
-        <th>{% trans 'Date' %}</th>
-        <th>{% trans 'Pe.' %}</th>
-        <th>{% trans 'Subj.' %}</th>
-        <th>{% trans 'Te.' %}</th>
-        <th>{% trans 'Absent' %}</th>
-        <th>{% trans 'Tard.' %}</th>
-        <th colspan="2">{% trans 'Remarks' %}</th>
-      </tr>
-      </thead>
-
-      <tbody>
-      {% for note in person.filtered_notes %}
-        {% if note.absent or note.tardiness or note.remarks or note.extra_marks.all %}
-          <tr>
-            {% if note.date %}
-              <td>{{ note.date }}</td>
-              <td>{{ note.register_object.period.period }}</td>
-            {% else %}
-              <td colspan="2">
-                {{ note.register_object.date_start }} {{ note.register_object.period_from.period }}.–{{ note.register_object.date_end }}
-                {{ note.register_object.period_to.period }}.
-              </td>
-            {% endif %}
-            <td>
-              {% if note.register_object.label_ != "event" %}
-                {{ note.register_object.get_subject.short_name }}
-              {% else %}
-                {% trans "Event" %}
-              {% endif %}
-            </td>
-            <td>{{ note.register_object.teacher_short_names }}</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 %}
-            </td>
-            <td>
-              {% if note.tardiness %}
-                {{ note.tardiness }}'
-              {% endif %}
-            </td>
-            <td>
-              {% for extra_mark in note.extra_marks.all %}
-                {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %}
-              {% endfor %}
-            </td>
-            <td>{{ note.remarks }}</td>
-          </tr>
-        {% endif %}
-      {% endfor %}
-      </tbody>
-    </table>
-
-    <div class="page-break">&nbsp;</div>
-
-  {% endfor %}
-
-  {% for week in weeks %}
-    <h4>{% trans 'Week' %} {{ week.week }}: {{ week.0 }}–{{ week.6 }}</h4>
-
-    <table class="small-print">
-      <thead>
-      <tr>
-        <th></th>
-        <th>{% trans 'Pe.' %}</th>
-        <th>{% trans 'Subj.' %}</th>
-        <th>{% trans 'Lesson topic' %}</th>
-        <th>{% trans 'Homework' %}</th>
-        <th>{% trans 'Notes' %}</th>
-        <th>{% trans 'Te.' %}</th>
-      </tr>
-      </thead>
-      <tbody>
-      {% for day in week %}
-        {% with register_objects_by_day|get_dict:day as register_objects %}
-          {% for register_object, documentation, notes, substitution in register_objects %}
-            <tr class="
-                    {% if substitution %}
-                      {% if substitution.cancelled %}
-                        lesson-cancelled
-                      {% else %}
-                        lesson-substituted
-                      {% endif %}
-                    {% endif %}
-                    {% if forloop.first %}
-                      lessons-day-first
-                    {% endif %}
-                  ">
-              {% if forloop.first %}
-                <th rowspan="{{ register_objects|length }}" class="lessons-day-head">{{ day|date:"D" }}</th>
-              {% endif %}
-              <td class="lesson-pe">
-                {% if register_object.label_ != "event" %}
-                  {{ register_object.period.period }}
-                {% else %}
-                  {{ register_object.period_from_on_day }}.–{{ register_object.period_to_on_day }}.
-                {% endif %}
-              </td>
-              <td class="lesson-subj">
-                {% if register_object.label_ == "event" %}
-                  <strong>{% trans "Event" %}</strong>
-                  {% elif substitution %}
-                  {% include "chronos/partials/subs/subject.html" with type="substitution" el=substitution %}
-                {% else %}
-                  {% include "chronos/partials/subject.html" with subject=register_object.get_subject %}
-                {% endif %}
-              </td>
-              <td class="lesson-topic">
-                {% if register_object.label_ == "event" %}
-                  {{ register_object.title }}: {{ documentation.topic }}
-                {% elif substitution.cancelled %}
-                  {% trans 'Lesson cancelled' %}
-                {% else %}
-                  {{ documentation.topic }}
-                {% endif %}
-              </td>
-              <td class="lesson-homework">{{ documentation.homework }}</td>
-              <td class="lesson-notes">
-                {{ documentation.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 %}
-                    </span>
-                  {% endif %}
-                  {% if note.tardiness %}
-                    <span class="lesson-note-late">
-                      {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
-                      ({{ note.tardiness }}′)
-                      {% 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 %}
-                  {% 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">
-                {% if documentation.topic %}
-                  {{ register_object.get_teachers.first.short_name }}
-                {% endif %}
-              </td>
-            </tr>
-          {% endfor %}
-        {% endwith %}
-      {% endfor %}
-      </tbody>
-    </table>
-
-    <div class="page-break">&nbsp;</div>
-  {% endfor %}
 {% endblock %}