diff --git a/briar-headless/build.gradle b/briar-headless/build.gradle
index f580896d578fcf3b82933c9f1fd418371cc0a738..efff4722b08b349bc1403c3f02eba69b5a244caf 100644
--- a/briar-headless/build.gradle
+++ b/briar-headless/build.gradle
@@ -20,7 +20,7 @@ dependencies {
 	implementation project(path: ':briar-core', configuration: 'default')
 	implementation project(path: ':bramble-java', configuration: 'default')
 
-	implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32'
+	implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10'
 	implementation 'io.javalin:javalin:3.5.0'
 	implementation 'org.slf4j:slf4j-simple:1.7.30'
 	implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
@@ -77,7 +77,7 @@ void jarFactory(Jar jarTask, jarArchitecture) {
 	jarTask.with jar
 	jarTask.doLast {
 		// Rename the original jar
-		File jar = jarTask.archivePath
+		File jar = jarTask.archiveFile.get().asFile
 		String srcPath = jar.toString().replaceFirst('\\.jar$', '.unsorted.jar')
 		File srcFile = new File(srcPath)
 		jar.renameTo(srcFile)
diff --git a/briar-headless/witness.gradle b/briar-headless/witness.gradle
index 5b80eb9e6bbb803617679cbb95f4e263f160ce00..17f1b91d381e8e4d33ec440613ca39681320a7bd 100644
--- a/briar-headless/witness.gradle
+++ b/briar-headless/witness.gradle
@@ -64,11 +64,9 @@ dependencyVerification {
         'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.7.10:kotlin-scripting-compiler-embeddable-1.7.10.jar:fcb8a0b3b7a95263dab8a0ccdd34fed02888700511eabb5613f75a007a4aa802',
         'org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.7.10:kotlin-scripting-compiler-impl-embeddable-1.7.10.jar:7119205985ebd721179fb0f35d1d511f96de14fbd48e6465119fcac6bffc8090',
         'org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10:kotlin-scripting-jvm-1.7.10.jar:cf85511ce4e26fa3286d722f95ed54f16f2513a39ce3b85f2b567e575cb45a60',
-        'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32:kotlin-stdlib-common-1.4.32.jar:e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145',
         'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10:kotlin-stdlib-common-1.7.10.jar:19f102efe9629f8eabc63853ad15c533e47c47f91fca09285c5bde86e59f91d4',
-        'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32:kotlin-stdlib-jdk7-1.4.32.jar:5f801e75ca27d8791c14b07943c608da27620d910a8093022af57f543d5d98b6',
-        'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32:kotlin-stdlib-jdk8-1.4.32.jar:adc43e54757b106e0cd7b3b7aa257dff471b61efdabe067fc02b2f57e2396262',
-        'org.jetbrains.kotlin:kotlin-stdlib:1.4.32:kotlin-stdlib-1.4.32.jar:13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba',
+        'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10:kotlin-stdlib-jdk7-1.7.10.jar:54f61351b1936ad88f4e53059fe781e723eae51d78ed9e7422d8b403574ec682',
+        'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10:kotlin-stdlib-jdk8-1.7.10.jar:8aafdd60c94f454c92e5066d266a5ed53ecc63c78f623b3fd9db56fea4032873',
         'org.jetbrains.kotlin:kotlin-stdlib:1.7.10:kotlin-stdlib-1.7.10.jar:e771fe74250a943e8f6346713201ff1d8cb95c3a5d1a91a22b65a9e04f6a8901',
         'org.jetbrains:annotations:13.0:annotations-13.0.jar:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478',
         'org.json:json:20150729:json-20150729.jar:38c21b9c3d6d24919cd15d027d20afab0a019ac9205f7ed9083b32bdd42a2353',
diff --git a/briar-mailbox b/briar-mailbox
index 7a48ccc1b8ab6fd306ef71c7e6960735b3595873..d887c49ab342d1d48d79e46fa6632852c4ab40b7 160000
--- a/briar-mailbox
+++ b/briar-mailbox
@@ -1 +1 @@
-Subproject commit 7a48ccc1b8ab6fd306ef71c7e6960735b3595873
+Subproject commit d887c49ab342d1d48d79e46fa6632852c4ab40b7
diff --git a/build.gradle b/build.gradle
index 0d998157f575ce19bd3d92c6404a342dbe89bcc6..f9d5e40c2d248503fa3f28b2e20c86fc3e181cf0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -47,7 +47,7 @@ buildscript {
 	}
 }
 
-if ((project.hasProperty("mailbox-integration-tests") && project.property("mailbox-integration-tests") == "true")
+if ((project.hasProperty("briar.mailbox_integration_tests") && project.property("briar.mailbox_integration_tests") == "true")
 		|| System.env.MAILBOX_INTEGRATION_TESTS) {
 	configure([project(':mailbox-core'), project(':mailbox-lib')]) {
 		apply from: "../gradle/variables.gradle"
diff --git a/gradle.properties b/gradle.properties
index 86b953d86f635f3a1e8ca31ea7bb956f562d2ed5..54044786c8733ba607656e11ae39ae809a815917 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,4 +2,4 @@ noWitness=androidApis,_internal_aapt2_binary
 org.gradle.jvmargs=-Xmx1g
 android.useAndroidX=true
 android.enableJetifier=true
-mailbox-integration-tests=false
+briar.mailbox_integration_tests=false
diff --git a/gradle/ktlint.gradle b/gradle/ktlint.gradle
deleted file mode 100644
index 60fada8f6389189b1efa5a56e37d30fff0efc477..0000000000000000000000000000000000000000
--- a/gradle/ktlint.gradle
+++ /dev/null
@@ -1,10 +0,0 @@
-ktlint {
-    version = "0.43.2"
-    android = true
-    enableExperimentalRules = false
-    verbose = true
-    disabledRules = [
-            "import-ordering",
-            "no-blank-line-before-rbrace",
-    ]
-}
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxApiIntegrationTest.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxApiIntegrationTest.java
index 38ef74338c27b419d2952294c440a63ed30fad9c..e6ab681216f9f8cbdbcb0d59435953363c776701 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxApiIntegrationTest.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxApiIntegrationTest.java
@@ -11,7 +11,6 @@ import org.briarproject.bramble.mailbox.MailboxApi.MailboxContact;
 import org.briarproject.bramble.mailbox.MailboxApi.MailboxFile;
 import org.briarproject.bramble.mailbox.MailboxApi.TolerableFailureException;
 import org.briarproject.bramble.test.BrambleTestCase;
-import org.briarproject.mailbox.lib.Mailbox;
 import org.briarproject.mailbox.lib.TestMailbox;
 import org.junit.After;
 import org.junit.Before;
@@ -47,7 +46,7 @@ public class MailboxApiIntegrationTest extends BrambleTestCase {
 	@Rule
 	public TemporaryFolder dataDirectory = new TemporaryFolder();
 
-	private Mailbox mailbox;
+	private TestMailbox mailbox;
 	private MailboxAuthToken setupToken;
 
 	private final MailboxApi api = createMailboxApi();
@@ -58,7 +57,6 @@ public class MailboxApiIntegrationTest extends BrambleTestCase {
 	public void setUp()
 			throws IOException, ApiException, InvalidMailboxIdException {
 		mailbox = new TestMailbox(dataDirectory.getRoot());
-		mailbox.init();
 		mailbox.startLifecycle();
 
 		setupToken = MailboxAuthToken.fromString(mailbox.getSetupToken());
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
index 10f78e0c29e9da885553772da8f2e82f7c09a52d..3f27c648dc0bb703be017fc5a1b34a720c8c981a 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
@@ -87,7 +87,7 @@ class MailboxIntegrationTestUtils {
 	}
 
 	interface Check {
-		boolean check();
+		boolean check() throws Exception;
 	}
 
 	/**
@@ -97,7 +97,7 @@ class MailboxIntegrationTestUtils {
 	 * next invocation.
 	 */
 	static void retryUntilSuccessOrTimeout(long totalTime, long step,
-			Check check) {
+			Check check) throws Exception {
 		AtomicBoolean success = new AtomicBoolean(false);
 
 		checkRepeatedly(totalTime, step, () -> {
@@ -119,7 +119,7 @@ class MailboxIntegrationTestUtils {
 	 * next invocation.
 	 */
 	private static void checkRepeatedly(long totalTime, long step,
-			Check check) {
+			Check check) throws Exception {
 		long start = currentTimeMillis();
 		while (currentTimeMillis() - start < totalTime) {
 			if (check.check()) {
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/OwnMailboxContactListWorkerIntegrationTest.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/OwnMailboxContactListWorkerIntegrationTest.java
index 7c46bb703f5b56a2a9bebc0118412f0f5934a14e..d91ca40a085dabe83cd977f8c694c23c3941d6e7 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/OwnMailboxContactListWorkerIntegrationTest.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/OwnMailboxContactListWorkerIntegrationTest.java
@@ -13,9 +13,7 @@ import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
 import org.briarproject.bramble.api.mailbox.MailboxPairingState.Paired;
 import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
 import org.briarproject.bramble.api.mailbox.MailboxProperties;
-import org.briarproject.bramble.mailbox.MailboxApi.ApiException;
 import org.briarproject.bramble.test.BrambleTestCase;
-import org.briarproject.mailbox.lib.Mailbox;
 import org.briarproject.mailbox.lib.TestMailbox;
 import org.junit.After;
 import org.junit.Before;
@@ -24,15 +22,11 @@ import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
-import java.util.logging.Logger;
 
-import static java.util.logging.Level.WARNING;
-import static java.util.logging.Logger.getLogger;
 import static org.briarproject.bramble.api.mailbox.MailboxAuthToken.fromString;
 import static org.briarproject.bramble.mailbox.MailboxIntegrationTestUtils.createMailboxApi;
 import static org.briarproject.bramble.mailbox.MailboxIntegrationTestUtils.createTestComponent;
@@ -41,18 +35,14 @@ import static org.briarproject.bramble.mailbox.MailboxIntegrationTestUtils.retry
 import static org.briarproject.bramble.test.TestUtils.getSecretKey;
 import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 
 public class OwnMailboxContactListWorkerIntegrationTest
 		extends BrambleTestCase {
 
-	private static final Logger LOG = getLogger(
-			OwnMailboxContactListWorkerIntegrationTest.class.getName());
-
 	@Rule
 	public TemporaryFolder mailboxDataDirectory = new TemporaryFolder();
 
-	private Mailbox mailbox;
+	private TestMailbox mailbox;
 
 	private final MailboxApi api = createMailboxApi();
 
@@ -70,7 +60,6 @@ public class OwnMailboxContactListWorkerIntegrationTest
 	@Before
 	public void setUp() throws Exception {
 		mailbox = new TestMailbox(mailboxDataDirectory.getRoot());
-		mailbox.init();
 		mailbox.startLifecycle();
 
 		MailboxAuthToken setupToken = fromString(mailbox.getSetupToken());
@@ -119,23 +108,17 @@ public class OwnMailboxContactListWorkerIntegrationTest
 	}
 
 	@Test
-	public void testUploadContacts() throws DbException {
+	public void testUploadContacts() throws Exception {
 		int numContactsToAdd = 5;
 		List<ContactId> expectedContacts =
 				createContacts(component, identity, numContactsToAdd);
 
 		// Check for number of contacts on mailbox via API every 100ms
 		retryUntilSuccessOrTimeout(1000, 100, () -> {
-			try {
-				Collection<ContactId> contacts =
-						api.getContacts(ownerProperties);
-				if (contacts.size() == numContactsToAdd) {
-					assertEquals(expectedContacts, contacts);
-					return true;
-				}
-			} catch (IOException | ApiException e) {
-				LOG.log(WARNING, "Error while fetching contacts via API", e);
-				fail();
+			Collection<ContactId> contacts = api.getContacts(ownerProperties);
+			if (contacts.size() == numContactsToAdd) {
+				assertEquals(expectedContacts, contacts);
+				return true;
 			}
 			return false;
 		});
diff --git a/settings.gradle b/settings.gradle
index 45cbb0e0995b4928eb36a408220bc5229f232908..f795ed7359b778cddcf28a425221caede44a1f46 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -8,9 +8,9 @@ include ':briar-android'
 include ':briar-headless'
 // Enable the mailbox integration tests by passing
 // `MAILBOX_INTEGRATION_TESTS=true ./gradlew mailbox-integration-tests:test`
-// on the command line (for CI etc) or set `mailbox-integration-tests=true`
+// on the command line (for CI etc) or set `briar.mailbox_integration_tests=true`
 // in gradle.properties to enable the modules for local development.
-if (ext.has("mailbox-integration-tests") && ext.get("mailbox-integration-tests") == "true"
+if (ext.has("briar.mailbox_integration_tests") && ext.get("briar.mailbox_integration_tests") == "true"
 		|| System.env.MAILBOX_INTEGRATION_TESTS) {
 	include ':mailbox-integration-tests'
 	include(":mailbox-core")