diff --git a/src/server_server.rs b/src/server_server.rs
index da5a6c1e..40ad654f 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -62,14 +62,18 @@ where
 
     let mut http_request = request
         .try_into_http_request(&actual_destination, Some(""))
-        .unwrap();
+        .map_err(|e| {
+            warn!("{}: {}", actual_destination, e);
+            Error::BadServerResponse("Invalid destination")
+        })?;
 
     let mut request_map = serde_json::Map::new();
 
     if !http_request.body().is_empty() {
         request_map.insert(
             "content".to_owned(),
-            serde_json::from_slice(http_request.body()).unwrap(),
+            serde_json::from_slice(http_request.body())
+                .expect("body is valid json, we just created it"),
         );
     };
 
@@ -92,7 +96,7 @@ where
         globals.keypair(),
         &mut request_json,
     )
-    .unwrap();
+    .expect("our request json is what ruma expects");
 
     let signatures = request_json["signatures"]
         .as_object()
@@ -145,7 +149,11 @@ where
                 .into_iter()
                 .collect();
 
-            let response = T::IncomingResponse::try_from(http_response.body(body).unwrap());
+            let response = T::IncomingResponse::try_from(
+                http_response
+                    .body(body)
+                    .expect("reqwest body is valid http body"),
+            );
             response.map_err(|e| {
                 warn!("{}", e);
                 Error::BadServerResponse("Server returned bad response.")