diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 9624e5208e614319527a95b33feae1fea4e84b6b..d518f49c61be2f840547813b6ba57b0a2a603cc2 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -5,7 +5,6 @@ from django.core.exceptions import ValidationError
 from django.db.models import Count, Q
 from django.utils.translation import gettext_lazy as _
 
-from django_global_request.middleware import get_request
 from django_select2.forms import Select2Widget
 from guardian.shortcuts import get_objects_for_user
 from material import Fieldset, Layout, Row
@@ -75,8 +74,8 @@ class SelectForm(forms.Form):
         data["instance"] = instance
         return data
 
-    def __init__(self, *args, **kwargs):
-        self.request = get_request()
+    def __init__(self, request, *args, **kwargs):
+        self.request = request
         super().__init__(*args, **kwargs)
 
         person = self.request.user.person
@@ -138,7 +137,6 @@ class RegisterAbsenceForm(forms.Form):
     remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False)
 
     def __init__(self, *args, **kwargs):
-        self.request = get_request()
         super().__init__(*args, **kwargs)
         period_choices = TimePeriod.period_choices
 
diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index 4501a8cc2cbe95cb302c88603bcdbca5b80cb74c..fdd05fd4bf3a867c98914b17ace921c65ffe052b 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -5,10 +5,7 @@ from django.db.models import Exists, OuterRef, Q, QuerySet
 from django.db.models.aggregates import Count, Sum
 from django.utils.translation import gettext as _
 
-import reversion
 from calendarweek import CalendarWeek
-from django_global_request.middleware import get_request
-from reversion import set_user
 
 from aleksis.apps.chronos.models import LessonPeriod
 from aleksis.core.models import Group, Person
@@ -63,31 +60,25 @@ def mark_absent(
             if sub and sub.cancelled:
                 continue
 
-            with reversion.create_revision():
-                set_user(get_request().user)
-                personal_note, created = (
-                    PersonalNote.objects.select_related(None)
-                    .prefetch_related(None)
-                    .update_or_create(
-                        person=self,
-                        lesson_period=lesson_period,
-                        week=wanted_week.week,
-                        year=wanted_week.year,
-                        defaults={
-                            "absent": absent,
-                            "excused": excused,
-                            "excuse_type": excuse_type,
-                        },
-                    )
+            personal_note, created = (
+                PersonalNote.objects.select_related(None)
+                .prefetch_related(None)
+                .update_or_create(
+                    person=self,
+                    lesson_period=lesson_period,
+                    week=wanted_week.week,
+                    year=wanted_week.year,
+                    defaults={"absent": absent, "excused": excused, "excuse_type": excuse_type,},
                 )
-                personal_note.groups_of_person.set(self.member_of.all())
-
-                if remarks:
-                    if personal_note.remarks:
-                        personal_note.remarks += "; %s" % remarks
-                    else:
-                        personal_note.remarks = remarks
-                    personal_note.save()
+            )
+            personal_note.groups_of_person.set(self.member_of.all())
+
+            if remarks:
+                if personal_note.remarks:
+                    personal_note.remarks += "; %s" % remarks
+                else:
+                    personal_note.remarks = remarks
+                personal_note.save()
 
     return lesson_periods.count()
 
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 170978aad3e22983357f7bf0facaf9031f421ad4..2b49259d926ae956a7ee48d53529f8632d99edca 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -1,3 +1,4 @@
+from contextlib import nullcontext
 from datetime import date, datetime, timedelta
 from typing import Optional
 
@@ -153,14 +154,16 @@ def lesson(
                         instances = personal_note_formset.save()
 
                     # Iterate over personal notes and carry changed absences to following lessons
-                    for instance in instances:
-                        instance.person.mark_absent(
-                            wanted_week[lesson_period.period.weekday],
-                            lesson_period.period.period + 1,
-                            instance.absent,
-                            instance.excused,
-                            instance.excuse_type,
-                        )
+                    with reversion.create_revision():
+                        reversion.set_user(request.user)
+                        for instance in instances:
+                            instance.person.mark_absent(
+                                wanted_week[lesson_period.period.weekday],
+                                lesson_period.period.period + 1,
+                                instance.absent,
+                                instance.excused,
+                                instance.excuse_type,
+                            )
 
                 messages.success(request, _("The personal notes have been saved."))
 
@@ -223,7 +226,7 @@ def week_view(
         initial = {type_.value: instance}
     else:
         initial = {}
-    select_form = SelectForm(request.POST or None, initial=initial)
+    select_form = SelectForm(request, request.POST or None, initial=initial)
 
     if request.method == "POST":
         if select_form.is_valid():
@@ -724,16 +727,17 @@ def register_absence(request: HttpRequest, id_: int) -> HttpResponse:
                 if holiday:
                     continue
 
-            affected_count += person.mark_absent(
-                day,
-                from_period_on_day,
-                absent,
-                excused,
-                excuse_type,
-                remarks,
-                to_period_on_day,
-                dry_run=not confirmed,
-            )
+            with reversion.create_revision() if confirmed else nullcontext():
+                affected_count += person.mark_absent(
+                    day,
+                    from_period_on_day,
+                    absent,
+                    excused,
+                    excuse_type,
+                    remarks,
+                    to_period_on_day,
+                    dry_run=not confirmed,
+                )
 
         if not confirmed:
             # Show confirmation page