diff --git a/src/api/appservice_server.rs b/src/api/appservice_server.rs
index 6dca60be8129a339dc3ffc464c9eb2020ce649a1..339a0c2291059356370aba3c0175d07879e67e9e 100644
--- a/src/api/appservice_server.rs
+++ b/src/api/appservice_server.rs
@@ -45,11 +45,21 @@ pub(crate) async fn send_request<T: OutgoingRequest>(
     *reqwest_request.timeout_mut() = Some(Duration::from_secs(30));
 
     let url = reqwest_request.url().clone();
-    let mut response = services()
+    let mut response = match services()
         .globals
         .default_client()
         .execute(reqwest_request)
-        .await?;
+        .await
+    {
+        Ok(r) => r,
+        Err(e) => {
+            warn!(
+                "Could not send request to appservice {:?} at {}: {}",
+                registration.get("id"), destination, e
+            );
+            return Err(e.into());
+        }
+    };
 
     // reqwest::Response -> http::Response conversion
     let status = response.status();
diff --git a/src/api/client_server/to_device.rs b/src/api/client_server/to_device.rs
index f84d54f0c2595acb12be295433b691b71f1377a4..139b845dbafd403f2fe8ae4b57b753142609cf73 100644
--- a/src/api/client_server/to_device.rs
+++ b/src/api/client_server/to_device.rs
@@ -35,6 +35,7 @@ pub async fn send_event_to_device_route(
                 map.insert(target_device_id_maybe.clone(), event.clone());
                 let mut messages = BTreeMap::new();
                 messages.insert(target_user_id.clone(), map);
+                let count = services().globals.next_count()?;
 
                 services().sending.send_reliable_edu(
                     target_user_id.server_name(),
@@ -42,12 +43,12 @@ pub async fn send_event_to_device_route(
                         DirectDeviceContent {
                             sender: sender_user.clone(),
                             ev_type: ToDeviceEventType::from(&*body.event_type),
-                            message_id: body.txn_id.to_owned(),
+                            message_id: count.to_string().into(),
                             messages,
                         },
                     ))
                     .expect("DirectToDevice EDU can be serialized"),
-                    services().globals.next_count()?,
+                    count,
                 )?;
 
                 continue;
diff --git a/src/api/ruma_wrapper/axum.rs b/src/api/ruma_wrapper/axum.rs
index 818cffcb0539708b7eb8ddcfc5b76b94f13f9f8d..d056f3f2790ff263288f018eafb286f1e9f4ce74 100644
--- a/src/api/ruma_wrapper/axum.rs
+++ b/src/api/ruma_wrapper/axum.rs
@@ -281,7 +281,7 @@ struct QueryParams {
         debug!("{:?}", http_request);
 
         let body = T::try_from_http_request(http_request, &path_params).map_err(|e| {
-            warn!("{:?}", e);
+            warn!("{:?}\n{:?}", e, json_body);
             Error::BadRequest(ErrorKind::BadJson, "Failed to deserialize request.")
         })?;
 
diff --git a/src/api/server_server.rs b/src/api/server_server.rs
index 9b32b96b3ac53f8900b166b6e1897cf20b3fd81f..de0f84090131af97ee216c0632e32f2e83a242e8 100644
--- a/src/api/server_server.rs
+++ b/src/api/server_server.rs
@@ -304,7 +304,10 @@ pub(crate) async fn send_request<T: OutgoingRequest>(
                 ))
             }
         }
-        Err(e) => Err(e.into()),
+        Err(e) => {
+            warn!("Could not send request to {} at {}: {}", destination, actual_destination_str, e);
+            Err(e.into())
+        },
     }
 }
 
@@ -831,7 +834,8 @@ pub async fn send_transaction_message_route(
                                     target_user_id,
                                     target_device_id,
                                     &ev_type.to_string(),
-                                    event.deserialize_as().map_err(|_| {
+                                    event.deserialize_as().map_err(|e| {
+                                        warn!("To-Device event is invalid: {event:?} {e}");
                                         Error::BadRequest(
                                             ErrorKind::InvalidParam,
                                             "Event is invalid",
diff --git a/src/database/key_value/sending.rs b/src/database/key_value/sending.rs
index 5424e8c5d76713ecbe668247795549809c352914..fcbe0f3188ba638895d3b58e2a786d1c5f25eb32 100644
--- a/src/database/key_value/sending.rs
+++ b/src/database/key_value/sending.rs
@@ -6,7 +6,7 @@
         self,
         sending::{OutgoingKind, SendingEventType},
     },
-    utils, Error, Result,
+    utils, Error, Result, services,
 };
 
 impl service::sending::Data for KeyValueDatabase {
@@ -66,11 +66,11 @@ fn queue_requests(
         let mut keys = Vec::new();
         for (outgoing_kind, event) in requests {
             let mut key = outgoing_kind.get_prefix();
-            key.extend_from_slice(if let SendingEventType::Pdu(value) = &event {
-                value
+            if let SendingEventType::Pdu(value) = &event {
+                key.extend_from_slice(value)
             } else {
-                &[]
-            });
+                key.extend_from_slice(&services().globals.next_count()?.to_be_bytes())
+            }
             let value = if let SendingEventType::Edu(value) = &event {
                 &**value
             } else {
diff --git a/src/service/pusher/mod.rs b/src/service/pusher/mod.rs
index 8f8610c2e315ce4cf3f7a7729e901e8a55c4883d..767687d812c8d7db7c75af62937dd4664b6bac88 100644
--- a/src/service/pusher/mod.rs
+++ b/src/service/pusher/mod.rs
@@ -128,7 +128,10 @@ pub async fn send_request<T: OutgoingRequest>(
                     Error::BadServerResponse("Push gateway returned bad response.")
                 })
             }
-            Err(e) => Err(e.into()),
+            Err(e) => {
+                warn!("Could not send request to pusher {}: {}", destination, e);
+                Err(e.into())
+            },
         }
     }
 
diff --git a/src/service/sending/mod.rs b/src/service/sending/mod.rs
index adaf7c0ceac0d955acae13dbcbb71244bd1a8b1c..afa12fc71908dc9ca8e92025bf2c40ecb1ffeccc 100644
--- a/src/service/sending/mod.rs
+++ b/src/service/sending/mod.rs
@@ -158,8 +158,6 @@ async fn handler(&self) -> Result<()> {
                             // Find events that have been added since starting the last request
                             let new_events = self.db.queued_requests(&outgoing_kind).filter_map(|r| r.ok()).take(30).collect::<Vec<_>>();
 
-                            // TODO: find edus
-
                             if !new_events.is_empty() {
                                 // Insert pdus we found
                                 self.db.mark_as_active(&new_events)?;