diff --git a/src/core/models/events.py b/src/core/models/events.py
index 19ea075f7122435c7d853ac2827e97a75b946e57..9908758a1ed23a87fc590d33507e0eac0284204f 100644
--- a/src/core/models/events.py
+++ b/src/core/models/events.py
@@ -296,7 +296,7 @@ class Event(TaggedItemMixin, BackendMixin, ActivityLogMixin, models.Model):
             names = OrderedSet()
             names |= OrderedSet(
                 self.participants.filter(is_public=True, role=EventParticipant.Role.SPEAKER)
-                .order_by('participant__display_name')
+                .order_by('order', 'participant__display_name')
                 .values_list('participant__display_name', flat=True)
             )
 
diff --git a/src/plainui/views/utils.py b/src/plainui/views/utils.py
index b38eaaf0f3a6892288c812ad9fe1b279fac6263f..df4f9decff92c37c197cd5d605069a1025863280 100644
--- a/src/plainui/views/utils.py
+++ b/src/plainui/views/utils.py
@@ -259,7 +259,7 @@ def event_filter(
         res = res.exclude(recording=Event.Recording.UNKNOWN, room__isnull=False, room__recording_state__in=[Room.RecordingState.RECORD_BY_DEFAULT])
 
     res = res.annotate(track_name=F('track__name'))
-    speakers = EventParticipant.objects.filter(is_public=True, role=EventParticipant.Role.SPEAKER).order_by('participant__display_name')
+    speakers = EventParticipant.objects.filter(is_public=True, role=EventParticipant.Role.SPEAKER).order_by('order', 'participant__display_name')
     speakers = speakers.annotate(speaker_name=F('participant__display_name'))
 
     return res.prefetch_related(