diff --git a/Cargo.lock b/Cargo.lock
index f439e5189dc4f11a8423b15904b4be711e5ce279..d08de95fd62accc35eb9bced94e50127181f3e17 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -197,8 +197,8 @@ dependencies = [
  "http",
  "image",
  "log",
- "regex",
  "rand 0.7.3",
+ "regex",
  "reqwest",
  "ring",
  "rocket",
diff --git a/src/server_server.rs b/src/server_server.rs
index f68475cb5a4bb4c6f8bf5177b5921b9c837ce6dd..e87c05cde5a61038c59525a500151fda2241f644 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -565,7 +565,7 @@ pub async fn send_transaction_message_route<'a>(
     for pdu in &body.pdus {
         // 1. Is a valid event, otherwise it is dropped.
         // Ruma/PduEvent/StateEvent satisfies this
-
+        // TODO: ruma may solve this but our `process_incoming_pdu` needs to return a Result then
         let (event_id, value) = crate::pdu::process_incoming_pdu(pdu);
 
         // 2. Passes signature checks, otherwise event is dropped.
@@ -741,16 +741,24 @@ pub async fn send_transaction_message_route<'a>(
             let auth_events = fork_states
                 .iter()
                 .map(|map| {
-                    db.rooms.auth_events_full(
-                        pdu.room_id(),
-                        &map.values()
-                            .map(|pdu| pdu.event_id().clone())
-                            .collect::<Vec<_>>(),
-                    )
+                    db.rooms
+                        .auth_events_full(
+                            pdu.room_id(),
+                            &map.values()
+                                .map(|pdu| pdu.event_id().clone())
+                                .collect::<Vec<_>>(),
+                        )
+                        .map(|pdus| pdus.into_iter().map(Arc::new).collect::<Vec<_>>())
                 })
-                .collect();
+                .collect::<Result<Vec<_>>>()?;
 
-            // Add as much as we can to the `event_map` (less DB hits)
+            // Add everything we will need to event_map
+            event_map.extend(
+                auth_events
+                    .iter()
+                    .map(|pdus| pdus.iter().map(|pdu| (pdu.event_id().clone(), pdu.clone())))
+                    .flatten(),
+            );
             event_map.extend(
                 incoming_auth_events
                     .into_iter()
@@ -773,7 +781,10 @@ pub async fn send_transaction_message_route<'a>(
                             .collect::<StateMap<_>>()
                     })
                     .collect::<Vec<_>>(),
-                &auth_events,
+                auth_events
+                    .into_iter()
+                    .map(|pdus| pdus.into_iter().map(|pdu| pdu.event_id().clone()).collect())
+                    .collect(),
                 &mut event_map,
             ) {
                 Ok(res) => res