diff --git a/src/client_server/sync.rs b/src/client_server/sync.rs
index 270a5f0663cd72588c4cd37cf960432218aa88de..7ce3b5bd57409da20639f3a0af96fdb4df872243 100644
--- a/src/client_server/sync.rs
+++ b/src/client_server/sync.rs
@@ -563,7 +563,8 @@ async fn sync_helper(
         }
 
         // Save the state after this sync so we can send the correct state diff next sync
-        db.rooms.associate_token_shortstatehash(&room_id, next_batch, current_shortstatehash)?;
+        db.rooms
+            .associate_token_shortstatehash(&room_id, next_batch, current_shortstatehash)?;
 
         let joined_room = sync_events::JoinedRoom {
             account_data: sync_events::RoomAccountData {
diff --git a/src/database.rs b/src/database.rs
index 193fcf25ca23016189a2388948ab5944508a96b5..a183f244c0816d9984a24c0fc7434082d535adda 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -710,6 +710,12 @@ pub async fn load_or_create(config: &Config) -> Result<Arc<TokioRwLock<Self>>> {
                         .insert(&shortstatekey, &statekey)?;
                 }
 
+                // Force E2EE device list updates so we can send them over federation
+                for user_id in db.users.iter().filter_map(|r| r.ok()) {
+                    db.users
+                        .mark_device_key_update(&user_id, &db.rooms, &db.globals)?;
+                }
+
                 db.globals.bump_database_version(10)?;
 
                 println!("Migration: 9 -> 10 finished");