diff --git a/src/api/views/schedule.py b/src/api/views/schedule.py
index 31bc747186d3bb0be5aa07d57834a2241e6eb334..9600271810940b6e4be9a0d410b717920fa81d86 100644
--- a/src/api/views/schedule.py
+++ b/src/api/views/schedule.py
@@ -82,7 +82,7 @@ class ConferenceSchedule(BaseScheduleView):
             Event.objects.conference_accessible(conference=self.conference)
             .exclude(schedule_duration=None)
             .exclude(schedule_duration__lte=timedelta(minutes=5))
-            .order_by(F('assembly__is_official').desc(nulls_last=True), F('room__capacity').desc(nulls_last=True), 'schedule_start')
+            .order_by(F('assembly__is_official').desc(nulls_last=True), 'room__official_room_order', F('room__capacity').desc(nulls_last=True), 'name')
         )
         if filter:
             queryset = queryset.filter(**filter)
diff --git a/src/core/migrations/0166_alter_room_official_room_order.py b/src/core/migrations/0166_alter_room_official_room_order.py
new file mode 100644
index 0000000000000000000000000000000000000000..a374050b6ad6ffcac8c363d73eccf1e4404dd4bb
--- /dev/null
+++ b/src/core/migrations/0166_alter_room_official_room_order.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.1.3 on 2024-12-21 01:03
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("core", "0165_alter_eventparticipant_options_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="room",
+            name="official_room_order",
+            field=models.IntegerField(
+                default=1000,
+                help_text="Room__official_room_order__help",
+                verbose_name="Room__official_room_order",
+            ),
+        ),
+    ]
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/core/models/rooms.py b/src/core/models/rooms.py
index d33ff8ce7b9e8fda72e33508023753e3cf9c549a..21e0c1ee2991d1e131403f2a6a1f902e6f1580d7 100644
--- a/src/core/models/rooms.py
+++ b/src/core/models/rooms.py
@@ -149,7 +149,7 @@ class Room(BackendMixin, models.Model):
     is_public_fahrplan = models.BooleanField(default=False, help_text=_('Room__is_public_fahrplan__help'), verbose_name=_('Room__is_public_fahrplan'))
 
     is_official = models.BooleanField(default=False, help_text=_('Room__is_official__help'), verbose_name=_('Room__is_official'))
-    official_room_order = models.IntegerField(default=0, help_text=_('Room__official_room_order__help'), verbose_name=_('Room__official_room_order'))
+    official_room_order = models.IntegerField(default=1000, help_text=_('Room__official_room_order__help'), verbose_name=_('Room__official_room_order'))
 
     room_type = models.CharField(max_length=20, choices=RoomType.choices, help_text=_('Room__type__help'), verbose_name=_('Room__type'))
     """Style of the room."""
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(