diff --git a/aleksis/apps/alsijil/schema/absences.py b/aleksis/apps/alsijil/schema/absences.py
index 1dd773e465ff75a6bb6b33846132423dd82e760f..ab006e1d875e053e061d04c9c800ae0c3ef15f2e 100644
--- a/aleksis/apps/alsijil/schema/absences.py
+++ b/aleksis/apps/alsijil/schema/absences.py
@@ -2,6 +2,7 @@ import datetime
 from typing import List
 
 from django.core.exceptions import PermissionDenied
+from django.db.models import Q
 
 import graphene
 
@@ -41,15 +42,27 @@ class AbsencesForPersonsCreateMutation(graphene.Mutation):
         for person in persons:
             if not info.context.user.has_perm("alsijil.register_absence_rule", person):
                 raise PermissionDenied()
-            # TODO: fix timeframe
-            kolego_absence, __ = Absence.objects.get_or_create(
-                datetime_start=start,
-                datetime_end=end,
+
+            # Check if there is an existing absence with overlapping datetime
+            absences = Absence.objects.filter(
+                Q(datetime_start__lte=start) | Q(date_start__lte=start.date()),
+                Q(datetime_end__gte=end) | Q(date_end__gte=end.date()),
                 reason_id=reason,
                 person=person,
-                defaults={"comment": comment},
             )
 
+            if len(absences) > 0:
+                kolego_absence = absences.first()
+            else:
+                # Check for same times and create otherwise
+                kolego_absence, __ = Absence.objects.get_or_create(
+                    datetime_start=start,
+                    datetime_end=end,
+                    reason_id=reason,
+                    person=person,
+                    defaults={"comment": comment},
+                )
+
             events = ParticipationStatus.get_single_events(
                 start,
                 end,