diff --git a/src/matrix.rs b/src/matrix.rs
index 307c439ad04c11bd6fae0c09ccd1dd201743d397..f0b31ce99f98257fc19291f1e2415d46aa7804b9 100644
--- a/src/matrix.rs
+++ b/src/matrix.rs
@@ -1,4 +1,5 @@
 use crate::config::Config;
+use futures::{join, future::join_all};
 use log::{error, info, warn};
 use matrix_sdk::{
     deserialized_responses::EncryptionInfo,
@@ -16,7 +17,6 @@ use matrix_sdk::{
     Client, Result, SyncSettings,
 };
 use std::convert::TryFrom;
-use futures::join;
 use tokio::time::{sleep, Duration};
 
 async fn join_room(room: &Invited) {
@@ -118,13 +118,13 @@ async fn startup_and_log_rooms(client: &Client) {
     for room in client.joined_rooms() {
         info!("Got joined room: <{}>", room.name().unwrap());
     }
-    for room in client.invited_rooms() {
-        warn!(
-            "Got pending invitation on room <{}>, try to join it",
-            room.name().unwrap()
-        );
-        join_room(&room).await;
-    }
+
+    let invited_rooms = client.invited_rooms();
+    let list_to_wait_for = invited_rooms.iter().map(|room| {
+        warn!("Pending invit on room {}, joining it", room.name().unwrap());
+        return join_room(&room);
+    });
+    join_all(list_to_wait_for).await;
 }
 
 pub async fn connect_and_handle(config: Config) -> Result<()> {
@@ -143,10 +143,10 @@ pub async fn connect_and_handle(config: Config) -> Result<()> {
 
     client.sync_once(SyncSettings::default()).await?;
 
-    let startup_rooms = startup_and_log_rooms(&client);
+    startup_and_log_rooms(&client).await;
     let register_handle_state = client.register_event_handler(on_state_member);
     let register_handle_message = client.register_event_handler(on_room_message);
-    join!(startup_rooms, register_handle_message, register_handle_state);
+    join!(register_handle_message, register_handle_state);
 
     info!("Entering sync loop");
     let token = client.sync_token().await.unwrap();