diff --git a/mailbox-android/build.gradle b/mailbox-android/build.gradle
index bd99983500c0d6b98c02a32d231812904fcf3623..a30bcac021efb4aef5001e0c74f1e9d54951a14b 100644
--- a/mailbox-android/build.gradle
+++ b/mailbox-android/build.gradle
@@ -80,7 +80,7 @@ dependencies {
     implementation 'org.briarproject:dont-kill-me-lib:0.2.5'
 
     implementation 'com.github.tony19:logback-android:2.0.1'
-    implementation 'androidx.appcompat:appcompat:1.6.0'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
     implementation "androidx.activity:activity-ktx:1.6.1"
     implementation "androidx.fragment:fragment-ktx:1.5.5"
     implementation 'androidx.preference:preference-ktx:1.2.0'
@@ -96,7 +96,7 @@ dependencies {
     implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
 
     implementation "androidx.constraintlayout:constraintlayout:2.1.4"
-    implementation "com.google.android.material:material:1.7.0"
+    implementation "com.google.android.material:material:1.8.0"
     implementation "com.google.dagger:hilt-android:$hilt_version"
     kapt "com.google.dagger:hilt-compiler:$hilt_version"
 
diff --git a/mailbox-core/build.gradle b/mailbox-core/build.gradle
index 6f1e27cadb1b1318e20f13b0996ae16769ac279e..b8f623108b3924e109870d78c9b530e2cc3304c9 100644
--- a/mailbox-core/build.gradle
+++ b/mailbox-core/build.gradle
@@ -26,7 +26,7 @@ dependencies {
 
     implementation 'org.briarproject:jtorctl:0.5'
 
-    def ktor_version = '2.0.3'
+    def ktor_version = '2.2.3'
     implementation "io.ktor:ktor-server-core:$ktor_version"
     implementation "io.ktor:ktor-server-netty:$ktor_version"
     implementation "io.ktor:ktor-server-auth:$ktor_version"
diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt
index 8931c3e14989403893374891a14a30393de7f7bb..86ac8509dff172c4d71708e09d9fe684fbc9b4d8 100644
--- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt
+++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt
@@ -256,7 +256,7 @@ class ContactsManagerIntegrationTest : IntegrationTest() {
         }
         assertEquals(BadRequest, response.status)
         assertEquals(
-            "\"Bad request: Invalid value for parameter contactId\"",
+            "Bad request: Invalid value for parameter contactId",
             response.bodyAsText(),
         )
     }
diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt
index 92c2bc4f00b0e164c4c4df5a767b270b52478ba4..6011c240abc49b429a15ef28ac468b3bf8b46e3e 100644
--- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt
+++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt
@@ -60,7 +60,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             setBody(bytes)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: foo\"", response.bodyAsText())
+        assertEquals("Malformed ID: foo", response.bodyAsText())
     }
 
     @Test
@@ -72,7 +72,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             setBody(maxBytes)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Bad request: File larger than allowed.\"", response.bodyAsText())
+        assertEquals("Bad request: File larger than allowed.", response.bodyAsText())
         assertNoTmpFiles()
     }
 
@@ -179,7 +179,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             authenticateWithToken(ownerToken)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: foo\"", response.bodyAsText())
+        assertEquals("Malformed ID: foo", response.bodyAsText())
     }
 
     @Test
@@ -218,7 +218,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             authenticateWithToken(ownerToken)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: foo\"", response.bodyAsText())
+        assertEquals("Malformed ID: foo", response.bodyAsText())
     }
 
     @Test
@@ -227,7 +227,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             authenticateWithToken(ownerToken)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: bar\"", response.bodyAsText())
+        assertEquals("Malformed ID: bar", response.bodyAsText())
     }
 
     @Test
@@ -274,7 +274,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             authenticateWithToken(ownerToken)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: foo\"", response.bodyAsText())
+        assertEquals("Malformed ID: foo", response.bodyAsText())
     }
 
     @Test
@@ -283,7 +283,7 @@ class FileManagerIntegrationTest : IntegrationTest() {
             authenticateWithToken(ownerToken)
         }
         assertEquals(HttpStatusCode.BadRequest, response.status)
-        assertEquals("\"Malformed ID: bar\"", response.bodyAsText())
+        assertEquals("Malformed ID: bar", response.bodyAsText())
     }
 
     @Test