diff --git a/src/api/appservice_server.rs b/src/api/appservice_server.rs
index 9d47f8b6670b9367d30db8666e944edc92df5b1c..e296ef264fcd91afdda8542c254ac66d66a7b0a5 100644
--- a/src/api/appservice_server.rs
+++ b/src/api/appservice_server.rs
@@ -44,7 +44,7 @@ pub(crate) async fn send_request<T: OutgoingRequest>(
 
     let mut reqwest_request = reqwest::Request::try_from(http_request)?;
 
-    *reqwest_request.timeout_mut() = Some(Duration::from_secs(30));
+    *reqwest_request.timeout_mut() = Some(Duration::from_secs(120));
 
     let url = reqwest_request.url().clone();
     let mut response = match services()
diff --git a/src/api/client_server/keys.rs b/src/api/client_server/keys.rs
index d71ac888f66eb0487dd23a8ec80265eb4e7b2fc4..bc82bd9899efe4ee76b42a887a9ae8ba380b3750 100644
--- a/src/api/client_server/keys.rs
+++ b/src/api/client_server/keys.rs
@@ -370,7 +370,7 @@ pub(crate) async fn get_keys_helper<F: Fn(&UserId) -> bool>(
                 .get(server)
             {
                 // Exponential backoff
-                let mut min_elapsed_duration = Duration::from_secs(30) * (*tries) * (*tries);
+                let mut min_elapsed_duration = Duration::from_secs(5 * 60) * (*tries) * (*tries);
                 if min_elapsed_duration > Duration::from_secs(60 * 60 * 24) {
                     min_elapsed_duration = Duration::from_secs(60 * 60 * 24);
                 }
@@ -391,7 +391,7 @@ pub(crate) async fn get_keys_helper<F: Fn(&UserId) -> bool>(
             (
                 server,
                 tokio::time::timeout(
-                    Duration::from_secs(25),
+                    Duration::from_secs(50),
                     services().sending.send_federation_request(
                         server,
                         federation::keys::get_keys::v1::Request {
diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs
index f1513ca8e328f2f61949304af6949e742268f4c6..640d804880eaab843d5cb09c46b38feaffb732e1 100644
--- a/src/api/client_server/membership.rs
+++ b/src/api/client_server/membership.rs
@@ -1163,7 +1163,7 @@ fn validate_and_add_event_id(
         .get(&event_id)
     {
         // Exponential backoff
-        let mut min_elapsed_duration = Duration::from_secs(30) * (*tries) * (*tries);
+        let mut min_elapsed_duration = Duration::from_secs(5 * 60) * (*tries) * (*tries);
         if min_elapsed_duration > Duration::from_secs(60 * 60 * 24) {
             min_elapsed_duration = Duration::from_secs(60 * 60 * 24);
         }
diff --git a/src/main.rs b/src/main.rs
index 4ec3e48f542c171a77f583eaeda46821d590bf3b..84ab470e73282f9ac7a7bbb840242f9a2efebe23 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -545,7 +545,7 @@ async fn shutdown_signal(handle: ServerHandle, tx: Sender<()>) -> Result<()> {
     }
 
     warn!("Received {}, shutting down...", sig);
-    handle.graceful_shutdown(Some(Duration::from_secs(30)));
+    handle.graceful_shutdown(Some(Duration::from_secs(60)));
 
     services().globals.shutdown();
 
diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs
index 228424f571a387806aeb8089dc32ec166f54a1dc..090b35a428965826195fde2cc5fcc1ee2ab7ac73 100644
--- a/src/service/globals/mod.rs
+++ b/src/service/globals/mod.rs
@@ -537,8 +537,8 @@ pub fn shutdown(&self) {
 fn reqwest_client_builder(config: &Config) -> Result<reqwest::ClientBuilder> {
     let mut reqwest_client_builder = reqwest::Client::builder()
         .pool_max_idle_per_host(0)
-        .connect_timeout(Duration::from_secs(30))
-        .timeout(Duration::from_secs(60 * 3));
+        .connect_timeout(Duration::from_secs(60))
+        .timeout(Duration::from_secs(60 * 4));
 
     if let Some(proxy) = config.proxy.to_proxy()? {
         reqwest_client_builder = reqwest_client_builder.proxy(proxy);
diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs
index 729a7a2b5c651d440540905b271d5ded5900734f..f11b59cbe4fda3d6a1cb6113aaed74d910462483 100644
--- a/src/service/rooms/event_handler/mod.rs
+++ b/src/service/rooms/event_handler/mod.rs
@@ -1461,7 +1461,7 @@ fn get_server_keys_from_cache(
             .get(event_id)
         {
             // Exponential backoff
-            let mut min_elapsed_duration = Duration::from_secs(30) * (*tries) * (*tries);
+            let mut min_elapsed_duration = Duration::from_secs(5 * 60) * (*tries) * (*tries);
             if min_elapsed_duration > Duration::from_secs(60 * 60 * 24) {
                 min_elapsed_duration = Duration::from_secs(60 * 60 * 24);
             }
@@ -1748,7 +1748,7 @@ pub async fn fetch_signing_keys_for_server(
             .get(&signature_ids)
         {
             // Exponential backoff
-            let mut min_elapsed_duration = Duration::from_secs(30) * (*tries) * (*tries);
+            let mut min_elapsed_duration = Duration::from_secs(5 * 60) * (*tries) * (*tries);
             if min_elapsed_duration > Duration::from_secs(60 * 60 * 24) {
                 min_elapsed_duration = Duration::from_secs(60 * 60 * 24);
             }
diff --git a/src/service/sending/mod.rs b/src/service/sending/mod.rs
index 46bcc022be9c34913037d99c316bddd6677d150e..9a12f7b432fd61dcdf264d39a91c84cf8288ed98 100644
--- a/src/service/sending/mod.rs
+++ b/src/service/sending/mod.rs
@@ -219,7 +219,8 @@ fn select_events(
                 }
                 TransactionStatus::Failed(tries, time) => {
                     // Fail if a request has failed recently (exponential backoff)
-                    let mut min_elapsed_duration = Duration::from_secs(30) * (*tries) * (*tries);
+                    let mut min_elapsed_duration =
+                        Duration::from_secs(5 * 60) * (*tries) * (*tries);
                     if min_elapsed_duration > Duration::from_secs(60 * 60 * 24) {
                         min_elapsed_duration = Duration::from_secs(60 * 60 * 24);
                     }
@@ -719,13 +720,13 @@ pub async fn send_federation_request<T: OutgoingRequest>(
         let permit = self.maximum_requests.acquire().await;
         debug!("Got permit");
         let response = tokio::time::timeout(
-            Duration::from_secs(2 * 60),
+            Duration::from_secs(5 * 60),
             server_server::send_request(destination, request),
         )
         .await
         .map_err(|_| {
-            warn!("Timeout waiting for server response of {destination}");
-            Error::BadServerResponse("Timeout waiting for server response")
+            warn!("Timeout after 300 seconds waiting for server response of {destination}");
+            Error::BadServerResponse("Timeout after 300 seconds waiting for server response")
         })?;
         drop(permit);