diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 84688f87ac580588b2c02cbdeb84bb00ee154e51..286084df6180dbf0ffa9f32d1cbb0b7ce84cf8cb 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -81,15 +81,7 @@ class SelectForm(forms.Form):
 
         person = self.request.user.person
 
-        group_pks = (
-            Group.objects.for_current_school_term_or_all()
-            .annotate(lessons_count=Count("lessons"))
-            .filter(lessons_count__gt=0)
-            .values_list("pk", flat=True)
-        )
-        group_qs = Group.objects.filter(
-            Q(child_groups__pk__in=group_pks) | Q(pk__in=group_pks)
-        ).distinct()
+        group_qs = Group.get_groups_with_lessons()
 
         if not check_global_permission(self.request.user, "alsijil.view_week"):
             group_qs = (
@@ -164,7 +156,9 @@ class RegisterAbsenceForm(forms.Form):
                     )
                 )
             )
-            self.fields["person"].queryset = Person.objects.filter(pk__in=list(persons_qs.values_list("pk", flat=True)))
+            self.fields["person"].queryset = Person.objects.filter(
+                pk__in=list(persons_qs.values_list("pk", flat=True))
+            )
 
         self.fields["from_period"].choices = period_choices
         self.fields["to_period"].choices = period_choices
diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index a88f042a04af5071e64a0da7ef3ffc7bf399dcc5..d24752f144ca4823d594b8873cc429145d1a7213 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -1,7 +1,8 @@
 from datetime import date
 from typing import Dict, Optional, Union
 
-from django.db.models import Exists, OuterRef, QuerySet
+from django.db.models import Exists, OuterRef, Q, QuerySet
+from django.db.models.aggregates import Count
 from django.utils.translation import gettext as _
 
 import reversion
@@ -239,3 +240,28 @@ def get_extra_marks(
             stats[extra_mark] = qs
 
     return stats
+
+
+@Group.class_method
+def get_groups_with_lessons(cls: Group):
+    """Get all groups which have related lessons or child groups with related lessons."""
+    group_pks = (
+        cls.objects.for_current_school_term_or_all()
+        .annotate(lessons_count=Count("lessons"))
+        .filter(lessons_count__gt=0)
+        .values_list("pk", flat=True)
+    )
+    groups = cls.objects.filter(
+        Q(child_groups__pk__in=group_pks) | Q(pk__in=group_pks)
+    ).distinct()
+
+    return groups
+
+
+@Person.method
+def get_owner_groups_with_lessons(self: Person):
+    """Get all groups the person is an owner of and which have related lessons.
+
+    Groups which have child groups with related lessons are also included.
+    """
+    return Group.get_groups_with_lessons().filter(owners=self)
diff --git a/aleksis/apps/alsijil/templates/alsijil/absences/register.html b/aleksis/apps/alsijil/templates/alsijil/absences/register.html
index b14890e21438a6e452c4fa3e6c595f99d5b856dd..4074c947fb5016b912bdfaf6d793bdf1a1b263b1 100644
--- a/aleksis/apps/alsijil/templates/alsijil/absences/register.html
+++ b/aleksis/apps/alsijil/templates/alsijil/absences/register.html
@@ -17,7 +17,7 @@
     $(document).ready(function () {
       $("#id_date_start").change(function () {
         $("#id_date_end").val($("#id_date_start").val());
-        $("#id_date_end").change();
+        initDatePicker("#id_date_end");
       });
     });
   </script>
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 99f69d86d040ccbca436e8d5baac149328053624..b4ad6650066431531fda7e55a128f69b53156410 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -476,12 +476,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
 @permission_required("alsijil.view_my_students")
 def my_students(request: HttpRequest) -> HttpResponse:
     context = {}
-    relevant_groups = (
-        Group.objects.for_current_school_term_or_all()
-        .annotate(lessons_count=Count("lessons"))
-        .filter(lessons_count__gt=0, owners=request.user.person)
-    )
-    persons = Person.objects.filter(member_of__in=relevant_groups).distinct()
+    relevant_groups = request.user.person.get_owner_groups_with_lessons()
+    persons = Person.objects.filter(member_of__in=relevant_groups)
     context["persons"] = persons
     return render(request, "alsijil/class_register/persons.html", context)
 
@@ -489,12 +485,7 @@ def my_students(request: HttpRequest) -> HttpResponse:
 @permission_required("alsijil.view_my_groups",)
 def my_groups(request: HttpRequest) -> HttpResponse:
     context = {}
-    groups = (
-        Group.objects.for_current_school_term_or_all()
-        .annotate(lessons_count=Count("lessons"))
-        .filter(lessons_count__gt=0, owners=request.user.person)
-    )
-    context["groups"] = groups
+    context["groups"] = request.user.person.get_owner_groups_with_lessons()
     return render(request, "alsijil/class_register/groups.html", context)