diff --git a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigUploader.kt b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigUploader.kt
index 25fa26e846..59bd20825b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigUploader.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/configs/ConfigUploader.kt
@@ -228,25 +228,8 @@ class ConfigUploader @Inject constructor(
         val snode = SnodeAPI.getSingleTargetSnode(groupId.hexString).await()
         val auth = OwnedSwarmAuth.ofClosedGroup(groupId, adminKey)
 
-        // Spawn the config pushing concurrently
-        val membersConfigHashTask = membersPush?.let { push ->
-            async {
-                push to pushConfig(
-                    auth,
-                    snode,
-                    push,
-                    Namespace.GROUP_MEMBERS()
-                )
-            }
-        }
-
-        val infoConfigHashTask = infoPush?.let { push ->
-            async {
-                push to pushConfig(auth, snode, push, Namespace.GROUP_INFO())
-            }
-        }
-
-        // Keys push is different: it doesn't have the delete call so we don't call pushConfig
+        // Keys push is different: it doesn't have the delete call so we don't call pushConfig.
+        // Keys must be pushed first because the other configs depend on it.
         val keysPushResult = keysPush?.let { push ->
             SnodeAPI.sendBatchRequest(
                 snode = snode,
@@ -265,6 +248,24 @@ class ConfigUploader @Inject constructor(
             ).toConfigPushResult()
         }
 
+        // Spawn the config pushing concurrently
+        val membersConfigHashTask = membersPush?.let { push ->
+            async {
+                push to pushConfig(
+                    auth,
+                    snode,
+                    push,
+                    Namespace.GROUP_MEMBERS()
+                )
+            }
+        }
+
+        val infoConfigHashTask = infoPush?.let { push ->
+            async {
+                push to pushConfig(auth, snode, push, Namespace.GROUP_INFO())
+            }
+        }
+
         // Wait for all other config push to come back
         val memberPushResult = membersConfigHashTask?.await()
         val infoPushResult = infoConfigHashTask?.await()