diff --git a/src/core/models/events.py b/src/core/models/events.py
index c080fcb2c140ec7799137343c3618a1de9dc1d87..7d7f35c5573b2448f50539be9b3720af135bde5b 100644
--- a/src/core/models/events.py
+++ b/src/core/models/events.py
@@ -300,7 +300,7 @@ class Event(TaggedItemMixin, BackendMixin, models.Model):
     def get_all_speaker_names(self):
         # plainui will prefetch speaker names in self.speakers => only do db lookup if we don't have that
         try:
-            names = OrderedSet(self.speakers)
+            names = OrderedSet([speaker.participant.display_name for speaker in self.speakers])
         except AttributeError:
             names = OrderedSet()
             names |= OrderedSet(
diff --git a/src/plainui/views/utils.py b/src/plainui/views/utils.py
index 5362bec081aa03bf728da1b3d41775573cbfbf16..7296f860f3158732c04653f93ce771720f58dcf4 100644
--- a/src/plainui/views/utils.py
+++ b/src/plainui/views/utils.py
@@ -254,8 +254,8 @@ 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__username')
-    speakers = speakers.annotate(speaker_name=F('participant__username'))
+    speakers = EventParticipant.objects.filter(is_public=True, role=EventParticipant.Role.SPEAKER).order_by('participant__display_name')
+    speakers = speakers.annotate(speaker_name=F('participant__display_name'))
 
     return res.prefetch_related(
         Prefetch('participants', queryset=speakers, to_attr='speakers'),