diff --git a/Cargo.lock b/Cargo.lock
index 760b4d903be74bb88c6a5de260b6b87591e0bc8d..9e58bccc9308d61c2281b083026d9a9ebee264fd 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2039,7 +2039,7 @@ dependencies = [
 [[package]]
 name = "ruma"
 version = "0.7.4"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "assign",
  "js_int",
@@ -2057,7 +2057,7 @@ dependencies = [
 [[package]]
 name = "ruma-appservice-api"
 version = "0.7.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "ruma-common",
  "serde",
@@ -2067,7 +2067,7 @@ dependencies = [
 [[package]]
 name = "ruma-client-api"
 version = "0.15.1"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "assign",
  "bytes",
@@ -2083,7 +2083,7 @@ dependencies = [
 [[package]]
 name = "ruma-common"
 version = "0.10.3"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "base64",
  "bytes",
@@ -2110,7 +2110,7 @@ dependencies = [
 [[package]]
 name = "ruma-federation-api"
 version = "0.6.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -2121,7 +2121,7 @@ dependencies = [
 [[package]]
 name = "ruma-identifiers-validation"
 version = "0.9.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "js_int",
  "thiserror",
@@ -2130,7 +2130,7 @@ dependencies = [
 [[package]]
 name = "ruma-identity-service-api"
 version = "0.6.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -2140,7 +2140,7 @@ dependencies = [
 [[package]]
 name = "ruma-macros"
 version = "0.10.3"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "once_cell",
  "proc-macro-crate",
@@ -2155,7 +2155,7 @@ dependencies = [
 [[package]]
 name = "ruma-push-gateway-api"
 version = "0.6.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -2166,7 +2166,7 @@ dependencies = [
 [[package]]
 name = "ruma-signatures"
 version = "0.12.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "base64",
  "ed25519-dalek",
@@ -2182,7 +2182,7 @@ dependencies = [
 [[package]]
 name = "ruma-state-res"
 version = "0.8.0"
-source = "git+https://github.com/ruma/ruma?rev=86b58cafb8abe29eecd0272d90b40bbb61a7919b#86b58cafb8abe29eecd0272d90b40bbb61a7919b"
+source = "git+https://github.com/ruma/ruma?rev=c2c45551335c443ede7fb9158284196899a0c696#c2c45551335c443ede7fb9158284196899a0c696"
 dependencies = [
  "itertools",
  "js_int",
diff --git a/Cargo.toml b/Cargo.toml
index 37b05294c00909667ce211799b2b8014934b60e1..0b3062dafe61a2d162a9d98aeb34b79198e8395e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,7 +21,7 @@ tower-http = { version = "0.3.4", features = ["add-extension", "cors", "compress
 
 # Used for matrix spec type definitions and helpers
 #ruma = { version = "0.4.0", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-pre-spec", "unstable-exhaustive-types"] }
-ruma = { git = "https://github.com/ruma/ruma", rev = "86b58cafb8abe29eecd0272d90b40bbb61a7919b", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-msc2448", "unstable-exhaustive-types", "ring-compat", "unstable-unspecified" ] }
+ruma = { git = "https://github.com/ruma/ruma", rev = "c2c45551335c443ede7fb9158284196899a0c696", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-msc2448", "unstable-exhaustive-types", "ring-compat", "unstable-unspecified" ] }
 #ruma = { git = "https://github.com/timokoesters/ruma", rev = "50c1db7e0a3a21fc794b0cce3b64285a4c750c71", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-pre-spec", "unstable-exhaustive-types"] }
 #ruma = { path = "../ruma/crates/ruma", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-pre-spec", "unstable-exhaustive-types"] }
 
diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs
index c1f5e1de764afb18a992d0601c868989e9a9a547..ae023c95f85ee016ce6076439a401101ecd61b38 100644
--- a/src/api/client_server/media.rs
+++ b/src/api/client_server/media.rs
@@ -104,6 +104,7 @@ pub async fn get_content_route(
             file,
             content_type,
             content_disposition,
+            cross_origin_resource_policy: Some("cross-origin".to_owned()),
         })
     } else if &*body.server_name != services().globals.server_name() && body.allow_remote {
         let remote_content_response =
@@ -134,6 +135,7 @@ pub async fn get_content_as_filename_route(
             file,
             content_type,
             content_disposition: Some(format!("inline; filename={}", body.filename)),
+            cross_origin_resource_policy: Some("cross-origin".to_owned()),
         })
     } else if &*body.server_name != services().globals.server_name() && body.allow_remote {
         let remote_content_response =
@@ -143,6 +145,7 @@ pub async fn get_content_as_filename_route(
             content_disposition: Some(format!("inline: filename={}", body.filename)),
             content_type: remote_content_response.content_type,
             file: remote_content_response.file,
+            cross_origin_resource_policy: Some("cross-origin".to_owned()),
         })
     } else {
         Err(Error::BadRequest(ErrorKind::NotFound, "Media not found."))
@@ -174,7 +177,11 @@ pub async fn get_content_thumbnail_route(
         )
         .await?
     {
-        Ok(get_content_thumbnail::v3::Response { file, content_type })
+        Ok(get_content_thumbnail::v3::Response {
+            file,
+            content_type,
+            cross_origin_resource_policy: Some("cross-origin".to_owned()),
+        })
     } else if &*body.server_name != services().globals.server_name() && body.allow_remote {
         let get_thumbnail_response = services()
             .sending
diff --git a/src/api/client_server/message.rs b/src/api/client_server/message.rs
index 2b5bdf9d196b77ada16c8664df95b4b7d44bb62a..b04c26268c8f4309a5d8d71bf606c271ab56abde 100644
--- a/src/api/client_server/message.rs
+++ b/src/api/client_server/message.rs
@@ -127,8 +127,8 @@ pub async fn get_message_events_route(
             .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Invalid `from` value."))?,
 
         None => match body.dir {
-            get_message_events::v3::Direction::Forward => 0,
-            get_message_events::v3::Direction::Backward => u64::MAX,
+            ruma::api::client::Direction::Forward => 0,
+            ruma::api::client::Direction::Backward => u64::MAX,
         },
     };
 
@@ -151,7 +151,7 @@ pub async fn get_message_events_route(
     let mut lazy_loaded = HashSet::new();
 
     match body.dir {
-        get_message_events::v3::Direction::Forward => {
+        ruma::api::client::Direction::Forward => {
             let events_after: Vec<_> = services()
                 .rooms
                 .timeline
@@ -196,7 +196,7 @@ pub async fn get_message_events_route(
             resp.end = next_token.map(|count| count.to_string());
             resp.chunk = events_after;
         }
-        get_message_events::v3::Direction::Backward => {
+        ruma::api::client::Direction::Backward => {
             let events_before: Vec<_> = services()
                 .rooms
                 .timeline
diff --git a/src/api/client_server/read_marker.rs b/src/api/client_server/read_marker.rs
index bdf467f9d7534ef4ad8455a421120b84f045be04..48520fc9612e0b086895aab81ac8f84fac204fea 100644
--- a/src/api/client_server/read_marker.rs
+++ b/src/api/client_server/read_marker.rs
@@ -1,7 +1,7 @@
 use crate::{services, Error, Result, Ruma};
 use ruma::{
     api::client::{error::ErrorKind, read_marker::set_read_marker, receipt::create_receipt},
-    events::{receipt::ReceiptType, RoomAccountDataEventType},
+    events::{receipt::{ReceiptType, ReceiptThread}, RoomAccountDataEventType},
     MilliSecondsSinceUnixEpoch,
 };
 use std::collections::BTreeMap;
@@ -59,6 +59,7 @@ pub async fn set_read_marker_route(
             sender_user.clone(),
             ruma::events::receipt::Receipt {
                 ts: Some(MilliSecondsSinceUnixEpoch::now()),
+                thread: ReceiptThread::Unthreaded,
             },
         );
 
@@ -119,6 +120,7 @@ pub async fn create_receipt_route(
                 sender_user.clone(),
                 ruma::events::receipt::Receipt {
                     ts: Some(MilliSecondsSinceUnixEpoch::now()),
+                    thread: ReceiptThread::Unthreaded,
                 },
             );
             let mut receipts = BTreeMap::new();
diff --git a/src/api/client_server/sync.rs b/src/api/client_server/sync.rs
index 4b7326924b93b9339d407746f1bd1e04f6eb2ef1..828ae19c7a4d2cdedfbbed50fd8e67f61d7896da 100644
--- a/src/api/client_server/sync.rs
+++ b/src/api/client_server/sync.rs
@@ -778,6 +778,7 @@ async fn sync_helper(
                     .collect(),
             },
             ephemeral: Ephemeral { events: edus },
+            unread_thread_notifications: BTreeMap::new(),
         };
 
         if !joined_room.is_empty() {