diff --git a/CHANGES.md b/CHANGES.md
index 3993bf755b..7c235d8704 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,6 +8,7 @@ Features ✨:
 Improvements 🙌:
  - Sharing things to RiotX: sort list by recent room first (#771)
  - Hide the algorithm when turning on e2e (#897)
+ - Sort room members by display names
 
 Other changes:
  - Add support for /rainbow and /rainbowme commands (#879)
diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberListViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberListViewModel.kt
index 8472d4a2a5..2556e3b78c 100644
--- a/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberListViewModel.kt
+++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberListViewModel.kt
@@ -40,6 +40,7 @@ import io.reactivex.Observable
 import io.reactivex.functions.BiFunction
 
 class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState: RoomMemberListViewState,
+                                                          private val roomMemberSummaryComparator: RoomMemberSummaryComparator,
                                                           private val session: Session)
     : VectorViewModel<RoomMemberListViewState, RoomMemberListAction, EmptyViewEvents>(initialState) {
 
@@ -113,11 +114,11 @@ class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState
                 }
 
         return listOf(
-                PowerLevelCategory.ADMIN to admins,
-                PowerLevelCategory.MODERATOR to moderators,
-                PowerLevelCategory.CUSTOM to customs,
-                PowerLevelCategory.INVITE to invites,
-                PowerLevelCategory.USER to users
+                PowerLevelCategory.ADMIN to admins.sortedWith(roomMemberSummaryComparator),
+                PowerLevelCategory.MODERATOR to moderators.sortedWith(roomMemberSummaryComparator),
+                PowerLevelCategory.CUSTOM to customs.sortedWith(roomMemberSummaryComparator),
+                PowerLevelCategory.INVITE to invites.sortedWith(roomMemberSummaryComparator),
+                PowerLevelCategory.USER to users.sortedWith(roomMemberSummaryComparator)
         )
     }
 
diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberSummaryComparator.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberSummaryComparator.kt
new file mode 100644
index 0000000000..cc1dd29d13
--- /dev/null
+++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/members/RoomMemberSummaryComparator.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.riotx.features.roomprofile.members
+
+import im.vector.matrix.android.api.session.room.model.RoomMemberSummary
+import javax.inject.Inject
+
+class RoomMemberSummaryComparator @Inject constructor() : Comparator<RoomMemberSummary> {
+
+    override fun compare(leftRoomMemberSummary: RoomMemberSummary?, rightRoomMemberSummary: RoomMemberSummary?): Int {
+        return when (leftRoomMemberSummary) {
+            null ->
+                when (rightRoomMemberSummary) {
+                    null -> 0
+                    else -> 1
+                }
+            else ->
+                when (rightRoomMemberSummary) {
+                    null -> -1
+                    else ->
+                        when {
+                            leftRoomMemberSummary.displayName.isNullOrBlank() ->
+                                when {
+                                    rightRoomMemberSummary.displayName.isNullOrBlank() -> {
+                                        // No display names, compare ids
+                                        leftRoomMemberSummary.userId.compareTo(rightRoomMemberSummary.userId)
+                                    }
+                                    else                                               -> 1
+                                }
+                            else                                              ->
+                                when {
+                                    rightRoomMemberSummary.displayName.isNullOrBlank() -> -1
+                                    else                                               -> {
+                                        when (leftRoomMemberSummary.displayName) {
+                                            rightRoomMemberSummary.displayName ->
+                                                // Same display name, compare id
+                                                leftRoomMemberSummary.userId.compareTo(rightRoomMemberSummary.userId)
+                                            else                               ->
+                                                leftRoomMemberSummary.displayName!!.compareTo(rightRoomMemberSummary.displayName!!, true)
+                                        }
+                                    }
+                                }
+                        }
+                }
+        }
+    }
+}