diff --git a/src/database/rooms.rs b/src/database/rooms.rs
index ef5447446ccd03c3fc8c4f9ea6a8f0ff086bbb79..88a07295218473377e92f5c293529013d526d5db 100644
--- a/src/database/rooms.rs
+++ b/src/database/rooms.rs
@@ -1957,12 +1957,24 @@ pub fn build_and_append_pdu(
         // where events in the current room state do not exist
         self.set_room_state(room_id, statehashid)?;
 
-        let servers = self
-            .room_servers(room_id)
-            .filter_map(|r| r.ok())
-            .filter(|server| &**server != db.globals.server_name());
+        let mut servers: HashSet<Box<ServerName>> =
+            self.room_servers(room_id).filter_map(|r| r.ok()).collect();
+
+        // In case we are kicking or banning a user, we need to inform their server of the change
+        if pdu.kind == EventType::RoomMember {
+            if let Some(state_key_uid) = &pdu
+                .state_key
+                .as_ref()
+                .and_then(|state_key| UserId::parse(state_key.as_str()).ok())
+            {
+                servers.insert(Box::from(state_key_uid.server_name()));
+            }
+        }
+
+        // Remove our server from the server list since it will be added to it by room_servers() and/or the if statement above
+        servers.remove(db.globals.server_name());
 
-        db.sending.send_pdu(servers, &pdu_id)?;
+        db.sending.send_pdu(servers.into_iter(), &pdu_id)?;
 
         for appservice in db.appservice.all()? {
             if self.appservice_in_room(room_id, &appservice, db)? {