diff --git a/src/plainui/views/utils.py b/src/plainui/views/utils.py
index df4f9decff92c37c197cd5d605069a1025863280..df035bcbfa928a68cdd66895deed26cd0a6c6c09 100644
--- a/src/plainui/views/utils.py
+++ b/src/plainui/views/utils.py
@@ -6,7 +6,8 @@ from django.conf import settings
 from django.contrib import messages
 from django.contrib.auth import mixins as auth_mixins
 from django.core.exceptions import ImproperlyConfigured, ValidationError
-from django.db.models import F, Prefetch, Q
+from django.db.models import Case, F, Prefetch, Q, When
+from django.forms import BooleanField
 from django.http import HttpResponse
 from django.shortcuts import redirect
 from django.urls import reverse
@@ -215,9 +216,16 @@ def event_filter(
 
     events = Event.objects.conference_accessible(conf)
     events = events.filter(schedule_start__isnull=False, schedule_end__isnull=False)
+    now = timezone.now()
+    events = events.annotate(
+        upcoming=Case(
+            When(Q(schedule_start__lt=now, schedule_end__gte=now) | Q(schedule_start__gte=now, schedule_start__lt=now + UPCOMING_WINDOW)),
+            default=False,
+            output_field=BooleanField(),
+        )
+    )
     if upcoming:
-        now = timezone.now()
-        events = events.filter(Q(schedule_start__lt=now, schedule_end__gte=now) | Q(schedule_start__gte=now, schedule_start__lt=now + UPCOMING_WINDOW))
+        events = events.filter(upcoming=True)
     if calendar_mode:
         events = events.filter(room__isnull=False)
     res = events.filter(schedule_duration__isnull=False, **filters).order_by('schedule_start', 'schedule_end')