diff --git a/rust-toolchain b/rust-toolchain
index 21998d3c2d9ec6777d9a65749826f4b33972abfd..5a5c7211dc68eef95f4a70b06921bde691afe888 100644
--- a/rust-toolchain
+++ b/rust-toolchain
@@ -1 +1 @@
-1.47.0
+1.50.0
diff --git a/rustfmt.toml b/rustfmt.toml
index e86028b10d6146c6e1ac232f0378dbf8d689bbc6..739b454f2ba16206461a1a219dd118c097120d8d 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -1 +1,2 @@
+unstable_features = true
 imports_granularity="Crate"
diff --git a/src/client_server/read_marker.rs b/src/client_server/read_marker.rs
index 20464dbbe712e0f72cf30f1ccec7418e468e66f2..555b7e7211cf476515309ad1a739b60b6cafb4b6 100644
--- a/src/client_server/read_marker.rs
+++ b/src/client_server/read_marker.rs
@@ -3,9 +3,7 @@
 use ruma::{
     api::client::{
         error::ErrorKind,
-        r0::{
-            capabilities::get_capabilities, read_marker::set_read_marker, receipt::create_receipt,
-        },
+        r0::{read_marker::set_read_marker, receipt::create_receipt},
     },
     events::{AnyEphemeralRoomEvent, AnyEvent, EventType},
 };
diff --git a/src/client_server/sync.rs b/src/client_server/sync.rs
index 280632b58b276fec41d66744a6b4c2b9235d4ea8..da2ddf447f62b8646b32f3d2d449097659dc84b5 100644
--- a/src/client_server/sync.rs
+++ b/src/client_server/sync.rs
@@ -559,7 +559,7 @@ pub async fn sync_events_route(
             let pdus = db.rooms.pdus_since(&sender_user, &room_id, since)?;
             let mut room_events = pdus
                 .filter_map(|pdu| pdu.ok()) // Filter out buggy events
-                .take_while(|(pdu_id, pdu)| &since_member.0 != pdu)
+                .take_while(|(_, pdu)| &since_member.0 != pdu)
                 .map(|(_, pdu)| pdu.to_sync_room_event())
                 .collect::<Vec<_>>();
             room_events.push(since_member.0.to_sync_room_event());
diff --git a/src/database/pusher.rs b/src/database/pusher.rs
index b6c6cf49a31d2d668691a2424e07d061c758e4ed..cc421db325667c4365107534dc4262e81ad39010 100644
--- a/src/database/pusher.rs
+++ b/src/database/pusher.rs
@@ -9,17 +9,19 @@
         },
         OutgoingRequest,
     },
-    events::room::{
-        member::{MemberEventContent, MembershipState},
-        message::{MessageEventContent, MessageType, TextMessageEventContent},
-        power_levels::PowerLevelsEventContent,
+    events::{
+        room::{
+            member::{MemberEventContent, MembershipState},
+            message::{MessageEventContent, MessageType, TextMessageEventContent},
+            power_levels::PowerLevelsEventContent,
+        },
+        EventType,
     },
-    events::EventType,
     push::{Action, PushCondition, PushFormat, Ruleset, Tweak},
     uint, UInt, UserId,
 };
 
-use std::{convert::TryFrom, fmt::Debug, time::Duration};
+use std::{convert::TryFrom, fmt::Debug};
 
 #[derive(Debug, Clone)]
 pub struct PushData {
diff --git a/src/database/rooms.rs b/src/database/rooms.rs
index e6c3b93adef16bf36c8a39b52e2491e4afc197de..d494d334070dfa1fbf3dd042f63404786b1c0b24 100644
--- a/src/database/rooms.rs
+++ b/src/database/rooms.rs
@@ -3,7 +3,7 @@
 pub use edus::RoomEdus;
 
 use crate::{pdu::PduBuilder, utils, Database, Error, PduEvent, Result};
-use log::{debug, error, info, warn};
+use log::{error, warn};
 use regex::Regex;
 use ring::digest;
 use ruma::{
diff --git a/src/database/sending.rs b/src/database/sending.rs
index b35f7c5788d1c60990e71ab0308ca52cbe6250b5..50bbc8bb9bada59833258922b28d651228ebbf79 100644
--- a/src/database/sending.rs
+++ b/src/database/sending.rs
@@ -10,7 +10,7 @@
     appservice_server, database::pusher, server_server, utils, Database, Error, PduEvent, Result,
 };
 use federation::transactions::send_transaction_message;
-use log::{debug, error, info, warn};
+use log::{error, info, warn};
 use ring::digest;
 use rocket::futures::stream::{FuturesUnordered, StreamExt};
 use ruma::{
diff --git a/src/error.rs b/src/error.rs
index 8a64e6325bbee6b3907e634ba6c5259be59a2ed2..65c5b4f4e5f3ae2b9debc71d43695c10b37171f6 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -1,18 +1,7 @@
-use std::{
-    collections::HashMap,
-    sync::RwLock,
-    time::{Duration, Instant},
-};
-
 use log::error;
-use ruma::{
-    api::client::{error::ErrorKind, r0::uiaa::UiaaInfo},
-    events::room::message,
-};
+use ruma::api::client::{error::ErrorKind, r0::uiaa::UiaaInfo};
 use thiserror::Error;
 
-use crate::{database::admin::AdminCommand, Database};
-
 #[cfg(feature = "conduit_bin")]
 use {
     crate::RumaResponse,
diff --git a/src/main.rs b/src/main.rs
index 1aa4d54776a2f595c91544840467b4fce4c23c50..2ec3a425f923378c138b644126e728dd4225a4f2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -19,7 +19,6 @@
 use ruma::api::client::error::ErrorKind;
 pub use ruma_wrapper::{ConduitResult, Ruma, RumaResponse};
 
-use log::LevelFilter;
 use rocket::{
     catch, catchers,
     fairing::AdHoc,
diff --git a/src/ruma_wrapper.rs b/src/ruma_wrapper.rs
index 640771ff67426edc639451a3ffd3a781badb8e7d..8c72529cd4fb7a8d58a234c56c1070f1a396dc11 100644
--- a/src/ruma_wrapper.rs
+++ b/src/ruma_wrapper.rs
@@ -1,13 +1,10 @@
 use crate::Error;
 use ruma::{
-    api::{AuthScheme, IncomingRequest, OutgoingRequest},
+    api::OutgoingRequest,
     identifiers::{DeviceId, UserId},
     Outgoing,
 };
-use std::{
-    convert::{TryFrom, TryInto},
-    ops::Deref,
-};
+use std::{convert::TryInto, ops::Deref};
 
 #[cfg(feature = "conduit_bin")]
 use {
@@ -24,6 +21,8 @@
         tokio::io::AsyncReadExt,
         Request, State,
     },
+    ruma::api::{AuthScheme, IncomingRequest},
+    std::convert::TryFrom,
     std::io::Cursor,
 };
 
diff --git a/src/server_server.rs b/src/server_server.rs
index 59befde6202d5654a64c4e81463ce158bed54cda..d43588ab3c0bea22b34a106ec9447c6e53dd1112 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -3,7 +3,7 @@
 use http::header::{HeaderValue, AUTHORIZATION, HOST};
 use log::{debug, error, info, warn};
 use regex::Regex;
-use rocket::{get, post, put, response::content::Json, State};
+use rocket::{response::content::Json, State};
 use ruma::{
     api::{
         client::error::ErrorKind,
@@ -28,7 +28,7 @@
 use state_res::{Event, EventMap, StateMap};
 use std::{
     collections::{BTreeMap, BTreeSet, HashMap},
-    convert::{TryFrom, TryInto},
+    convert::TryFrom,
     fmt::Debug,
     future::Future,
     net::{IpAddr, SocketAddr},
@@ -38,6 +38,9 @@
     time::{Duration, SystemTime},
 };
 
+#[cfg(feature = "conduit_bin")]
+use rocket::{get, post, put};
+
 #[tracing::instrument(skip(globals))]
 pub async fn send_request<T: OutgoingRequest>(
     globals: &crate::database::globals::Globals,