diff --git a/Cargo.toml b/Cargo.toml
index 0380c93fe21f2ef6ccc551f760220ccdf1801684..946080e4c94533b5c4ef3c04826e16d82c74e2a5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -282,6 +282,7 @@ filetype_is_file = "warn"
 float_cmp_const = "warn"
 format_push_string = "warn"
 impl_trait_in_params = "warn"
+ref_to_mut = "warn"
 # let_underscore_untyped = "warn"
 lossy_float_literal = "warn"
 mem_forget = "warn"
@@ -290,7 +291,9 @@ missing_assert_message = "warn"
 # multiple_inherent_impl = "warn"
 mutex_atomic = "warn"
 # same_name_method = "warn"
-# semicolon_outside_block = "warn"
+semicolon_outside_block = "warn"
+fn_to_numeric_cast = "warn"
+fn_to_numeric_cast_with_truncation = "warn"
 string_lit_chars_any = "warn"
 suspicious_xor_used_as_pow = "warn"
 try_err = "warn"
@@ -298,6 +301,10 @@ unnecessary_safety_comment = "warn"
 unnecessary_safety_doc = "warn"
 unnecessary_self_imports = "warn"
 verbose_file_reads = "warn"
+# cast_precision_loss = "warn"
+cast_possible_wrap = "warn"
+# cast_possible_truncation = "warn"
+redundant_closure_for_method_calls = "warn"
 
 # not in rust 1.75.0 (breaks CI)
 # infinite_loop = "warn"
diff --git a/src/api/appservice_server.rs b/src/api/appservice_server.rs
index e4255e5d2570ecde52244509610e3d1de2886868..cc50be192b5214b98036e59b40c237519a92362a 100644
--- a/src/api/appservice_server.rs
+++ b/src/api/appservice_server.rs
@@ -30,7 +30,7 @@ pub(crate) async fn send_request<T>(
                 Error::BadServerResponse("Invalid destination")
             })
             .unwrap()
-            .map(|body| body.freeze());
+            .map(bytes::BytesMut::freeze);
 
         let mut parts = http_request.uri().clone().into_parts();
         let old_path_and_query = parts.path_and_query.unwrap().as_str().to_owned();
diff --git a/src/api/client_server/account.rs b/src/api/client_server/account.rs
index 6d0f053ed59d87d3d7bcf04ba172b67f66018731..f77ce428b06a05d5880a8f94a88e9486dfdc3373 100644
--- a/src/api/client_server/account.rs
+++ b/src/api/client_server/account.rs
@@ -174,7 +174,7 @@ pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<registe
                 stages: vec![AuthType::RegistrationToken],
             }],
             completed: Vec::new(),
-            params: Default::default(),
+            params: Box::default(),
             session: None,
             auth_error: None,
         };
@@ -186,7 +186,7 @@ pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<registe
                 stages: vec![AuthType::Dummy],
             }],
             completed: Vec::new(),
-            params: Default::default(),
+            params: Box::default(),
             session: None,
             auth_error: None,
         };
@@ -352,7 +352,7 @@ pub async fn change_password_route(
             stages: vec![AuthType::Password],
         }],
         completed: Vec::new(),
-        params: Default::default(),
+        params: Box::default(),
         session: None,
         auth_error: None,
     };
@@ -385,7 +385,7 @@ pub async fn change_password_route(
         for id in services()
             .users
             .all_device_ids(sender_user)
-            .filter_map(|id| id.ok())
+            .filter_map(std::result::Result::ok)
             .filter(|id| id != sender_device)
         {
             services().users.remove_device(sender_user, &id)?;
@@ -409,7 +409,7 @@ pub async fn change_password_route(
 /// Note: Also works for Application Services
 pub async fn whoami_route(body: Ruma<whoami::v3::Request>) -> Result<whoami::v3::Response> {
     let sender_user = body.sender_user.as_ref().expect("user is authenticated");
-    let device_id = body.sender_device.as_ref().cloned();
+    let device_id = body.sender_device.clone();
 
     Ok(whoami::v3::Response {
         user_id: sender_user.clone(),
@@ -439,7 +439,7 @@ pub async fn deactivate_route(
             stages: vec![AuthType::Password],
         }],
         completed: Vec::new(),
-        params: Default::default(),
+        params: Box::default(),
         session: None,
         auth_error: None,
     };
diff --git a/src/api/client_server/alias.rs b/src/api/client_server/alias.rs
index 1a236449b65737a622173aace85f7fa7bb7f37bf..230a23daefd3890d093212fa2e2933b2c1f02cd1 100644
--- a/src/api/client_server/alias.rs
+++ b/src/api/client_server/alias.rs
@@ -124,7 +124,7 @@ pub(crate) async fn get_alias_helper(
             .send_federation_request(
                 room_alias.server_name(),
                 federation::query::get_room_information::v1::Request {
-                    room_alias: room_alias.to_owned(),
+                    room_alias: room_alias.clone(),
                 },
             )
             .await?;
@@ -138,7 +138,7 @@ pub(crate) async fn get_alias_helper(
             .rooms
             .state_cache
             .room_servers(&room_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
         {
             servers.push(extra_servers);
         }
@@ -224,7 +224,7 @@ pub(crate) async fn get_alias_helper(
         .rooms
         .state_cache
         .room_servers(&room_id)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
     {
         servers.push(extra_servers);
     }
diff --git a/src/api/client_server/backup.rs b/src/api/client_server/backup.rs
index 115cba7cb3c56a6e077aad414d0c347d047ac585..8bbe3ef1d2a8c92329f2cc3431df300b11a798cb 100644
--- a/src/api/client_server/backup.rs
+++ b/src/api/client_server/backup.rs
@@ -86,7 +86,7 @@ pub async fn get_backup_info_route(
         etag: services()
             .key_backups
             .get_etag(sender_user, &body.version)?,
-        version: body.version.to_owned(),
+        version: body.version.clone(),
     })
 }
 
@@ -139,7 +139,7 @@ pub async fn add_backup_keys_route(
                 room_id,
                 session_id,
                 key_data,
-            )?
+            )?;
         }
     }
 
@@ -185,7 +185,7 @@ pub async fn add_backup_keys_for_room_route(
             &body.room_id,
             session_id,
             key_data,
-        )?
+        )?;
     }
 
     Ok(add_backup_keys_for_room::v3::Response {
diff --git a/src/api/client_server/context.rs b/src/api/client_server/context.rs
index 8e193e6b0873cd9cdf5c7217df4b775210d95a25..e828795fed86f4d22152355132a769a524a49947 100644
--- a/src/api/client_server/context.rs
+++ b/src/api/client_server/context.rs
@@ -22,7 +22,7 @@ pub async fn get_context_route(
         LazyLoadOptions::Enabled {
             include_redundant_members,
         } => (true, *include_redundant_members),
-        _ => (false, false),
+        LazyLoadOptions::Disabled => (false, false),
     };
 
     let mut lazy_loaded = HashSet::new();
@@ -79,7 +79,7 @@ pub async fn get_context_route(
         .timeline
         .pdus_until(sender_user, &room_id, base_token)?
         .take(limit / 2)
-        .filter_map(|r| r.ok()) // Remove buggy events
+        .filter_map(std::result::Result::ok) // Remove buggy events
         .filter(|(_, pdu)| {
             services()
                 .rooms
@@ -116,7 +116,7 @@ pub async fn get_context_route(
         .timeline
         .pdus_after(sender_user, &room_id, base_token)?
         .take(limit / 2)
-        .filter_map(|r| r.ok()) // Remove buggy events
+        .filter_map(std::result::Result::ok) // Remove buggy events
         .filter(|(_, pdu)| {
             services()
                 .rooms
diff --git a/src/api/client_server/device.rs b/src/api/client_server/device.rs
index aba061b20e6473fec62c5493f18548a3c5714a2c..df9b0c3fb8c93247a4f6701a6edcb89991ef1d3b 100644
--- a/src/api/client_server/device.rs
+++ b/src/api/client_server/device.rs
@@ -18,7 +18,7 @@ pub async fn get_devices_route(
     let devices: Vec<device::Device> = services()
         .users
         .all_devices_metadata(sender_user)
-        .filter_map(|r| r.ok()) // Filter out buggy devices
+        .filter_map(std::result::Result::ok) // Filter out buggy devices
         .collect();
 
     Ok(get_devices::v3::Response { devices })
@@ -83,7 +83,7 @@ pub async fn delete_device_route(
             stages: vec![AuthType::Password],
         }],
         completed: Vec::new(),
-        params: Default::default(),
+        params: Box::default(),
         session: None,
         auth_error: None,
     };
@@ -137,7 +137,7 @@ pub async fn delete_devices_route(
             stages: vec![AuthType::Password],
         }],
         completed: Vec::new(),
-        params: Default::default(),
+        params: Box::default(),
         session: None,
         auth_error: None,
     };
@@ -162,7 +162,7 @@ pub async fn delete_devices_route(
     }
 
     for device_id in &body.devices {
-        services().users.remove_device(sender_user, device_id)?
+        services().users.remove_device(sender_user, device_id)?;
     }
 
     Ok(delete_devices::v3::Response {})
diff --git a/src/api/client_server/keys.rs b/src/api/client_server/keys.rs
index bc82bd9899efe4ee76b42a887a9ae8ba380b3750..b57e28a87064024cb852d2855f8b2e8472197e9d 100644
--- a/src/api/client_server/keys.rs
+++ b/src/api/client_server/keys.rs
@@ -111,7 +111,7 @@ pub async fn upload_signing_keys_route(
             stages: vec![AuthType::Password],
         }],
         completed: Vec::new(),
-        params: Default::default(),
+        params: Box::default(),
         session: None,
         auth_error: None,
     };
@@ -230,14 +230,14 @@ pub async fn get_key_changes_route(
                         .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Invalid `to`."))?,
                 ),
             )
-            .filter_map(|r| r.ok()),
+            .filter_map(std::result::Result::ok),
     );
 
     for room_id in services()
         .rooms
         .state_cache
         .rooms_joined(sender_user)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
     {
         device_list_updates.extend(
             services()
@@ -251,7 +251,7 @@ pub async fn get_key_changes_route(
                         Error::BadRequest(ErrorKind::InvalidParam, "Invalid `to`.")
                     })?),
                 )
-                .filter_map(|r| r.ok()),
+                .filter_map(std::result::Result::ok),
         );
     }
     Ok(get_key_changes::v3::Response {
diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs
index d8e5e7fb50e9c808410314d0a3f92a42cb8d4c77..20fabbcf49feb3a59b9f58f20d230736d9af83be 100644
--- a/src/api/client_server/media.rs
+++ b/src/api/client_server/media.rs
@@ -270,7 +270,7 @@ pub async fn get_content_thumbnail_route(
         if services()
             .globals
             .prevent_media_downloads_from()
-            .contains(&body.server_name.to_owned())
+            .contains(&body.server_name.clone())
         {
             info!("Received request for remote media `{}` but server is in our media server blocklist. Returning 404.", mxc);
             return Err(Error::BadRequest(ErrorKind::NotFound, "Media not found."));
diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs
index 3d2ef5e768b5cdeadebc6448aaf4003631e011f3..92f6878b8093b3fcfd84aa75f9985907f509d6e7 100644
--- a/src/api/client_server/membership.rs
+++ b/src/api/client_server/membership.rs
@@ -68,7 +68,7 @@ pub async fn join_room_by_id_route(
             .iter()
             .filter_map(|event| serde_json::from_str(event.json().get()).ok())
             .filter_map(|event: serde_json::Value| event.get("sender").cloned())
-            .filter_map(|sender| sender.as_str().map(|s| s.to_owned()))
+            .filter_map(|sender| sender.as_str().map(std::borrow::ToOwned::to_owned))
             .filter_map(|sender| UserId::parse(sender).ok())
             .map(|user| user.server_name().to_owned()),
     );
@@ -123,7 +123,7 @@ pub async fn join_room_by_id_or_alias_route(
                     .iter()
                     .filter_map(|event| serde_json::from_str(event.json().get()).ok())
                     .filter_map(|event: serde_json::Value| event.get("sender").cloned())
-                    .filter_map(|sender| sender.as_str().map(|s| s.to_owned()))
+                    .filter_map(|sender| sender.as_str().map(std::borrow::ToOwned::to_owned))
                     .filter_map(|sender| UserId::parse(sender).ok())
                     .map(|user| user.server_name().to_owned()),
             );
@@ -441,7 +441,7 @@ pub async fn joined_rooms_route(
             .rooms
             .state_cache
             .rooms_joined(sender_user)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .collect(),
     })
 }
@@ -507,7 +507,7 @@ pub async fn joined_members_route(
         .rooms
         .state_cache
         .room_members(&body.room_id)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
     {
         let display_name = services().users.displayname(&user_id)?;
         let avatar_url = services().users.avatar_url(&user_id)?;
@@ -963,7 +963,7 @@ async fn join_room_by_id_helper(
                             .rooms
                             .state_cache
                             .room_members(restriction_room_id)
-                            .filter_map(|r| r.ok())
+                            .filter_map(std::result::Result::ok)
                             .find(|uid| uid.server_name() == services().globals.server_name())
                     });
                 Some(authorized_user)
@@ -1384,7 +1384,7 @@ pub(crate) async fn invite_helper(
             .rooms
             .state_cache
             .room_servers(room_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .filter(|server| &**server != services().globals.server_name());
 
         services().sending.send_pdu(servers, &pdu_id)?;
@@ -1593,7 +1593,7 @@ async fn remote_leave_room(user_id: &UserId, room_id: &RoomId) -> Result<()> {
         .iter()
         .filter_map(|event| serde_json::from_str(event.json().get()).ok())
         .filter_map(|event: serde_json::Value| event.get("sender").cloned())
-        .filter_map(|sender| sender.as_str().map(|s| s.to_owned()))
+        .filter_map(|sender| sender.as_str().map(std::borrow::ToOwned::to_owned))
         .filter_map(|sender| UserId::parse(sender).ok())
         .map(|user| user.server_name().to_owned())
         .collect();
diff --git a/src/api/client_server/message.rs b/src/api/client_server/message.rs
index 32a2100385a582e198aca6ceecbd703b73d6d720..156e1f5ce4116399f0eec2791d1ab073499f0c7e 100644
--- a/src/api/client_server/message.rs
+++ b/src/api/client_server/message.rs
@@ -199,7 +199,7 @@ pub async fn get_message_events_route(
                 .timeline
                 .pdus_after(sender_user, &body.room_id, from)?
                 .take(limit)
-                .filter_map(|r| r.ok()) // Filter out buggy events
+                .filter_map(std::result::Result::ok) // Filter out buggy events
                 .filter(|(_, pdu)| {
                     services()
                         .rooms
@@ -248,7 +248,7 @@ pub async fn get_message_events_route(
                 .timeline
                 .pdus_until(sender_user, &body.room_id, from)?
                 .take(limit)
-                .filter_map(|r| r.ok()) // Filter out buggy events
+                .filter_map(std::result::Result::ok) // Filter out buggy events
                 .filter(|(_, pdu)| {
                     services()
                         .rooms
diff --git a/src/api/client_server/profile.rs b/src/api/client_server/profile.rs
index e80459f1cfadb1051a70b0c15748aca9d26efadb..fc4eff66ba9713407d9687ade6403f2e57d3a811 100644
--- a/src/api/client_server/profile.rs
+++ b/src/api/client_server/profile.rs
@@ -35,7 +35,7 @@ pub async fn set_displayname_route(
         .rooms
         .state_cache
         .rooms_joined(sender_user)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .map(|room_id| {
             Ok::<_, Error>((
                 PduBuilder {
@@ -70,7 +70,7 @@ pub async fn set_displayname_route(
                 room_id,
             ))
         })
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .collect();
 
     for (pdu_builder, room_id) in all_rooms_joined {
@@ -182,7 +182,7 @@ pub async fn set_avatar_url_route(
         .rooms
         .state_cache
         .rooms_joined(sender_user)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .map(|room_id| {
             Ok::<_, Error>((
                 PduBuilder {
@@ -217,7 +217,7 @@ pub async fn set_avatar_url_route(
                 room_id,
             ))
         })
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .collect();
 
     for (pdu_builder, room_id) in all_joined_rooms {
diff --git a/src/api/client_server/push.rs b/src/api/client_server/push.rs
index 727686627a2835365c38e478e0f591b5d80adbce..d2c35668e776392e684f5e0274ac2c0e91c5cf8a 100644
--- a/src/api/client_server/push.rs
+++ b/src/api/client_server/push.rs
@@ -281,7 +281,7 @@ pub async fn get_pushrule_enabled_route(
     let global = account_data.content.global;
     let enabled = global
         .get(body.kind.clone(), &body.rule_id)
-        .map(|r| r.enabled())
+        .map(ruma::push::AnyPushRuleRef::enabled)
         .ok_or(Error::BadRequest(
             ErrorKind::NotFound,
             "Push rule not found.",
diff --git a/src/api/client_server/read_marker.rs b/src/api/client_server/read_marker.rs
index a5553d25b838d430e55089b5bf320462fb1adfca..d01a3a7fb6583a9d485e9f851a07bbf1bed8e547 100644
--- a/src/api/client_server/read_marker.rs
+++ b/src/api/client_server/read_marker.rs
@@ -140,7 +140,7 @@ pub async fn create_receipt_route(
             receipts.insert(ReceiptType::Read, user_receipts);
 
             let mut receipt_content = BTreeMap::new();
-            receipt_content.insert(body.event_id.to_owned(), receipts);
+            receipt_content.insert(body.event_id.clone(), receipts);
 
             services().rooms.edus.read_receipt.readreceipt_update(
                 sender_user,
diff --git a/src/api/client_server/report.rs b/src/api/client_server/report.rs
index 4d0921e7648c338f5e8327d014edcb9a9d4b46a8..e424449b15d98157dc907426d6b2abbf207093b3 100644
--- a/src/api/client_server/report.rs
+++ b/src/api/client_server/report.rs
@@ -46,7 +46,7 @@ pub async fn report_event_route(
         .rooms
         .state_cache
         .room_members(&pdu.room_id)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .any(|user_id| user_id == *sender_user)
     {
         return Err(Error::BadRequest(
@@ -85,7 +85,7 @@ pub async fn report_event_route(
                 sender_user.to_owned(),
                 pdu.event_id,
                 pdu.room_id,
-                pdu.sender.to_owned(),
+                pdu.sender.clone(),
                 body.score.unwrap_or_else(|| ruma::Int::from(0)),
                 body.reason.as_deref().unwrap_or("")
             ),
@@ -97,9 +97,9 @@ pub async fn report_event_route(
                 Report Info<ul><li>Report Score: {4}</li><li>Report Reason: {5}</li></ul></li>\
                 </ul></details>",
             sender_user.to_owned(),
-            pdu.event_id.to_owned(),
-            pdu.room_id.to_owned(),
-            pdu.sender.to_owned(),
+            pdu.event_id.clone(),
+            pdu.room_id.clone(),
+            pdu.sender.clone(),
             body.score.unwrap_or_else(|| ruma::Int::from(0)),
             HtmlEscape(body.reason.as_deref().unwrap_or(""))
         ),
diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs
index 4d7a0c0c99b9f7b22ede861342b61bea836cdeb8..c888a90e2ac2052118f24a8c334bc1e36a43ce9e 100644
--- a/src/api/client_server/room.rs
+++ b/src/api/client_server/room.rs
@@ -122,7 +122,7 @@ pub async fn create_room_route(
             None => room_id = RoomId::new(services().globals.server_name()),
         }
     } else {
-        room_id = RoomId::new(services().globals.server_name())
+        room_id = RoomId::new(services().globals.server_name());
     }
 
     // check if room ID doesn't already exist instead of erroring on auth check
@@ -380,7 +380,6 @@ pub async fn create_room_route(
 
     // Figure out preset. We need it for preset specific events
     let preset = body.preset.clone().unwrap_or(match &body.visibility {
-        room::Visibility::Private => RoomPreset::PrivateChat,
         room::Visibility::Public => RoomPreset::PublicChat,
         _ => RoomPreset::PrivateChat, // Room visibility should not be custom
     });
@@ -672,7 +671,7 @@ pub async fn get_room_aliases_route(
             .rooms
             .alias
             .local_aliases_for_room(&body.room_id)
-            .filter_map(|a| a.ok())
+            .filter_map(std::result::Result::ok)
             .collect(),
     })
 }
@@ -932,7 +931,7 @@ pub async fn upgrade_room_route(
         .rooms
         .alias
         .local_aliases_for_room(&body.room_id)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
     {
         services()
             .rooms
diff --git a/src/api/client_server/search.rs b/src/api/client_server/search.rs
index e9fac365de9986c2884a2b0a1fd9b30ab9f03151..43e4c9f42bd7a5b437b79729b5d958f17abd3ae4 100644
--- a/src/api/client_server/search.rs
+++ b/src/api/client_server/search.rs
@@ -27,7 +27,7 @@ pub async fn search_events_route(
             .rooms
             .state_cache
             .rooms_joined(sender_user)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .collect()
     });
 
@@ -110,7 +110,7 @@ pub async fn search_events_route(
                 result: Some(result),
             })
         })
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .skip(skip)
         .take(limit)
         .collect();
diff --git a/src/api/client_server/session.rs b/src/api/client_server/session.rs
index a5181d5906bb883ccc47ceada7b86e909ae96d2a..56250a0cbdc736f84a4099042b0643044f1e442a 100644
--- a/src/api/client_server/session.rs
+++ b/src/api/client_server/session.rs
@@ -5,7 +5,10 @@
     api::client::{
         error::ErrorKind,
         session::{
-            get_login_types,
+            get_login_types::{
+                self,
+                v3::{ApplicationServiceLoginType, PasswordLoginType},
+            },
             login::{
                 self,
                 v3::{DiscoveryInfo, HomeserverInfo},
@@ -33,8 +36,8 @@ pub async fn get_login_types_route(
     _body: Ruma<get_login_types::v3::Request>,
 ) -> Result<get_login_types::v3::Response> {
     Ok(get_login_types::v3::Response::new(vec![
-        get_login_types::v3::LoginType::Password(Default::default()),
-        get_login_types::v3::LoginType::ApplicationService(Default::default()),
+        get_login_types::v3::LoginType::Password(PasswordLoginType::default()),
+        get_login_types::v3::LoginType::ApplicationService(ApplicationServiceLoginType::default()),
     ]))
 }
 
diff --git a/src/api/client_server/state.rs b/src/api/client_server/state.rs
index ebc41a0f235fab22a54b99605239427b5097bd80..1d2f5e9b8f944c3a7ae1791c410aa55fa005d81e 100644
--- a/src/api/client_server/state.rs
+++ b/src/api/client_server/state.rs
@@ -31,7 +31,7 @@ pub async fn send_state_event_for_key_route(
         &body.room_id,
         &body.event_type,
         &body.body.body, // Yes, I hate it too
-        body.state_key.to_owned(),
+        body.state_key.clone(),
     )
     .await?;
 
@@ -64,7 +64,7 @@ pub async fn send_state_event_for_empty_key_route(
         &body.room_id,
         &body.event_type.to_string().into(),
         &body.body.body,
-        body.state_key.to_owned(),
+        body.state_key.clone(),
     )
     .await?;
 
diff --git a/src/api/client_server/sync.rs b/src/api/client_server/sync.rs
index 9216fb8446ab7b1676c0381395fa3f399596e477..5ec6c26ca527c96ebb22d50488eff68461dffb5d 100644
--- a/src/api/client_server/sync.rs
+++ b/src/api/client_server/sync.rs
@@ -83,7 +83,7 @@ pub async fn sync_events_route(
         Entry::Vacant(v) => {
             let (tx, rx) = tokio::sync::watch::channel(None);
 
-            v.insert((body.since.to_owned(), rx.clone()));
+            v.insert((body.since.clone(), rx.clone()));
 
             tokio::spawn(sync_helper_wrapper(
                 sender_user.clone(),
@@ -202,7 +202,7 @@ async fn sync_helper(
         LazyLoadOptions::Enabled {
             include_redundant_members: redundant,
         } => (true, redundant),
-        _ => (false, false),
+        LazyLoadOptions::Disabled => (false, false),
     };
 
     let full_state = body.full_state;
@@ -225,7 +225,7 @@ async fn sync_helper(
         services()
             .users
             .keys_changed(sender_user.as_ref(), since, None)
-            .filter_map(|r| r.ok()),
+            .filter_map(std::result::Result::ok),
     );
 
     let all_joined_rooms = services()
@@ -285,7 +285,7 @@ async fn sync_helper(
             );
             let insert_lock = mutex_insert.lock().await;
             drop(insert_lock);
-        }
+        };
 
         let left_count = services()
             .rooms
@@ -417,7 +417,7 @@ async fn sync_helper(
             );
             let insert_lock = mutex_insert.lock().await;
             drop(insert_lock);
-        }
+        };
 
         let invite_count = services()
             .rooms
@@ -444,7 +444,7 @@ async fn sync_helper(
             .rooms
             .user
             .get_shared_rooms(vec![sender_user.clone(), user_id.clone()])?
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .filter_map(|other_room_id| {
                 Some(
                     services()
@@ -604,7 +604,7 @@ async fn load_joined_room(
         );
         let insert_lock = mutex_insert.lock().await;
         drop(insert_lock);
-    }
+    };
 
     let (timeline_pdus, limited) = load_timeline(sender_user, room_id, sincecount, 10)?;
 
@@ -671,7 +671,7 @@ async fn load_joined_room(
                         .rooms
                         .timeline
                         .all_pdus(sender_user, room_id)?
-                        .filter_map(|pdu| pdu.ok()) // Ignore all broken pdus
+                        .filter_map(std::result::Result::ok) // Ignore all broken pdus
                         .filter(|(_, pdu)| pdu.kind == TimelineEventType::RoomMember)
                         .map(|(_, pdu)| {
                             let content: RoomMemberEventContent =
@@ -706,7 +706,7 @@ async fn load_joined_room(
                             }
                         })
                         // Filter out buggy users
-                        .filter_map(|u| u.ok())
+                        .filter_map(std::result::Result::ok)
                         // Filter for possible heroes
                         .flatten()
                     {
@@ -1011,7 +1011,7 @@ async fn load_joined_room(
         services()
             .users
             .keys_changed(room_id.as_ref(), since, None)
-            .filter_map(|r| r.ok()),
+            .filter_map(std::result::Result::ok),
     );
 
     let notification_count = if send_notification_counts {
@@ -1062,7 +1062,7 @@ async fn load_joined_room(
         .edus
         .read_receipt
         .readreceipts_since(room_id, since)
-        .filter_map(|r| r.ok()) // Filter out buggy events
+        .filter_map(std::result::Result::ok) // Filter out buggy events
         .map(|(_, _, v)| v)
         .collect();
 
@@ -1176,7 +1176,7 @@ fn share_encrypted_room(
         .rooms
         .user
         .get_shared_rooms(vec![sender_user.to_owned(), user_id.to_owned()])?
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .filter(|room_id| room_id != ignore_room)
         .filter_map(|other_room_id| {
             Some(
@@ -1214,7 +1214,7 @@ pub async fn sync_events_v4_route(
                 sender_user.clone(),
                 sender_device.clone(),
                 conn_id.clone(),
-            )
+            );
         }
     }
 
@@ -1229,7 +1229,7 @@ pub async fn sync_events_v4_route(
         .rooms
         .state_cache
         .rooms_joined(&sender_user)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .collect::<Vec<_>>();
 
     if body.extensions.to_device.enabled.unwrap_or(false) {
@@ -1248,7 +1248,7 @@ pub async fn sync_events_v4_route(
             services()
                 .users
                 .keys_changed(sender_user.as_ref(), globalsince, None)
-                .filter_map(|r| r.ok()),
+                .filter_map(std::result::Result::ok),
         );
 
         for room_id in &all_joined_rooms {
@@ -1393,7 +1393,7 @@ pub async fn sync_events_v4_route(
                 services()
                     .users
                     .keys_changed(room_id.as_ref(), globalsince, None)
-                    .filter_map(|r| r.ok()),
+                    .filter_map(std::result::Result::ok),
             );
         }
         for user_id in left_encrypted_users {
@@ -1401,7 +1401,7 @@ pub async fn sync_events_v4_route(
                 .rooms
                 .user
                 .get_shared_rooms(vec![sender_user.clone(), user_id.clone()])?
-                .filter_map(|r| r.ok())
+                .filter_map(std::result::Result::ok)
                 .filter_map(|other_room_id| {
                     Some(
                         services()
@@ -1585,7 +1585,7 @@ pub async fn sync_events_v4_route(
                     .state_accessor
                     .room_state_get(room_id, &state.0, &state.1)
             })
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .flatten()
             .map(|state| state.to_sync_state_event())
             .collect();
@@ -1595,7 +1595,7 @@ pub async fn sync_events_v4_route(
             .rooms
             .state_cache
             .room_members(room_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .filter(|member| member != &sender_user)
             .map(|member| {
                 Ok::<_, Error>(
@@ -1613,7 +1613,7 @@ pub async fn sync_events_v4_route(
                         }),
                 )
             })
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .flatten()
             .take(5)
             .collect::<Vec<_>>();
diff --git a/src/api/client_server/threads.rs b/src/api/client_server/threads.rs
index a095b4209842c73c1bfac16f01c2a1e4ebd608cb..e1731060e6d9f7b222abef155169cf1f81a6f72e 100644
--- a/src/api/client_server/threads.rs
+++ b/src/api/client_server/threads.rs
@@ -27,7 +27,7 @@ pub async fn get_threads_route(
         .threads
         .threads_until(sender_user, &body.room_id, from, &body.include)?
         .take(limit)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .filter(|(_, pdu)| {
             services()
                 .rooms
diff --git a/src/api/client_server/to_device.rs b/src/api/client_server/to_device.rs
index 31590fc76b886a4d758ed06a14103b8fd4ac8679..bce893edd9dffb055fd8ea4409474abc21d6f9ad 100644
--- a/src/api/client_server/to_device.rs
+++ b/src/api/client_server/to_device.rs
@@ -63,7 +63,7 @@ pub async fn send_event_to_device_route(
                         event.deserialize_as().map_err(|_| {
                             Error::BadRequest(ErrorKind::InvalidParam, "Event is invalid")
                         })?,
-                    )?
+                    )?;
                 }
 
                 DeviceIdOrAllDevices::AllDevices => {
diff --git a/src/api/client_server/user_directory.rs b/src/api/client_server/user_directory.rs
index c30bac5162d9a4efc4db4eef22fd2350b9d4128e..f648cb7b61af5bfcc7db66437a13ad17ef5166e4 100644
--- a/src/api/client_server/user_directory.rs
+++ b/src/api/client_server/user_directory.rs
@@ -52,7 +52,7 @@ pub async fn search_users_route(
             .rooms
             .state_cache
             .rooms_joined(&user_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .any(|room| {
                 services()
                     .rooms
diff --git a/src/api/ruma_wrapper/axum.rs b/src/api/ruma_wrapper/axum.rs
index 57348a73f44e1899a9aee253ee6e6039217e0850..1117874c8c5b2f8c4532af95360d264ffda19ee5 100644
--- a/src/api/ruma_wrapper/axum.rs
+++ b/src/api/ruma_wrapper/axum.rs
@@ -215,7 +215,7 @@ async fn from_request(req: Request<B>, _state: &S) -> Result<Self, Self::Rejecti
                             .event_handler
                             .fetch_signing_keys_for_server(
                                 &x_matrix.origin,
-                                vec![x_matrix.key.to_owned()],
+                                vec![x_matrix.key.clone()],
                             )
                             .await;
 
diff --git a/src/api/server_server.rs b/src/api/server_server.rs
index 73246574c615db69d9bec484fb80a64615abcf7c..e4f8cbb1f74e04cb9f7a20702bd90d9725ba9a00 100644
--- a/src/api/server_server.rs
+++ b/src/api/server_server.rs
@@ -866,7 +866,7 @@ pub async fn send_transaction_message_route(
             warn!(
                 "Could not fetch all signatures for PDUs from {}: {:?}",
                 sender_servername, e
-            )
+            );
         });
 
     for (event_id, value, room_id) in parsed_pdus {
@@ -876,7 +876,7 @@ pub async fn send_transaction_message_route(
                 .roomid_mutex_federation
                 .write()
                 .unwrap()
-                .entry(room_id.to_owned())
+                .entry(room_id.clone())
                 .or_default(),
         );
         let mutex_lock = mutex.lock().await;
@@ -1037,7 +1037,7 @@ pub async fn send_transaction_message_route(
                                             "Event is invalid",
                                         )
                                     })?,
-                                )?
+                                )?;
                             }
 
                             DeviceIdOrAllDevices::AllDevices => {
@@ -1214,7 +1214,7 @@ pub async fn get_backfill_route(
         .take(limit.try_into().unwrap());
 
     let events = all_events
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .filter(|(_, e)| {
             matches!(
                 services().rooms.state_accessor.server_can_see_event(
@@ -1562,7 +1562,7 @@ pub async fn create_join_event_template_route(
             .roomid_mutex_state
             .write()
             .unwrap()
-            .entry(body.room_id.to_owned())
+            .entry(body.room_id.clone())
             .or_default(),
     );
     let state_lock = mutex_state.lock().await;
@@ -1768,7 +1768,7 @@ async fn create_join_event(
         .rooms
         .state_cache
         .room_servers(room_id)
-        .filter_map(|r| r.ok())
+        .filter_map(std::result::Result::ok)
         .filter(|server| &**server != services().globals.server_name());
 
     services().sending.send_pdu(servers, &pdu_id)?;
@@ -1986,7 +1986,7 @@ pub async fn get_devices_route(
         devices: services()
             .users
             .all_devices_metadata(&body.user_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .filter_map(|metadata| {
                 let device_id_string = metadata.device_id.as_str().to_owned();
                 let device_display_name = match services().globals.allow_device_name_federation() {
@@ -2062,11 +2062,11 @@ pub async fn get_profile_information_route(
 
     match &body.field {
         Some(ProfileField::DisplayName) => {
-            displayname = services().users.displayname(&body.user_id)?
+            displayname = services().users.displayname(&body.user_id)?;
         }
         Some(ProfileField::AvatarUrl) => {
             avatar_url = services().users.avatar_url(&body.user_id)?;
-            blurhash = services().users.blurhash(&body.user_id)?
+            blurhash = services().users.blurhash(&body.user_id)?;
         }
         // TODO: what to do with custom
         Some(_) => {}
diff --git a/src/config/proxy.rs b/src/config/proxy.rs
index 95640ab4a8fe77be291f6178e5b7652e0e058ef2..80eee6afe6c67ea4f30e542bf4b593ab0698cc82 100644
--- a/src/config/proxy.rs
+++ b/src/config/proxy.rs
@@ -66,7 +66,7 @@ pub fn for_url(&self, url: &Url) -> Option<&Url> {
         let mut excluded_because = None; // most specific reason it was excluded
         if self.include.is_empty() {
             // treat empty include list as `*`
-            included_because = Some(&WildCardedDomain::WildCard)
+            included_because = Some(&WildCardedDomain::WildCard);
         }
         for wc_domain in &self.include {
             if wc_domain.matches(domain) {
diff --git a/src/database/abstraction/rocksdb.rs b/src/database/abstraction/rocksdb.rs
index 443d16d050317f36f15a515ddc8c3ea420dbbc0d..d51ccefdc3d8a79fd8e7a8cc2d51a936ee88d9a7 100644
--- a/src/database/abstraction/rocksdb.rs
+++ b/src/database/abstraction/rocksdb.rs
@@ -40,7 +40,6 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio
     let rocksdb_log_level = match config.rocksdb_log_level.as_ref() {
         "debug" => Debug,
         "info" => Info,
-        "warn" => Warn,
         "error" => Error,
         "fatal" => Fatal,
         _ => Warn,
@@ -71,7 +70,7 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio
     db_opts.set_block_based_table_factory(&block_based_options);
     db_opts.set_level_compaction_dynamic_level_bytes(true);
     db_opts.create_if_missing(true);
-    db_opts.increase_parallelism(num_cpus::get() as i32);
+    db_opts.increase_parallelism(num_cpus::get().try_into().unwrap_or_default());
     //db_opts.set_max_open_files(config.rocksdb_max_open_files);
     db_opts.set_compression_type(rocksdb::DBCompressionType::Zstd);
     db_opts.set_compaction_style(rocksdb::DBCompactionStyle::Level);
@@ -79,7 +78,7 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio
 
     // https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning
     db_opts.set_max_background_jobs(6);
-    db_opts.set_bytes_per_sync(1048576);
+    db_opts.set_bytes_per_sync(1_048_576);
 
     // https://github.com/facebook/rocksdb/wiki/WAL-Recovery-Modes#ktoleratecorruptedtailrecords
     //
diff --git a/src/database/key_value/account_data.rs b/src/database/key_value/account_data.rs
index daa63901a00faeed9e8395aec3d61b581a8e4e46..4e9da595e6b7acd4c5c4957d82df4ce9d6e6803f 100644
--- a/src/database/key_value/account_data.rs
+++ b/src/database/key_value/account_data.rs
@@ -21,7 +21,7 @@ fn update(
         data: &serde_json::Value,
     ) -> Result<()> {
         let mut prefix = room_id
-            .map(|r| r.to_string())
+            .map(std::string::ToString::to_string)
             .unwrap_or_default()
             .as_bytes()
             .to_vec();
@@ -71,7 +71,7 @@ fn get(
         kind: RoomAccountDataEventType,
     ) -> Result<Option<Box<serde_json::value::RawValue>>> {
         let mut key = room_id
-            .map(|r| r.to_string())
+            .map(std::string::ToString::to_string)
             .unwrap_or_default()
             .as_bytes()
             .to_vec();
@@ -106,7 +106,7 @@ fn changes_since(
         let mut userdata = HashMap::new();
 
         let mut prefix = room_id
-            .map(|r| r.to_string())
+            .map(std::string::ToString::to_string)
             .unwrap_or_default()
             .as_bytes()
             .to_vec();
diff --git a/src/database/key_value/appservice.rs b/src/database/key_value/appservice.rs
index 3243183dabe71353b839d0130e34812f8a7fa234..55206243b1cf8c1e02398c5c8b4de058f1b7be43 100644
--- a/src/database/key_value/appservice.rs
+++ b/src/database/key_value/appservice.rs
@@ -13,7 +13,7 @@ fn register_appservice(&self, yaml: Registration) -> Result<String> {
         self.cached_registrations
             .write()
             .unwrap()
-            .insert(id.to_owned(), yaml.to_owned());
+            .insert(id.to_owned(), yaml.clone());
 
         Ok(id.to_owned())
     }
@@ -67,7 +67,7 @@ fn iter_ids<'a>(&'a self) -> Result<Box<dyn Iterator<Item = Result<String>> + 'a
 
     fn all(&self) -> Result<Vec<(String, Registration)>> {
         self.iter_ids()?
-            .filter_map(|id| id.ok())
+            .filter_map(std::result::Result::ok)
             .map(move |id| {
                 Ok((
                     id.clone(),
diff --git a/src/database/key_value/globals.rs b/src/database/key_value/globals.rs
index 3cc1663bc645043ec636a754a8db89865135a188..b921d822c0afd17baf423640838a16bf8852e59b 100644
--- a/src/database/key_value/globals.rs
+++ b/src/database/key_value/globals.rs
@@ -74,7 +74,7 @@ async fn watch(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> {
             .rooms
             .state_cache
             .rooms_joined(user_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
         {
             let short_roomid = services()
                 .rooms
@@ -134,7 +134,7 @@ async fn watch(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> {
     }
 
     fn cleanup(&self) -> Result<()> {
-        self._db.cleanup()
+        self.db.cleanup()
     }
 
     fn memory_usage(&self) -> String {
@@ -158,7 +158,7 @@ fn memory_usage(&self) -> String {
 appservice_in_room_cache: {appservice_in_room_cache}
 lasttimelinecount_cache: {lasttimelinecount_cache}\n"
         );
-        if let Ok(db_stats) = self._db.memory_usage() {
+        if let Ok(db_stats) = self.db.memory_usage() {
             response += &db_stats;
         }
 
@@ -207,7 +207,7 @@ fn load_keypair(&self) -> Result<Ed25519KeyPair> {
                 self.global.insert(b"keypair", &keypair)?;
                 Ok::<_, Error>(keypair)
             },
-            |s| Ok(s.to_vec()),
+            Ok,
         )?;
 
         let mut parts = keypair_bytes.splitn(2, |&b| b == 0xff);
diff --git a/src/database/key_value/key_backups.rs b/src/database/key_value/key_backups.rs
index 900b700bec7c73cb659e8c356e1f99c2027e4788..a8018938224ee68e76849d258778c40befcbb265 100644
--- a/src/database/key_value/key_backups.rs
+++ b/src/database/key_value/key_backups.rs
@@ -283,7 +283,7 @@ fn get_room(
 
                 Ok::<_, Error>((session_id, key_data))
             })
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .collect())
     }
 
diff --git a/src/database/key_value/media.rs b/src/database/key_value/media.rs
index f901bd55e97b98863de0527665ca54da489b3da5..1d879e724a4c383315e6c67067dcbb7cb69059b2 100644
--- a/src/database/key_value/media.rs
+++ b/src/database/key_value/media.rs
@@ -152,21 +152,21 @@ fn set_url_preview(
         value.extend_from_slice(
             data.title
                 .as_ref()
-                .map(|t| t.as_bytes())
+                .map(std::string::String::as_bytes)
                 .unwrap_or_default(),
         );
         value.push(0xff);
         value.extend_from_slice(
             data.description
                 .as_ref()
-                .map(|d| d.as_bytes())
+                .map(std::string::String::as_bytes)
                 .unwrap_or_default(),
         );
         value.push(0xff);
         value.extend_from_slice(
             data.image
                 .as_ref()
-                .map(|i| i.as_bytes())
+                .map(std::string::String::as_bytes)
                 .unwrap_or_default(),
         );
         value.push(0xff);
diff --git a/src/database/key_value/rooms/alias.rs b/src/database/key_value/rooms/alias.rs
index 0d3e2b10c7e970ce66c8fbeb6494808746a6e4f5..1b16d9a285d6045a7b94e927453c516ae5234cc6 100644
--- a/src/database/key_value/rooms/alias.rs
+++ b/src/database/key_value/rooms/alias.rs
@@ -15,7 +15,7 @@ fn set_alias(&self, alias: &RoomAliasId, room_id: &RoomId) -> Result<()> {
 
     fn remove_alias(&self, alias: &RoomAliasId) -> Result<()> {
         if let Some(room_id) = self.alias_roomid.get(alias.alias().as_bytes())? {
-            let mut prefix = room_id.to_vec();
+            let mut prefix = room_id;
             prefix.push(0xff);
 
             for (key, _) in self.aliasid_alias.scan_prefix(prefix) {
diff --git a/src/database/key_value/rooms/edus/typing.rs b/src/database/key_value/rooms/edus/typing.rs
index 5709192cfb1c8964f0977c4f618258e1aacc1dee..28c066522706ffe591e158d86e9d45dc98fc2fd3 100644
--- a/src/database/key_value/rooms/edus/typing.rs
+++ b/src/database/key_value/rooms/edus/typing.rs
@@ -76,7 +76,7 @@ fn typings_maintain(&self, room_id: &RoomId) -> Result<()> {
                     .map_err(|_| Error::bad_database("RoomTyping has invalid timestamp bytes."))?,
                 ))
             })
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .take_while(|&(_, timestamp)| timestamp < current_timestamp)
         {
             // This is an outdated edu (time > timestamp)
diff --git a/src/database/key_value/rooms/pdu_metadata.rs b/src/database/key_value/rooms/pdu_metadata.rs
index ebfba814b13a59ca31683a438cbb64dbbf95c596..0641f9d8df3a86af9c742fce2279479141859440 100644
--- a/src/database/key_value/rooms/pdu_metadata.rs
+++ b/src/database/key_value/rooms/pdu_metadata.rs
@@ -4,11 +4,8 @@
 
 use crate::{
     database::KeyValueDatabase,
-    service::{
-        self,
-        rooms::timeline::{data::PduData, PduCount},
-    },
-    services, utils, Error, Result,
+    service::{self, rooms::timeline::PduCount},
+    services, utils, Error, PduEvent, Result,
 };
 
 impl service::rooms::pdu_metadata::Data for KeyValueDatabase {
@@ -25,7 +22,7 @@ fn relations_until<'a>(
         shortroomid: u64,
         target: u64,
         until: PduCount,
-    ) -> PduData<'a> {
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
         let prefix = target.to_be_bytes().to_vec();
         let mut current = prefix.clone();
 
diff --git a/src/database/key_value/rooms/short.rs b/src/database/key_value/rooms/short.rs
index 502557a0d3106d41709b0455540d07ab9f9c6f34..408939864bcb2f8bdda27c23e65b13bc7c32b227 100644
--- a/src/database/key_value/rooms/short.rs
+++ b/src/database/key_value/rooms/short.rs
@@ -46,13 +46,13 @@ fn get_shortstatekey(
             return Ok(Some(*short));
         }
 
-        let mut statekey = event_type.to_string().as_bytes().to_vec();
-        statekey.push(0xff);
-        statekey.extend_from_slice(state_key.as_bytes());
+        let mut statekey_vec = event_type.to_string().as_bytes().to_vec();
+        statekey_vec.push(0xff);
+        statekey_vec.extend_from_slice(state_key.as_bytes());
 
         let short = self
             .statekey_shortstatekey
-            .get(&statekey)?
+            .get(&statekey_vec)?
             .map(|shortstatekey| {
                 utils::u64_from_bytes(&shortstatekey)
                     .map_err(|_| Error::bad_database("Invalid shortstatekey in db."))
@@ -83,19 +83,19 @@ fn get_or_create_shortstatekey(
             return Ok(*short);
         }
 
-        let mut statekey = event_type.to_string().as_bytes().to_vec();
-        statekey.push(0xff);
-        statekey.extend_from_slice(state_key.as_bytes());
+        let mut statekey_vec = event_type.to_string().as_bytes().to_vec();
+        statekey_vec.push(0xff);
+        statekey_vec.extend_from_slice(state_key.as_bytes());
 
-        let short = match self.statekey_shortstatekey.get(&statekey)? {
+        let short = match self.statekey_shortstatekey.get(&statekey_vec)? {
             Some(shortstatekey) => utils::u64_from_bytes(&shortstatekey)
                 .map_err(|_| Error::bad_database("Invalid shortstatekey in db."))?,
             None => {
                 let shortstatekey = services().globals.next_count()?;
                 self.statekey_shortstatekey
-                    .insert(&statekey, &shortstatekey.to_be_bytes())?;
+                    .insert(&statekey_vec, &shortstatekey.to_be_bytes())?;
                 self.shortstatekey_statekey
-                    .insert(&shortstatekey.to_be_bytes(), &statekey)?;
+                    .insert(&shortstatekey.to_be_bytes(), &statekey_vec)?;
                 shortstatekey
             }
         };
diff --git a/src/database/key_value/rooms/state.rs b/src/database/key_value/rooms/state.rs
index 6865d7b9bae2ac76c435ec82e88af08f46d35546..fd0c81e65d2812020835576c81d2d61048ea3b1b 100644
--- a/src/database/key_value/rooms/state.rs
+++ b/src/database/key_value/rooms/state.rs
@@ -63,7 +63,7 @@ fn set_forward_extremities(
         }
 
         for event_id in event_ids {
-            let mut key = prefix.to_owned();
+            let mut key = prefix.clone();
             key.extend_from_slice(event_id.as_bytes());
             self.roomid_pduleaves.insert(&key, event_id.as_bytes())?;
         }
diff --git a/src/database/key_value/rooms/state_cache.rs b/src/database/key_value/rooms/state_cache.rs
index c71d481d13980d7820bd2015601c1494679e8faf..76d397f9aeb483ccbde42b189251b90b7e38f2b6 100644
--- a/src/database/key_value/rooms/state_cache.rs
+++ b/src/database/key_value/rooms/state_cache.rs
@@ -105,7 +105,10 @@ fn update_joined_count(&self, room_id: &RoomId) -> Result<()> {
         let mut joined_servers = HashSet::new();
         let mut real_users = HashSet::new();
 
-        for joined in self.room_members(room_id).filter_map(|r| r.ok()) {
+        for joined in self
+            .room_members(room_id)
+            .filter_map(std::result::Result::ok)
+        {
             joined_servers.insert(joined.server_name().to_owned());
             if joined.server_name() == services().globals.server_name()
                 && !services().users.is_deactivated(&joined).unwrap_or(true)
@@ -115,7 +118,10 @@ fn update_joined_count(&self, room_id: &RoomId) -> Result<()> {
             joinedcount += 1;
         }
 
-        for _invited in self.room_members_invited(room_id).filter_map(|r| r.ok()) {
+        for _invited in self
+            .room_members_invited(room_id)
+            .filter_map(std::result::Result::ok)
+        {
             invitedcount += 1;
         }
 
@@ -130,7 +136,10 @@ fn update_joined_count(&self, room_id: &RoomId) -> Result<()> {
             .unwrap()
             .insert(room_id.to_owned(), Arc::new(real_users));
 
-        for old_joined_server in self.room_servers(room_id).filter_map(|r| r.ok()) {
+        for old_joined_server in self
+            .room_servers(room_id)
+            .filter_map(std::result::Result::ok)
+        {
             if !joined_servers.remove(&old_joined_server) {
                 // Server not in room anymore
                 let mut roomserver_id = room_id.as_bytes().to_vec();
diff --git a/src/database/key_value/rooms/threads.rs b/src/database/key_value/rooms/threads.rs
index 02176feedbd862e09fd16ed5b14b2610db728cfb..794b5fd7ce2349ea50db1b86cdbace616cd961f1 100644
--- a/src/database/key_value/rooms/threads.rs
+++ b/src/database/key_value/rooms/threads.rs
@@ -70,7 +70,7 @@ fn get_participants(&self, root_id: &[u8]) -> Result<Option<Vec<OwnedUserId>>> {
                         })?)
                         .map_err(|_| Error::bad_database("Invalid UserId in threadid_userids."))
                     })
-                    .filter_map(|r| r.ok())
+                    .filter_map(std::result::Result::ok)
                     .collect(),
             ))
         } else {
diff --git a/src/database/key_value/rooms/timeline.rs b/src/database/key_value/rooms/timeline.rs
index d76e211dea4b8fe00b0d3fb4acac3565c78aaa2e..0331a62451f4f24098901a4750b3e9725c141305 100644
--- a/src/database/key_value/rooms/timeline.rs
+++ b/src/database/key_value/rooms/timeline.rs
@@ -5,11 +5,7 @@
 };
 use tracing::error;
 
-use crate::{
-    database::KeyValueDatabase,
-    service::{self, rooms::timeline::data::PduData},
-    services, utils, Error, PduEvent, Result,
-};
+use crate::{database::KeyValueDatabase, service, services, utils, Error, PduEvent, Result};
 
 use service::rooms::timeline::PduCount;
 
@@ -232,7 +228,7 @@ fn pdus_until<'a>(
         user_id: &UserId,
         room_id: &RoomId,
         until: PduCount,
-    ) -> PduData<'a> {
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
         let (prefix, current) = count_to_id(room_id, until, 1, true)?;
 
         let user_id = user_id.to_owned();
@@ -254,7 +250,12 @@ fn pdus_until<'a>(
         ))
     }
 
-    fn pdus_after<'a>(&'a self, user_id: &UserId, room_id: &RoomId, from: PduCount) -> PduData<'a> {
+    fn pdus_after<'a>(
+        &'a self,
+        user_id: &UserId,
+        room_id: &RoomId,
+        from: PduCount,
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
         let (prefix, current) = count_to_id(room_id, from, 1, false)?;
 
         let user_id = user_id.to_owned();
diff --git a/src/database/key_value/rooms/user.rs b/src/database/key_value/rooms/user.rs
index 4c4357201d3dab3e398b1dc24a22d8e04195005d..f439f48158d578df24f012f21470272d3e04a91e 100644
--- a/src/database/key_value/rooms/user.rs
+++ b/src/database/key_value/rooms/user.rs
@@ -131,7 +131,7 @@ fn get_shared_rooms<'a>(
 
                     Ok::<_, Error>(room_id)
                 })
-                .filter_map(|r| r.ok())
+                .filter_map(std::result::Result::ok)
         });
 
         // We use the default compare function because keys are sorted correctly (not reversed)
diff --git a/src/database/key_value/sending.rs b/src/database/key_value/sending.rs
index 3fc3e04235b79360e2cf06bdd1cf0bd9b250c72b..6c8e939ba832eea15149f326200cd898264fc12b 100644
--- a/src/database/key_value/sending.rs
+++ b/src/database/key_value/sending.rs
@@ -67,9 +67,9 @@ fn queue_requests(
         for (outgoing_kind, event) in requests {
             let mut key = outgoing_kind.get_prefix();
             if let SendingEventType::Pdu(value) = &event {
-                key.extend_from_slice(value)
+                key.extend_from_slice(value);
             } else {
-                key.extend_from_slice(&services().globals.next_count()?.to_be_bytes())
+                key.extend_from_slice(&services().globals.next_count()?.to_be_bytes());
             }
             let value = if let SendingEventType::Edu(value) = &event {
                 &**value
diff --git a/src/database/key_value/transaction_ids.rs b/src/database/key_value/transaction_ids.rs
index 2ea6ad4ab80bc3c388a0546b59f3142e162a293b..b3bd05f402f86e6ee3d745fe76e0bcec09975c35 100644
--- a/src/database/key_value/transaction_ids.rs
+++ b/src/database/key_value/transaction_ids.rs
@@ -12,7 +12,7 @@ fn add_txnid(
     ) -> Result<()> {
         let mut key = user_id.as_bytes().to_vec();
         key.push(0xff);
-        key.extend_from_slice(device_id.map(|d| d.as_bytes()).unwrap_or_default());
+        key.extend_from_slice(device_id.map(DeviceId::as_bytes).unwrap_or_default());
         key.push(0xff);
         key.extend_from_slice(txn_id.as_bytes());
 
@@ -29,7 +29,7 @@ fn existing_txnid(
     ) -> Result<Option<Vec<u8>>> {
         let mut key = user_id.as_bytes().to_vec();
         key.push(0xff);
-        key.extend_from_slice(device_id.map(|d| d.as_bytes()).unwrap_or_default());
+        key.extend_from_slice(device_id.map(DeviceId::as_bytes).unwrap_or_default());
         key.push(0xff);
         key.extend_from_slice(txn_id.as_bytes());
 
diff --git a/src/database/key_value/uiaa.rs b/src/database/key_value/uiaa.rs
index 5fd91b07e4fde005b9bf3079803ebcd0342e3d81..652c12d0c384dad76c865a6cb092fcb18991e3ef 100644
--- a/src/database/key_value/uiaa.rs
+++ b/src/database/key_value/uiaa.rs
@@ -34,7 +34,7 @@ fn get_uiaa_request(
             .read()
             .unwrap()
             .get(&(user_id.to_owned(), device_id.to_owned(), session.to_owned()))
-            .map(|j| j.to_owned())
+            .map(std::borrow::ToOwned::to_owned)
     }
 
     fn update_uiaa_session(
diff --git a/src/database/key_value/users.rs b/src/database/key_value/users.rs
index 9dfbd7a032a10aebfe8ebc68cff7785ca9f9a67b..5601009ab9c4f67ce025afa54ded1ec9d919776c 100644
--- a/src/database/key_value/users.rs
+++ b/src/database/key_value/users.rs
@@ -650,7 +650,7 @@ fn mark_device_key_update(&self, user_id: &UserId) -> Result<()> {
             .rooms
             .state_cache
             .rooms_joined(user_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
         {
             // Don't send key updates to unencrypted rooms
             if services()
@@ -855,7 +855,7 @@ fn remove_to_device_events(
                         .map_err(|_| Error::bad_database("ToDeviceId has invalid count bytes."))?,
                 ))
             })
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .take_while(|&(_, count)| count <= until)
         {
             self.todeviceid_events.remove(&key)?;
diff --git a/src/database/mod.rs b/src/database/mod.rs
index 1d88b041a97957cd7a372fc4e265f82654a4c3c3..e9926695a26c914467ac2c0db6d737c78fe66179 100644
--- a/src/database/mod.rs
+++ b/src/database/mod.rs
@@ -36,7 +36,7 @@
 use tracing::{debug, error, info, warn};
 
 pub struct KeyValueDatabase {
-    _db: Arc<dyn KeyValueDatabaseEngine>,
+    db: Arc<dyn KeyValueDatabaseEngine>,
 
     //pub globals: globals::Globals,
     pub(super) global: Arc<dyn KvTree>,
@@ -252,7 +252,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
         let (presence_sender, presence_receiver) = mpsc::unbounded_channel();
 
         let db_raw = Box::new(Self {
-            _db: builder.clone(),
+            db: builder.clone(),
             userid_password: builder.open_tree("userid_password")?,
             userid_displayname: builder.open_tree("userid_displayname")?,
             userid_avatarurl: builder.open_tree("userid_avatarurl")?,
@@ -616,7 +616,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
                         Ok::<_, Error>(())
                     };
 
-                for (k, seventid) in db._db.open_tree("stateid_shorteventid")?.iter() {
+                for (k, seventid) in db.db.open_tree("stateid_shorteventid")?.iter() {
                     let sstatehash = utils::u64_from_bytes(&k[0..size_of::<u64>()])
                         .expect("number of bytes is correct");
                     let sstatekey = k[size_of::<u64>()..].to_vec();
@@ -789,7 +789,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
                 }
 
                 // Force E2EE device list updates so we can send them over federation
-                for user_id in services().users.iter().filter_map(|r| r.ok()) {
+                for user_id in services().users.iter().filter_map(std::result::Result::ok) {
                     services().users.mark_device_key_update(&user_id)?;
                 }
 
@@ -799,7 +799,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
             }
 
             if services().globals.database_version()? < 11 {
-                db._db
+                db.db
                     .open_tree("userdevicesessionid_uiaarequest")?
                     .clear()?;
                 services().globals.bump_database_version(11)?;
@@ -974,7 +974,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
                                     .into_iter()
                                     .map(|x| &patterns.patterns()[x])
                                     .join(", ")
-                            )
+                            );
                         }
                     }
                 }
@@ -998,7 +998,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
                                         .into_iter()
                                         .map(|x| &patterns.patterns()[x])
                                         .join(", ")
-                            )
+                            );
                             }
                         }
                     }
@@ -1039,7 +1039,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
                 error!(
                     "Could not set the configured emergency password for the conduit user: {}",
                     e
-                )
+                );
             }
         };
 
@@ -1059,7 +1059,7 @@ pub async fn load_or_create(config: Config) -> Result<()> {
     pub fn flush(&self) -> Result<()> {
         let start = std::time::Instant::now();
 
-        let res = self._db.flush();
+        let res = self.db.flush();
 
         debug!("flush: took {:?}", start.elapsed());
 
@@ -1113,7 +1113,7 @@ struct CheckForUpdatesResponse {
                     .send_message(RoomMessageEventContent::text_plain(format!(
                     "@room: the following is a message from the conduwuit puppy. it was sent on '{}':\n\n{}",
                     update.date, update.message
-                )))
+                )));
             }
         }
         services()
diff --git a/src/service/admin/mod.rs b/src/service/admin/mod.rs
index f226771986a643dddb39c6bd926993434cfbfb1e..d69603c77f97d340ddf73f4d6ae91e6b5032ad43 100644
--- a/src/service/admin/mod.rs
+++ b/src/service/admin/mod.rs
@@ -442,14 +442,14 @@ async fn handler(&self) {
                             .roomid_mutex_state
                             .write()
                             .unwrap()
-                            .entry(conduit_room.to_owned())
+                            .entry(conduit_room.clone())
                             .or_default(),
                     );
 
                     let state_lock = mutex_state.lock().await;
 
                     if let Some(reply) = reply {
-                        message_content.relates_to = Some(Reply { in_reply_to: InReplyTo { event_id: reply.into() } })
+                        message_content.relates_to = Some(Reply { in_reply_to: InReplyTo { event_id: reply.into() } });
                     }
 
                 services().rooms.timeline.build_and_append_pdu(
@@ -618,7 +618,7 @@ async fn process_admin_command(
                     if let Ok(appservices) = services()
                         .appservice
                         .iter_ids()
-                        .map(|ids| ids.collect::<Vec<_>>())
+                        .map(std::iter::Iterator::collect::<Vec<_>>)
                     {
                         let count = appservices.len();
                         let output = format!(
@@ -626,7 +626,7 @@ async fn process_admin_command(
                             count,
                             appservices
                                 .into_iter()
-                                .filter_map(|r| r.ok())
+                                .filter_map(std::result::Result::ok)
                                 .collect::<Vec<_>>()
                                 .join(", ")
                         );
@@ -992,7 +992,7 @@ async fn process_admin_command(
                                     false => true,
                                 },
                                 Err(_) => false,
-                            })
+                            });
                         }
 
                         for &user_id in &user_ids {
@@ -1002,7 +1002,7 @@ async fn process_admin_command(
                             }
 
                             if services().users.deactivate_account(user_id).is_ok() {
-                                deactivation_count += 1
+                                deactivation_count += 1;
                             }
                         }
 
@@ -1243,7 +1243,7 @@ async fn process_admin_command(
                                             continue;
                                         }
 
-                                        room_ids.push(owned_room_id)
+                                        room_ids.push(owned_room_id);
                                     }
                                     Err(e) => {
                                         if force {
@@ -1441,7 +1441,7 @@ async fn process_admin_command(
                         .rooms
                         .metadata
                         .iter_ids()
-                        .filter_map(|r| r.ok())
+                        .filter_map(std::result::Result::ok)
                         .map(Self::get_room_info)
                         .collect::<Vec<_>>();
                     rooms.sort_by_key(|r| r.1);
@@ -1672,7 +1672,7 @@ async fn process_admin_command(
                             .rooms
                             .directory
                             .public_rooms()
-                            .filter_map(|r| r.ok())
+                            .filter_map(std::result::Result::ok)
                             .map(Self::get_room_info)
                             .collect::<Vec<_>>();
                         rooms.sort_by_key(|r| r.1);
@@ -1933,7 +1933,7 @@ async fn process_admin_command(
                 }
                 DebugCommand::ForceDeviceListUpdates => {
                     // Force E2EE device list updates for all users
-                    for user_id in services().users.iter().filter_map(|r| r.ok()) {
+                    for user_id in services().users.iter().filter_map(std::result::Result::ok) {
                         services().users.mark_device_key_update(&user_id)?;
                     }
                     RoomMessageEventContent::text_plain(
@@ -2390,7 +2390,7 @@ pub(crate) async fn make_user_admin(
 
         // Set power level
         let mut users = BTreeMap::new();
-        users.insert(conduit_user.to_owned(), 100.into());
+        users.insert(conduit_user.clone(), 100.into());
         users.insert(user_id.to_owned(), 100.into());
 
         services()
diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs
index dc1a15d6a368dca0342b6a6c30887397c0a2480d..5b5a334413072b110609fca5fe4553cedcedf832 100644
--- a/src/service/media/mod.rs
+++ b/src/service/media/mod.rs
@@ -249,9 +249,6 @@ pub async fn delete_all_remote_media_at_after_time(&self, time: String) -> Resul
                 if file_created_at >= user_duration {
                     debug!("File is within user duration, pushing to list of file paths and keys to delete.");
                     remote_mxcs.push(mxc.to_string());
-                } else {
-                    // don't need to log this even in debug as it would be noisy
-                    continue;
                 }
             }
 
@@ -331,7 +328,7 @@ pub async fn get_thumbnail(
             Ok(Some(FileMeta {
                 content_disposition,
                 content_type,
-                file: file.to_vec(),
+                file: file.clone(),
             }))
         } else if let Ok((content_disposition, content_type, key)) =
             self.db.search_file_metadata(mxc.clone(), 0, 0)
@@ -354,7 +351,7 @@ pub async fn get_thumbnail(
                     return Ok(Some(FileMeta {
                         content_disposition,
                         content_type,
-                        file: file.to_vec(),
+                        file: file.clone(),
                     }));
                 }
 
@@ -426,14 +423,14 @@ pub async fn get_thumbnail(
                 Ok(Some(FileMeta {
                     content_disposition,
                     content_type,
-                    file: thumbnail_bytes.to_vec(),
+                    file: thumbnail_bytes.clone(),
                 }))
             } else {
                 // Couldn't parse file to generate thumbnail, send original
                 Ok(Some(FileMeta {
                     content_disposition,
                     content_type,
-                    file: file.to_vec(),
+                    file: file.clone(),
                 }))
             }
         } else {
diff --git a/src/service/pusher/mod.rs b/src/service/pusher/mod.rs
index 1f700e51fd21ae5d8534fd0ce8331f1a871b3a31..2131e9182ef14254c25e6de152c09272d64a9374 100644
--- a/src/service/pusher/mod.rs
+++ b/src/service/pusher/mod.rs
@@ -64,7 +64,7 @@ pub async fn send_request<T>(
                 warn!("Failed to find destination {}: {}", destination, e);
                 Error::BadServerResponse("Invalid destination")
             })?
-            .map(|body| body.freeze());
+            .map(bytes::BytesMut::freeze);
 
         let reqwest_request = reqwest::Request::try_from(http_request)?;
 
@@ -258,7 +258,7 @@ async fn send_notice(
                         .iter()
                         .any(|t| matches!(t, Tweak::Highlight(true) | Tweak::Sound(_)))
                 {
-                    notifi.prio = NotificationPriority::High
+                    notifi.prio = NotificationPriority::High;
                 }
 
                 if event_id_only {
@@ -285,7 +285,7 @@ async fn send_notice(
                 Ok(())
             }
             // TODO: Handle email
-            PusherKind::Email(_) => Ok(()),
+            //PusherKind::Email(_) => Ok(()),
             _ => Ok(()),
         }
     }
diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs
index 87787ee5d4826fce36d35b1eff5bfb323e77eddb..dd302d22237d59a9f6b6821dd656994541161248 100644
--- a/src/service/rooms/event_handler/mod.rs
+++ b/src/service/rooms/event_handler/mod.rs
@@ -36,7 +36,10 @@
 use serde_json::value::RawValue as RawJsonValue;
 use tracing::{debug, error, info, trace, warn};
 
-use crate::{service::*, services, Error, PduEvent};
+use crate::{
+    service::{pdu, Arc, BTreeMap, HashMap, Result, RwLock},
+    services, Error, PduEvent,
+};
 
 use super::state_compressor::CompressedStateEvent;
 
@@ -63,7 +66,7 @@ impl Service {
     /// 8. If not timeline event: stop
     /// 9. Fetch any missing prev events doing all checks listed here starting at 1. These are timeline
     ///    events
-    /// 10. Fetch missing state and auth chain events by calling /state_ids at backwards extremities
+    /// 10. Fetch missing state and auth chain events by calling `/state_ids` at backwards extremities
     ///     doing all the checks in this list starting at 1. These are not timeline events
     /// 11. Check the auth of the event passes based on the state of the event
     /// 12. Ensure that the state is derived from the previous current state (i.e. we calculated by
@@ -101,7 +104,7 @@ pub(crate) async fn handle_incoming_pdu<'a>(
 
         // 1. Skip the PDU if we already have it as a timeline event
         if let Some(pdu_id) = services().rooms.timeline.get_pdu_id(event_id)? {
-            return Ok(Some(pdu_id.to_vec()));
+            return Ok(Some(pdu_id));
         }
 
         let create_event = services()
@@ -202,7 +205,7 @@ pub(crate) async fn handle_incoming_pdu<'a>(
                         e.insert((Instant::now(), 1));
                     }
                     hash_map::Entry::Occupied(mut e) => {
-                        *e.get_mut() = (Instant::now(), e.get().1 + 1)
+                        *e.get_mut() = (Instant::now(), e.get().1 + 1);
                     }
                 }
                 continue;
@@ -246,7 +249,7 @@ pub(crate) async fn handle_incoming_pdu<'a>(
                             e.insert((Instant::now(), 1));
                         }
                         hash_map::Entry::Occupied(mut e) => {
-                            *e.get_mut() = (Instant::now(), e.get().1 + 1)
+                            *e.get_mut() = (Instant::now(), e.get().1 + 1);
                         }
                     }
                 }
@@ -440,7 +443,7 @@ fn handle_outlier_pdu<'a>(
             if !matches!(
                 auth_events
                     .get(&(StateEventType::RoomCreate, "".to_owned()))
-                    .map(|a| a.as_ref()),
+                    .map(std::convert::AsRef::as_ref),
                 Some(_) | None
             ) {
                 return Err(Error::BadRequest(
@@ -733,7 +736,9 @@ pub async fn upgrade_outlier_to_timeline_pdu(
                         .get_shortstatekey(&StateEventType::RoomCreate, "")?
                         .expect("Room exists");
 
-                    if state.get(&create_shortstatekey).map(|id| id.as_ref())
+                    if state
+                        .get(&create_shortstatekey)
+                        .map(std::convert::AsRef::as_ref)
                         != Some(&create_event.event_id)
                     {
                         return Err(Error::bad_database(
@@ -1167,7 +1172,7 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
                         }
                     }
                 }
-                events_with_auth_events.push((id, None, events_in_reverse_order))
+                events_with_auth_events.push((id, None, events_in_reverse_order));
             }
 
             // We go through all the signatures we see on the PDUs and their unresolved
@@ -1185,7 +1190,7 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
                 warn!(
                     "Could not fetch all signatures for PDUs from {}: {:?}",
                     origin, e
-                )
+                );
             });
 
             let mut pdus = vec![];
@@ -1565,7 +1570,7 @@ pub(crate) async fn fetch_join_signing_keys(
             }
 
             drop(pkm);
-        }
+        };
 
         if servers.is_empty() {
             info!("server is empty, we had all keys locally, not fetching any keys");
diff --git a/src/service/rooms/pdu_metadata/data.rs b/src/service/rooms/pdu_metadata/data.rs
index 121d80dc78c354d105d36557fe909ad1be6e4b51..a4df34cca1beb46c8c31ca722f094db1da3a4548 100644
--- a/src/service/rooms/pdu_metadata/data.rs
+++ b/src/service/rooms/pdu_metadata/data.rs
@@ -1,20 +1,18 @@
 use std::sync::Arc;
 
-use crate::{
-    service::rooms::timeline::{data::PduData, PduCount},
-    Result,
-};
+use crate::{service::rooms::timeline::PduCount, PduEvent, Result};
 use ruma::{EventId, RoomId, UserId};
 
 pub trait Data: Send + Sync {
     fn add_relation(&self, from: u64, to: u64) -> Result<()>;
+    #[allow(clippy::type_complexity)]
     fn relations_until<'a>(
         &'a self,
         user_id: &'a UserId,
         room_id: u64,
         target: u64,
         until: PduCount,
-    ) -> PduData<'a>;
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
     fn mark_as_referenced(&self, room_id: &RoomId, event_ids: &[Arc<EventId>]) -> Result<()>;
     fn is_event_referenced(&self, room_id: &RoomId, event_id: &EventId) -> Result<bool>;
     fn mark_event_soft_failed(&self, event_id: &EventId) -> Result<()>;
diff --git a/src/service/rooms/pdu_metadata/mod.rs b/src/service/rooms/pdu_metadata/mod.rs
index 411f4f541a9986c4f1256031d95c4aea01e7ccae..fcc8335e8d71bc997f41ca5a40d944f24f1c3fd2 100644
--- a/src/service/rooms/pdu_metadata/mod.rs
+++ b/src/service/rooms/pdu_metadata/mod.rs
@@ -78,7 +78,7 @@ pub fn paginate_relations_with_filter(
                         })
                     })
                     .take(limit)
-                    .filter_map(|r| r.ok()) // Filter out buggy events
+                    .filter_map(std::result::Result::ok) // Filter out buggy events
                     .filter(|(_, pdu)| {
                         services()
                             .rooms
@@ -125,7 +125,7 @@ pub fn paginate_relations_with_filter(
                         })
                     })
                     .take(limit)
-                    .filter_map(|r| r.ok()) // Filter out buggy events
+                    .filter_map(std::result::Result::ok) // Filter out buggy events
                     .filter(|(_, pdu)| {
                         services()
                             .rooms
diff --git a/src/service/rooms/spaces/mod.rs b/src/service/rooms/spaces/mod.rs
index 0174b48c2ef3a23efcd916b641bdd123024d25f5..caeacc524a7d061c1ee0a98b7f85dda64a352da0 100644
--- a/src/service/rooms/spaces/mod.rs
+++ b/src/service/rooms/spaces/mod.rs
@@ -62,11 +62,11 @@ pub async fn get_hierarchy(
         let mut results = Vec::new();
 
         while let Some(current_room) = {
-            while stack.last().map_or(false, |s| s.is_empty()) {
+            while stack.last().map_or(false, std::vec::Vec::is_empty) {
                 stack.pop();
             }
             if !stack.is_empty() {
-                stack.last_mut().and_then(|s| s.pop())
+                stack.last_mut().and_then(std::vec::Vec::pop)
             } else {
                 None
             }
@@ -80,7 +80,7 @@ pub async fn get_hierarchy(
                 .roomid_spacechunk_cache
                 .lock()
                 .unwrap()
-                .get_mut(&current_room.to_owned())
+                .get_mut(&current_room.clone())
                 .as_ref()
             {
                 if let Some(cached) = cached {
@@ -202,7 +202,7 @@ pub async fn get_hierarchy(
                     .send_federation_request(
                         server,
                         federation::space::get_hierarchy::v1::Request {
-                            room_id: current_room.to_owned(),
+                            room_id: current_room.clone(),
                             suggested_only,
                         },
                     )
diff --git a/src/service/rooms/state_accessor/mod.rs b/src/service/rooms/state_accessor/mod.rs
index 8d9dae59f41c9d77c391145a90ef762e8d3bcccd..f6e3376c875dfd5298055cfe4e073467dd415725 100644
--- a/src/service/rooms/state_accessor/mod.rs
+++ b/src/service/rooms/state_accessor/mod.rs
@@ -81,16 +81,15 @@ fn user_membership(&self, shortstatehash: u64, user_id: &UserId) -> Result<Membe
     /// The user was a joined member at this state (potentially in the past)
     fn user_was_joined(&self, shortstatehash: u64, user_id: &UserId) -> bool {
         self.user_membership(shortstatehash, user_id)
-            .map(|s| s == MembershipState::Join)
-            .unwrap_or_default() // Return sensible default, i.e. false
+            .is_ok_and(|s| s == MembershipState::Join) // Return sensible default, i.e. false
     }
 
     /// The user was an invited or joined room member at this state (potentially
     /// in the past)
     fn user_was_invited(&self, shortstatehash: u64, user_id: &UserId) -> bool {
         self.user_membership(shortstatehash, user_id)
-            .map(|s| s == MembershipState::Join || s == MembershipState::Invite)
-            .unwrap_or_default() // Return sensible default, i.e. false
+            .is_ok_and(|s| s == MembershipState::Join || s == MembershipState::Invite)
+        // Return sensible default, i.e. false
     }
 
     /// Whether a server is allowed to see an event through federation, based on
@@ -102,9 +101,8 @@ pub fn server_can_see_event(
         room_id: &RoomId,
         event_id: &EventId,
     ) -> Result<bool> {
-        let shortstatehash = match self.pdu_shortstatehash(event_id)? {
-            Some(shortstatehash) => shortstatehash,
-            None => return Ok(true),
+        let Some(shortstatehash) = self.pdu_shortstatehash(event_id)? else {
+            return Ok(true);
         };
 
         if let Some(visibility) = self
@@ -130,7 +128,7 @@ pub fn server_can_see_event(
             .rooms
             .state_cache
             .room_members(room_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .filter(|member| member.server_name() == origin);
 
         let visibility = match history_visibility {
diff --git a/src/service/rooms/threads/mod.rs b/src/service/rooms/threads/mod.rs
index c6193bc8b44d47f4516d43487d6ff309342c263a..ad70f2e05d7f1ca7b4cdd8bd1f2fb133953a7903 100644
--- a/src/service/rooms/threads/mod.rs
+++ b/src/service/rooms/threads/mod.rs
@@ -1,5 +1,7 @@
 mod data;
 
+use std::collections::BTreeMap;
+
 pub use data::Data;
 use ruma::{
     api::client::{error::ErrorKind, threads::get_threads::v1::IncludeThreads},
@@ -56,7 +58,7 @@ pub fn add_to_thread(&self, root_event_id: &EventId, pdu: &PduEvent) -> Result<(
 
         if let CanonicalJsonValue::Object(unsigned) = root_pdu_json
             .entry("unsigned".to_owned())
-            .or_insert_with(|| CanonicalJsonValue::Object(Default::default()))
+            .or_insert_with(|| CanonicalJsonValue::Object(BTreeMap::default()))
         {
             if let Some(mut relations) = unsigned
                 .get("m.relations")
diff --git a/src/service/rooms/timeline/data.rs b/src/service/rooms/timeline/data.rs
index df329fece83b8c281ac75a8b9574f4b933c0fe0c..6290b8cccfa3d36909535e6db1494667450c05ee 100644
--- a/src/service/rooms/timeline/data.rs
+++ b/src/service/rooms/timeline/data.rs
@@ -6,8 +6,6 @@
 
 use super::PduCount;
 
-pub type PduData<'a> = Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
-
 pub trait Data: Send + Sync {
     fn last_timeline_count(&self, sender_user: &UserId, room_id: &RoomId) -> Result<PduCount>;
 
@@ -68,12 +66,23 @@ fn replace_pdu(
 
     /// Returns an iterator over all events and their tokens in a room that happened before the
     /// event with id `until` in reverse-chronological order.
-    fn pdus_until<'a>(&'a self, user_id: &UserId, room_id: &RoomId, until: PduCount)
-        -> PduData<'a>;
+    #[allow(clippy::type_complexity)]
+    fn pdus_until<'a>(
+        &'a self,
+        user_id: &UserId,
+        room_id: &RoomId,
+        until: PduCount,
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
 
     /// Returns an iterator over all events in a room that happened after the event with id `from`
     /// in chronological order.
-    fn pdus_after<'a>(&'a self, user_id: &UserId, room_id: &RoomId, from: PduCount) -> PduData<'a>;
+    #[allow(clippy::type_complexity)]
+    fn pdus_after<'a>(
+        &'a self,
+        user_id: &UserId,
+        room_id: &RoomId,
+        from: PduCount,
+    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
 
     fn increment_notification_counts(
         &self,
diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs
index a96d874843c6abe75fc7d253f1025ba68c754cd8..eb29d64382d8f85806063d0c8c3c04e5f8ca4506 100644
--- a/src/service/rooms/timeline/mod.rs
+++ b/src/service/rooms/timeline/mod.rs
@@ -243,7 +243,7 @@ pub async fn append_pdu(
         if let Some(state_key) = &pdu.state_key {
             if let CanonicalJsonValue::Object(unsigned) = pdu_json
                 .entry("unsigned".to_owned())
-                .or_insert_with(|| CanonicalJsonValue::Object(Default::default()))
+                .or_insert_with(|| CanonicalJsonValue::Object(BTreeMap::default()))
             {
                 if let Some(shortstatehash) = services()
                     .rooms
@@ -400,8 +400,10 @@ struct Redaction {
                     })
                 })
                 .transpose()?
-                .map(|ev: PushRulesEvent| ev.content.global)
-                .unwrap_or_else(|| Ruleset::server_default(user));
+                .map_or_else(
+                    || Ruleset::server_default(user),
+                    |ev: PushRulesEvent| ev.content.global,
+                );
 
             let mut highlight = false;
             let mut notify = false;
@@ -686,7 +688,7 @@ struct ExtractRelatesToEventId {
                     .rooms
                     .alias
                     .local_aliases_for_room(&pdu.room_id)
-                    .filter_map(|r| r.ok())
+                    .filter_map(std::result::Result::ok)
                     .any(|room_alias| aliases.is_match(room_alias.as_str()))
             };
 
@@ -930,7 +932,7 @@ struct ExtractMembership {
                         .filter(|v| v.starts_with('@'))
                         .unwrap_or(sender.as_str());
                     let server_name = services().globals.server_name();
-                    let server_user = format!("@conduit:{}", server_name);
+                    let server_user = format!("@conduit:{server_name}");
                     let content = serde_json::from_str::<ExtractMembership>(pdu.content.get())
                         .map_err(|_| Error::bad_database("Invalid content in pdu."))?;
 
@@ -947,7 +949,7 @@ struct ExtractMembership {
                             .rooms
                             .state_cache
                             .room_members(room_id)
-                            .filter_map(|m| m.ok())
+                            .filter_map(std::result::Result::ok)
                             .filter(|m| m.server_name() == server_name)
                             .filter(|m| m != target)
                             .count();
@@ -973,7 +975,7 @@ struct ExtractMembership {
                             .rooms
                             .state_cache
                             .room_members(room_id)
-                            .filter_map(|m| m.ok())
+                            .filter_map(std::result::Result::ok)
                             .filter(|m| m.server_name() == server_name)
                             .filter(|m| m != target)
                             .count();
@@ -1016,7 +1018,7 @@ struct ExtractMembership {
             .rooms
             .state_cache
             .room_servers(room_id)
-            .filter_map(|r| r.ok())
+            .filter_map(std::result::Result::ok)
             .collect();
 
         // In case we are kicking or banning a user, we need to inform their server of the change
@@ -1217,7 +1219,7 @@ pub async fn backfill_pdu(
                 .roomid_mutex_federation
                 .write()
                 .unwrap()
-                .entry(room_id.to_owned())
+                .entry(room_id.clone())
                 .or_default(),
         );
         let mutex_lock = mutex.lock().await;
diff --git a/src/service/sending/mod.rs b/src/service/sending/mod.rs
index f634c9032a7c2fea8e1b0aa493982eb3672bdbd4..7a8ded14079491aa8665bf19ccc52cf139718da4 100644
--- a/src/service/sending/mod.rs
+++ b/src/service/sending/mod.rs
@@ -82,6 +82,7 @@ pub fn get_prefix(&self) -> Vec<u8> {
 }
 
 #[derive(Clone, Debug, PartialEq, Eq, Hash)]
+#[allow(clippy::module_name_repetitions)]
 pub enum SendingEventType {
     Pdu(Vec<u8>), // pduid
     Edu(Vec<u8>), // pdu json
@@ -130,7 +131,11 @@ async fn handler(&self) -> Result<()> {
         // Retry requests we could not finish yet
         let mut initial_transactions = HashMap::<OutgoingKind, Vec<SendingEventType>>::new();
 
-        for (key, outgoing_kind, event) in self.db.active_requests().filter_map(|r| r.ok()) {
+        for (key, outgoing_kind, event) in self
+            .db
+            .active_requests()
+            .filter_map(std::result::Result::ok)
+        {
             let entry = initial_transactions
                 .entry(outgoing_kind.clone())
                 .or_default();
@@ -160,7 +165,7 @@ async fn handler(&self) -> Result<()> {
                             self.db.delete_all_active_requests_for(&outgoing_kind)?;
 
                             // 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<_>>();
+                            let new_events = self.db.queued_requests(&outgoing_kind).filter_map(std::result::Result::ok).take(30).collect::<Vec<_>>();
 
                             if !new_events.is_empty() {
                                 // Insert pdus we found
@@ -247,7 +252,7 @@ fn select_events(
             for (_, e) in self
                 .db
                 .active_requests_for(outgoing_kind)
-                .filter_map(|r| r.ok())
+                .filter_map(std::result::Result::ok)
             {
                 events.push(e);
             }
@@ -284,7 +289,7 @@ pub fn select_edus(&self, server_name: &ServerName) -> Result<(Vec<Vec<u8>>, u64
                 services()
                     .users
                     .keys_changed(room_id.as_ref(), since, None)
-                    .filter_map(|r| r.ok())
+                    .filter_map(std::result::Result::ok)
                     .filter(|user_id| user_id.server_name() == services().globals.server_name()),
             );
 
@@ -443,7 +448,7 @@ pub fn send_pdu<I: Iterator<Item = OwnedServerName>>(
         )?;
         for ((outgoing_kind, event), key) in requests.into_iter().zip(keys) {
             self.sender
-                .send((outgoing_kind.to_owned(), event, key))
+                .send((outgoing_kind.clone(), event, key))
                 .unwrap();
         }
 
@@ -513,7 +518,7 @@ async fn handle_events(
                                         ),
                                     )
                                 })?
-                                .to_room_event())
+                                .to_room_event());
                         }
                         SendingEventType::Edu(_) => {
                             // Appservices don't need EDUs (?)
@@ -600,13 +605,12 @@ async fn handle_events(
                         }
                     }
 
-                    let pusher = match services()
+                    let Some(pusher) = services()
                         .pusher
                         .get_pusher(userid, pushkey)
                         .map_err(|e| (OutgoingKind::Push(userid.clone(), pushkey.clone()), e))?
-                    {
-                        Some(pusher) => pusher,
-                        None => continue,
+                    else {
+                        continue;
                     };
 
                     let rules_for_user = services()
@@ -618,8 +622,10 @@ async fn handle_events(
                         )
                         .unwrap_or_default()
                         .and_then(|event| serde_json::from_str::<PushRulesEvent>(event.get()).ok())
-                        .map(|ev: PushRulesEvent| ev.content.global)
-                        .unwrap_or_else(|| push::Ruleset::server_default(userid));
+                        .map_or_else(
+                            || push::Ruleset::server_default(userid),
+                            |ev: PushRulesEvent| ev.content.global,
+                        );
 
                     let unread: UInt = services()
                         .rooms
diff --git a/src/service/uiaa/mod.rs b/src/service/uiaa/mod.rs
index 2c51833a31bcd9f1d6fcdd52edbd1f8c4f30aff1..10ac3664cd5c3f0f9605559e4511323754aa10c8 100644
--- a/src/service/uiaa/mod.rs
+++ b/src/service/uiaa/mod.rs
@@ -48,10 +48,10 @@ pub fn try_auth(
         auth: &AuthData,
         uiaainfo: &UiaaInfo,
     ) -> Result<(bool, UiaaInfo)> {
-        let mut uiaainfo = auth
-            .session()
-            .map(|session| self.db.get_uiaa_session(user_id, device_id, session))
-            .unwrap_or_else(|| Ok(uiaainfo.clone()))?;
+        let mut uiaainfo = auth.session().map_or_else(
+            || Ok(uiaainfo.clone()),
+            |session| self.db.get_uiaa_session(user_id, device_id, session),
+        )?;
 
         if uiaainfo.session.is_none() {
             uiaainfo.session = Some(utils::random_string(SESSION_ID_LENGTH));
@@ -64,14 +64,11 @@ pub fn try_auth(
                 password,
                 ..
             }) => {
-                let username = match identifier {
-                    UserIdentifier::UserIdOrLocalpart(username) => username,
-                    _ => {
-                        return Err(Error::BadRequest(
-                            ErrorKind::Unrecognized,
-                            "Identifier type not recognized.",
-                        ))
-                    }
+                let UserIdentifier::UserIdOrLocalpart(username) = identifier else {
+                    return Err(Error::BadRequest(
+                        ErrorKind::Unrecognized,
+                        "Identifier type not recognized.",
+                    ));
                 };
 
                 let user_id = UserId::parse_with_server_name(
diff --git a/src/utils/error.rs b/src/utils/error.rs
index 8549a713d19957a36b578d595e1bcca019687a74..ba6caf5e74644c053a10a218943ba4a1a919b266 100644
--- a/src/utils/error.rs
+++ b/src/utils/error.rs
@@ -100,7 +100,11 @@ pub fn to_response(&self) -> RumaResponse<UiaaResponse> {
 
         let message = format!("{self}");
 
-        use ErrorKind::*;
+        use ErrorKind::{
+            Forbidden, GuestAccessForbidden, LimitExceeded, MissingToken, NotFound,
+            ThreepidAuthFailed, ThreepidDenied, TooLarge, Unauthorized, Unknown, UnknownToken,
+            Unrecognized, UserDeactivated, WrongRoomKeysVersion,
+        };
         let (kind, status_code) = match self {
             Self::BadRequest(kind, _) => (
                 kind.clone(),
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
index 59c522dd40dec545d78cbd46520b9e4396f140a8..37ebc4f8ac0b8253109b98da3db4fe3a2938fcb6 100644
--- a/src/utils/mod.rs
+++ b/src/utils/mod.rs
@@ -22,7 +22,7 @@ pub(crate) fn millis_since_unix_epoch() -> u64 {
 }
 
 pub(crate) fn increment(old: Option<&[u8]>) -> Option<Vec<u8>> {
-    let number = match old.map(|bytes| bytes.try_into()) {
+    let number = match old.map(std::convert::TryInto::try_into) {
         Some(Ok(bytes)) => {
             let number = u64::from_be_bytes(bytes);
             number + 1
@@ -94,7 +94,9 @@ pub(crate) fn common_elements(
     check_order: impl Fn(&[u8], &[u8]) -> Ordering,
 ) -> Option<impl Iterator<Item = Vec<u8>>> {
     let first_iterator = iterators.next()?;
-    let mut other_iterators = iterators.map(|i| i.peekable()).collect::<Vec<_>>();
+    let mut other_iterators = iterators
+        .map(std::iter::Iterator::peekable)
+        .collect::<Vec<_>>();
 
     Some(first_iterator.filter(move |target| {
         other_iterators.iter_mut().all(|it| {