diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index abb1aeb0b61ba41bb44548f9ca4428b3696acfd7..374999493e4e88077005284f4089ccc06f47b24b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: briar/ci-image-android:latest
+image: briar/ci-image-android:buster # revert to latest when on buster
 
 stages:
   - test
diff --git a/.run/mailbox [ktlintCheck].run.xml b/.run/mailbox [ktlintCheck].run.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1725b2bdeed7cbdec1d2499879d966825b67d573
--- /dev/null
+++ b/.run/mailbox [ktlintCheck].run.xml	
@@ -0,0 +1,21 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="mailbox [ktlintCheck]" type="GradleRunConfiguration" factoryName="Gradle">
+    <ExternalSystemSettings>
+      <option name="executionName" />
+      <option name="externalProjectPath" value="$PROJECT_DIR$" />
+      <option name="externalSystemIdString" value="GRADLE" />
+      <option name="scriptParameters" value="" />
+      <option name="taskDescriptions">
+        <list />
+      </option>
+      <option name="taskNames">
+        <list>
+          <option value="ktlintCheck" />
+        </list>
+      </option>
+      <option name="vmOptions" value="" />
+    </ExternalSystemSettings>
+    <GradleScriptDebugEnabled>true</GradleScriptDebugEnabled>
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 36a5303eacecfca75732749c28050905b858f079..dd593196c4c1636d3f68bec6bdf809ea7979fd89 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,14 @@
 buildscript {
-    ext.kotlin_version = "1.5.21"
-    ext.hilt_version = "2.37"
+    ext.kotlin_version = '1.5.21'
+    ext.hilt_version = '2.37'
+    ext.junit_version = '5.7.2'
+    ext.mockk_version = '1.10.4'
     repositories {
         google()
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.2.2'
+        classpath 'com.android.tools.build:gradle:7.0.0'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
         classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
     }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8cd9e2f5a574639238650f36fc46ce73a2060a04..d2a906e4bd8387ec153f439f98233c1a1b66b174 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
-distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
+distributionSha256Sum=13bf8d3cf8eeeb5770d19741a59bde9bd966dd78d17f1bbad787a05ef19d1c2d
diff --git a/mailbox-android/build.gradle b/mailbox-android/build.gradle
index a90a9f1c4351082f719b6578c7decf5eb64bb035..ca37ef77ee00e0df0f576a3c135870bbacec7c88 100644
--- a/mailbox-android/build.gradle
+++ b/mailbox-android/build.gradle
@@ -47,7 +47,7 @@ dependencies {
     implementation project(path: ':mailbox-core', configuration: 'default')
 
     implementation 'androidx.appcompat:appcompat:1.3.1'
-    implementation "androidx.activity:activity-ktx:1.3.0"
+    implementation "androidx.activity:activity-ktx:1.3.1"
     implementation "androidx.fragment:fragment-ktx:1.3.6"
 
     def lifecycle_version = "2.3.1"
@@ -66,11 +66,6 @@ dependencies {
     def multidex_version = "2.0.1"
     implementation "androidx.multidex:multidex:$multidex_version"
 
-    def ktorVersion = '1.6.2'
-    implementation "io.ktor:ktor-server-core:$ktorVersion"
-    implementation "io.ktor:ktor-server-netty:$ktorVersion"
-    implementation "ch.qos.logback:logback-classic:1.2.5"
-
     testImplementation 'junit:junit:4.13.2'
 
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
index 6c9505fcebdbac9ccb6a1f6a868e2afb6288d95f..b3b91e01d637509f8eb17ff267eca064b286ebed 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
@@ -7,7 +7,7 @@ import android.os.IBinder
 import androidx.core.content.ContextCompat
 import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.android.MailboxNotificationManager.Companion.NOTIFICATION_MAIN_ID
-import org.briarproject.mailbox.server.WebServerManager
+import org.briarproject.mailbox.core.server.WebServerManager
 import javax.inject.Inject
 
 @AndroidEntryPoint
@@ -27,6 +27,7 @@ class MailboxService : Service() {
 
     @Inject
     internal lateinit var notificationManager: MailboxNotificationManager
+
     @Inject
     internal lateinit var webServerManager: WebServerManager
 
diff --git a/mailbox-cli/build.gradle b/mailbox-cli/build.gradle
index fac4db807ab8ed944265f77dcd37998eb769c9d7..6cd010ccc834b4a78db83cdd56aa04bf12d6b2e3 100644
--- a/mailbox-cli/build.gradle
+++ b/mailbox-cli/build.gradle
@@ -1,9 +1,3 @@
-import java.util.jar.JarEntry
-import java.util.jar.JarFile
-import java.util.jar.JarOutputStream
-
-import static java.util.Collections.list
-
 plugins {
     id 'application'
     id 'idea'
@@ -20,11 +14,10 @@ dependencies {
     implementation 'org.slf4j:slf4j-simple:1.7.30'
     implementation 'com.github.ajalt:clikt:2.2.0'
 
-    def junitVersion = '5.5.2'
-    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
-    testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
-    testRuntime "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
-    testImplementation 'io.mockk:mockk:1.10.4'
+    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
+    testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version"
+    testImplementation "org.junit.jupiter:junit-jupiter-engine:$junit_version"
+    testImplementation "io.mockk:mockk:$mockk_version"
 }
 
 application {
diff --git a/mailbox-core/build.gradle b/mailbox-core/build.gradle
index c9959b80e7a3e8ac41b9fbd4e8c20e6e7b33e1f8..b61ec076352d3231c5794d2b3cbbba2c1ec15d46 100644
--- a/mailbox-core/build.gradle
+++ b/mailbox-core/build.gradle
@@ -11,11 +11,18 @@ targetCompatibility = 1.8
 dependencies {
     api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 
-    def junitVersion = '5.5.2'
-    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
-    testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
-    testRuntime "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
-    testImplementation 'io.mockk:mockk:1.10.4'
+    implementation "com.google.dagger:dagger:$hilt_version"
+    kapt "com.google.dagger:dagger-compiler:$hilt_version"
+
+    def ktorVersion = '1.6.2'
+    implementation "io.ktor:ktor-server-core:$ktorVersion"
+    implementation "io.ktor:ktor-server-netty:$ktorVersion"
+    implementation "ch.qos.logback:logback-classic:1.2.5"
+
+    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
+    testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version"
+    testImplementation "org.junit.jupiter:junit-jupiter-engine:$junit_version"
+    testImplementation "io.mockk:mockk:$mockk_version"
 }
 
 test {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/server/Routing.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt
similarity index 65%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/server/Routing.kt
rename to mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt
index 0225cdc73862036e637aa15493651f301c3e814a..f4c9829b087188893e7eba301f99a1ef89e3b441 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/server/Routing.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/Routing.kt
@@ -1,6 +1,5 @@
-package org.briarproject.mailbox.server
+package org.briarproject.mailbox.core.server
 
-import android.os.Build
 import io.ktor.application.Application
 import io.ktor.application.call
 import io.ktor.http.ContentType
@@ -10,6 +9,6 @@ import io.ktor.routing.routing
 
 internal fun Application.configureRouting() = routing {
     get("/") {
-        call.respondText("All good here in ${Build.MODEL}", ContentType.Text.Plain)
+        call.respondText("Hello world!", ContentType.Text.Plain)
     }
 }
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/server/WebServerManager.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
similarity index 80%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/server/WebServerManager.kt
rename to mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
index 13c5afc2c3c96cf1e8b8c5eb11986a944e78407b..3466ed1ca2db1dd9e0c0d47a6c13482ea01e1629 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/server/WebServerManager.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
@@ -1,7 +1,5 @@
-package org.briarproject.mailbox.server
+package org.briarproject.mailbox.core.server
 
-import android.content.Context
-import dagger.hilt.android.qualifiers.ApplicationContext
 import io.ktor.application.install
 import io.ktor.features.CallLogging
 import io.ktor.server.engine.embeddedServer
@@ -14,9 +12,7 @@ import javax.inject.Inject
 import javax.inject.Singleton
 
 @Singleton
-internal class WebServerManager @Inject constructor(
-    @ApplicationContext private val ctx: Context,
-) {
+class WebServerManager @Inject constructor() {
 
     internal companion object {
         private const val PORT = 8888