diff --git a/src/api/client_server/alias.rs b/src/api/client_server/alias.rs
index ab51b5065b7996a0b2ce9a44982b75bfaf70b9de..7660ca2f5928c41af571c7813c0240ffebf75ee1 100644
--- a/src/api/client_server/alias.rs
+++ b/src/api/client_server/alias.rs
@@ -1,4 +1,5 @@
 use crate::{services, Error, Result, Ruma};
+use rand::seq::SliceRandom;
 use regex::Regex;
 use ruma::{
     api::{
@@ -90,10 +91,10 @@ pub(crate) async fn get_alias_helper(
             )
             .await?;
 
-        return Ok(get_alias::v3::Response::new(
-            response.room_id,
-            response.servers,
-        ));
+        let mut servers = response.servers;
+        servers.shuffle(&mut rand::thread_rng());
+
+        return Ok(get_alias::v3::Response::new(response.room_id, servers));
     }
 
     let mut room_id = None;
diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs
index ccd8d7a15fe9b0e1f57de9ff5cb4a23b9eadf84e..c9357b2076d99be61b2fd67cc93e70b598ea95d3 100644
--- a/src/api/client_server/membership.rs
+++ b/src/api/client_server/membership.rs
@@ -112,7 +112,7 @@ pub async fn join_room_by_id_or_alias_route(
         Err(room_alias) => {
             let response = get_alias_helper(room_alias).await?;
 
-            (response.servers.into_iter().collect(), response.room_id)
+            (response.servers, response.room_id)
         }
     };