diff --git a/src/database/abstraction/rocksdb.rs b/src/database/abstraction/rocksdb.rs
index b2142dfe7290776b745da6cd4ec6c4a06a4b9b7a..397047bd3d758dd59fab7afc2a62958e122f26a0 100644
--- a/src/database/abstraction/rocksdb.rs
+++ b/src/database/abstraction/rocksdb.rs
@@ -27,7 +27,9 @@ fn open(config: &Config) -> Result<Arc<Self>> {
         db_opts.set_num_levels(8);
         db_opts.set_write_buffer_size(2 << 27);
 
-        let rocksdb_cache = rocksdb::Cache::new_lru_cache((config.db_cache_capacity_mb * 1024.0 * 1024.0) as usize).unwrap();
+        let rocksdb_cache =
+            rocksdb::Cache::new_lru_cache((config.db_cache_capacity_mb * 1024.0 * 1024.0) as usize)
+                .unwrap();
 
         let mut block_based_options = rocksdb::BlockBasedOptions::default();
         block_based_options.set_block_size(2 << 19);
diff --git a/src/server_server.rs b/src/server_server.rs
index 57f558674fd8ff5b116c38eea86f68a40eb5cc94..6e8ebf38e24521de9c3f1a0ae63de2556f51c0a0 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -1867,7 +1867,12 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
             // handle_outlier_pdu.
             let mut todo_auth_events = vec![Arc::clone(id)];
             let mut events_in_reverse_order = Vec::new();
+            let mut events_all = HashSet::new();
             while let Some(next_id) = todo_auth_events.pop() {
+                if events_all.contains(&next_id) {
+                    continue;
+                }
+
                 if let Ok(Some(_)) = db.rooms.get_pdu(&next_id) {
                     trace!("Found {} in db", id);
                     continue;
@@ -1899,10 +1904,13 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
                                 next_id, calculated_event_id, &res.pdu);
                         }
 
-
-                        if let Some(auth_events) = value.get("auth_events").and_then(|c| c.as_array()) {
+                        if let Some(auth_events) =
+                            value.get("auth_events").and_then(|c| c.as_array())
+                        {
                             for auth_event in auth_events {
-                                if let Ok(auth_event) = serde_json::from_value(auth_event.clone().into()) {
+                                if let Ok(auth_event) =
+                                    serde_json::from_value(auth_event.clone().into())
+                                {
                                     let a: Arc<EventId> = auth_event;
                                     todo_auth_events.push(a);
                                 } else {
@@ -1913,7 +1921,8 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
                             warn!("Auth event list invalid");
                         }
 
-                        events_in_reverse_order.push((next_id, value));
+                        events_in_reverse_order.push((next_id.clone(), value));
+                        events_all.insert(next_id);
                     }
                     Err(_) => {
                         warn!("Failed to fetch event: {}", next_id);