diff --git a/src/api/client_server/alias.rs b/src/api/client_server/alias.rs
index fb117fb568e1a6c284d60b4ea6b8496f547b6dd6..d91f79408ba292cf70d3c11dc225000e9546437a 100644
--- a/src/api/client_server/alias.rs
+++ b/src/api/client_server/alias.rs
@@ -113,6 +113,9 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result<get
 
 		let mut servers = response.servers;
 
+		// since the room alias server_name responded, insert it into the list
+		servers.push(room_alias.server_name().into());
+
 		// find active servers in room state cache to suggest
 		for extra_servers in services()
 			.rooms
@@ -123,7 +126,14 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result<get
 			servers.push(extra_servers);
 		}
 
-		// insert our server as the very first choice if in list
+		servers.sort_unstable();
+		servers.dedup();
+
+		// shuffle list of servers randomly after sort and dedupe
+		servers.shuffle(&mut rand::thread_rng());
+
+		// prefer the very first server to be ourselves if available, else prefer the
+		// room alias server first
 		if let Some(server_index) = servers
 			.clone()
 			.into_iter()
@@ -131,14 +141,15 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result<get
 		{
 			servers.remove(server_index);
 			servers.insert(0, services().globals.server_name().to_owned());
+		} else if let Some(alias_server_index) = servers
+			.clone()
+			.into_iter()
+			.position(|server| server == room_alias.server_name())
+		{
+			servers.remove(alias_server_index);
+			servers.insert(0, room_alias.server_name().into());
 		}
 
-		servers.sort_unstable();
-		servers.dedup();
-
-		// shuffle list of servers randomly after sort and dedupe
-		servers.shuffle(&mut rand::thread_rng());
-
 		return Ok(get_alias::v3::Response::new(room_id, servers));
 	}
 
@@ -191,6 +202,12 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result<get
 		servers.push(extra_servers);
 	}
 
+	servers.sort_unstable();
+	servers.dedup();
+
+	// shuffle list of servers randomly after sort and dedupe
+	servers.shuffle(&mut rand::thread_rng());
+
 	// insert our server as the very first choice if in list
 	if let Some(server_index) = servers
 		.clone()
@@ -201,11 +218,5 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result<get
 		servers.insert(0, services().globals.server_name().to_owned());
 	}
 
-	servers.sort_unstable();
-	servers.dedup();
-
-	// shuffle list of servers randomly after sort and dedupe
-	servers.shuffle(&mut rand::thread_rng());
-
 	Ok(get_alias::v3::Response::new(room_id, servers))
 }