diff --git a/bramble-api/build.gradle b/bramble-api/build.gradle
index 138b9484c42499641050b92a65f2a5974ca30364..8f864b574dc2f482d88ddf29fc9c7e3c17be7cc4 100644
--- a/bramble-api/build.gradle
+++ b/bramble-api/build.gradle
@@ -5,18 +5,37 @@ targetCompatibility = 1.6
 apply plugin: 'witness'
 
 dependencies {
-	compile "com.google.dagger:dagger:2.0.2"
-	compile 'com.google.dagger:dagger-compiler:2.0.2'
+	compile "com.google.dagger:dagger:2.8"
+	compile 'com.google.dagger:dagger-compiler:2.8'
 	compile 'com.google.code.findbugs:jsr305:3.0.1'
+
+	testCompile 'junit:junit:4.12'
+	testCompile "org.jmock:jmock:2.8.1"
+	testCompile "org.jmock:jmock-junit4:2.8.1"
+	testCompile "org.jmock:jmock-legacy:2.8.1"
+	testCompile "org.hamcrest:hamcrest-library:1.3"
+	testCompile "org.hamcrest:hamcrest-core:1.3"
 }
 
 dependencyVerification {
 	verify = [
-			'com.google.dagger:dagger:84c0282ed8be73a29e0475d639da030b55dee72369e58dd35ae7d4fe6243dcf9',
-			'com.google.dagger:dagger-compiler:b74bc9de063dd4c6400b232231f2ef5056145b8fbecbf5382012007dd1c071b3',
+			'com.google.dagger:dagger:5070e1dff5c551a4908ba7b93125c0243de2a688aed3d2f475357d86d9d7c0ad',
+			'com.google.dagger:dagger-compiler:7b2686f94907868c5364e9965601ffe2f020ba4af1849ad9b57dad5fe3fa6242',
+			'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd',
 			'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
-			'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b',
-			'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99',
-			'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd'
+			'com.google.dagger:dagger-producers:1e4043e85f67de381d19e22c7932aaf7ff1611091be7e1aaae93f2c37f331cf2',
+			'com.google.guava:guava:ff89d4a4a6b303c4084194975a5a35f55a8af6f7337678b4cc8ddbea9005c323',
 	]
 }
+
+// needed to make test output available to bramble-core and briar-core
+configurations {
+	testOutput.extendsFrom(testCompile)
+}
+task jarTest (type: Jar, dependsOn: testClasses) {
+	from sourceSets.test.output
+	classifier = 'test'
+}
+artifacts {
+	testOutput jarTest
+}
diff --git a/briar-tests/src/org/briarproject/BriarMockTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
similarity index 63%
rename from briar-tests/src/org/briarproject/BriarMockTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
index 45b662013b6050e1c12b554f1437c674aa13a4e5..b43003e1326c3c41d345acbae8a26295a1012e28 100644
--- a/briar-tests/src/org/briarproject/BriarMockTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/BrambleMockTestCase.java
@@ -1,9 +1,10 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.jmock.Mockery;
 import org.junit.After;
 
-public abstract class BriarMockTestCase extends BriarTestCase {
+public abstract class BrambleMockTestCase extends
+		BrambleTestCase {
 
 	protected final Mockery context = new Mockery();
 
diff --git a/briar-tests/src/org/briarproject/BriarTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
similarity index 80%
rename from briar-tests/src/org/briarproject/BriarTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
index 745628c539be797a2a4cdb753250ca8344945719..968c6099f3ef054eb829b4bb83ce9b203994919c 100644
--- a/briar-tests/src/org/briarproject/BriarTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/BrambleTestCase.java
@@ -1,12 +1,12 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import java.lang.Thread.UncaughtExceptionHandler;
 
 import static org.junit.Assert.fail;
 
-public abstract class BriarTestCase {
+public abstract class BrambleTestCase {
 
-	public BriarTestCase() {
+	public BrambleTestCase() {
 		// Ensure exceptions thrown on worker threads cause tests to fail
 		UncaughtExceptionHandler fail = new UncaughtExceptionHandler() {
 			@Override
diff --git a/briar-tests/src/org/briarproject/ImmediateExecutor.java b/bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
similarity index 87%
rename from briar-tests/src/org/briarproject/ImmediateExecutor.java
rename to bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
index 424e6674b2fca15051e9ee3a8693f67f5b54669c..65ae6d14110ad73d128f0de10e8aac7115cb8a01 100644
--- a/briar-tests/src/org/briarproject/ImmediateExecutor.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/ImmediateExecutor.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 
diff --git a/briar-tests/src/org/briarproject/TestDatabaseConfig.java b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
similarity index 96%
rename from briar-tests/src/org/briarproject/TestDatabaseConfig.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
index 0d366e867792c03e9a38c8375f66429095b98599..3ed6fd70b2d0a65ce17c1824c66980e715885509 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseConfig.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseConfig.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
similarity index 95%
rename from briar-tests/src/org/briarproject/TestDatabaseModule.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
index b978c8deaeeb3bd1c98ee2863ec57d19d6730833..f3360471da4b554ea2f84a00b0d542fd7e9edc6c 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseModule.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestDatabaseModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.db.DatabaseExecutor;
diff --git a/briar-tests/src/org/briarproject/TestSeedProvider.java b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
similarity index 89%
rename from briar-tests/src/org/briarproject/TestSeedProvider.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
index a6d761a4c913a98801a9b61fcc78bd96210ccbc2..911ca2f5104e95e61e4ecaec5b508c58624b7d25 100644
--- a/briar-tests/src/org/briarproject/TestSeedProvider.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProvider.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.system.SeedProvider;
diff --git a/briar-tests/src/org/briarproject/TestSeedProviderModule.java b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
similarity index 89%
rename from briar-tests/src/org/briarproject/TestSeedProviderModule.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
index 1d449284fa7c3a2c078f297cdb1f238479fb2361..eb5ccff38c21264479c7e163011e68a912cabfad 100644
--- a/briar-tests/src/org/briarproject/TestSeedProviderModule.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestSeedProviderModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.system.SeedProvider;
 
diff --git a/briar-tests/src/org/briarproject/TestUtils.java b/bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
similarity index 56%
rename from briar-tests/src/org/briarproject/TestUtils.java
rename to bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
index 6e28dce8cfea41777300c61dfd4ef51c1adac86a..bfdab2fe94e29a8caa865b3d906f3d3ba5c0282b 100644
--- a/briar-tests/src/org/briarproject/TestUtils.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/TestUtils.java
@@ -1,19 +1,13 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.crypto.SecretKey;
-import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.util.IoUtils;
-import org.briarproject.briar.api.client.MessageTracker;
-import org.briarproject.briar.api.client.MessageTracker.GroupCount;
 
 import java.io.File;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.junit.Assert.assertEquals;
-
 public class TestUtils {
 
 	private static final AtomicInteger nextTestDir =
@@ -51,19 +45,4 @@ public class TestUtils {
 		return new SecretKey(getRandomBytes(SecretKey.LENGTH));
 	}
 
-	public static void assertGroupCount(MessageTracker tracker, GroupId g,
-			long msgCount, long unreadCount, long latestMsgTime)
-			throws DbException {
-		GroupCount groupCount = tracker.getGroupCount(g);
-		assertEquals(msgCount, groupCount.getMsgCount());
-		assertEquals(unreadCount, groupCount.getUnreadCount());
-		assertEquals(latestMsgTime, groupCount.getLatestMsgTime());
-	}
-
-	public static void assertGroupCount(MessageTracker tracker, GroupId g,
-			long msgCount, long unreadCount) throws	DbException {
-		GroupCount c1 = tracker.getGroupCount(g);
-		assertEquals(msgCount, c1.getMsgCount());
-		assertEquals(unreadCount, c1.getUnreadCount());
-	}
 }
diff --git a/briar-tests/src/org/briarproject/ValidatorTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
similarity index 93%
rename from briar-tests/src/org/briarproject/ValidatorTestCase.java
rename to bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
index 0ece8f562d773a41f2d6b3c88520dcf26568c5ba..815451f3f75e2a56f7639f44d0da147dbcb929f7 100644
--- a/briar-tests/src/org/briarproject/ValidatorTestCase.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/ValidatorTestCase.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.MetadataEncoder;
@@ -10,7 +10,7 @@ import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.api.system.Clock;
 
-public abstract class ValidatorTestCase extends BriarMockTestCase {
+public abstract class ValidatorTestCase extends BrambleMockTestCase {
 
 	protected final ClientHelper clientHelper =
 			context.mock(ClientHelper.class);
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java
rename to bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
index 5aabfdd609f4052c89a0c177ca8c2546a034e82f..9a06c0e49168b6238cea77b3e541ead5752747fc 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfDictionaryTest.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java
@@ -1,9 +1,7 @@
-package org.briarproject.bramble.data;
+package org.briarproject.bramble.api.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.Bytes;
-import org.briarproject.bramble.api.data.BdfDictionary;
-import org.briarproject.bramble.api.data.BdfEntry;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -15,7 +13,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class BdfDictionaryTest extends BriarTestCase {
+public class BdfDictionaryTest extends BrambleTestCase {
 
 	@Test
 	public void testConstructors() {
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfListTest.java b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/data/BdfListTest.java
rename to bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
index 7fd85878f64a115298524691277486f2714be357..76ad505674c9f58ad033df7f5df18070d4e4e4ed 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfListTest.java
+++ b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfListTest.java
@@ -1,11 +1,8 @@
-package org.briarproject.bramble.data;
+package org.briarproject.bramble.api.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
-import org.briarproject.bramble.api.data.BdfDictionary;
-import org.briarproject.bramble.api.data.BdfEntry;
-import org.briarproject.bramble.api.data.BdfList;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -15,7 +12,7 @@ import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class BdfListTest extends BriarTestCase {
+public class BdfListTest extends BrambleTestCase {
 
 	@Test
 	public void testConstructors() {
diff --git a/bramble-core/.gitignore b/bramble-core/.gitignore
index eeb02632a0a71dc53ad5bbb4f04aff39855b50e6..217c03c15290909413558c6b2453ab0718e96d8c 100644
--- a/bramble-core/.gitignore
+++ b/bramble-core/.gitignore
@@ -1,3 +1,4 @@
 bin
 build
+test.tmp
 .settings
diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle
index 30ea06e20eafe8e0ef44fe16b9d686d0ab2bf02e..9c2ecbc3c487eb19be1866d932c3898a2bc6fb16 100644
--- a/bramble-core/build.gradle
+++ b/bramble-core/build.gradle
@@ -14,10 +14,7 @@ dependencies {
 	compile 'com.madgag.spongycastle:core:1.54.0.0'
 	compile 'com.h2database:h2:1.4.190'
 
-	testCompile project(':briar-tests') // TODO remove when moving unit tests (#778)
-	testCompile 'junit:junit:4.12'
-	testCompile 'com.google.dagger:dagger-compiler:2.8'
-	testApt 'com.google.dagger:dagger-compiler:2.8'
+	testCompile project(path: ':bramble-api', configuration: 'testOutput')
 }
 
 dependencyVerification {
@@ -26,3 +23,15 @@ dependencyVerification {
 			'com.h2database:h2:23ba495a07bbbb3bd6c3084d10a96dad7a23741b8b6d64b213459a784195a98c'
 	]
 }
+
+// needed to make test output available to bramble-j2se
+configurations {
+	testOutput.extendsFrom(testCompile)
+}
+task jarTest (type: Jar, dependsOn: testClasses) {
+	from sourceSets.test.output
+	classifier = 'test'
+}
+artifacts {
+	testOutput jarTest
+}
diff --git a/briar-tests/src/org/briarproject/RunAction.java b/bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
similarity index 92%
rename from briar-tests/src/org/briarproject/RunAction.java
rename to bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
index ef547ce189deda0120d635bab425dcd693d8334f..7ed4ca7717fe462eee9de468a3ce0d62dc632c05 100644
--- a/briar-tests/src/org/briarproject/RunAction.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/RunAction.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.bramble;
 
 import org.hamcrest.Description;
 import org.jmock.api.Action;
diff --git a/briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
index c14032271dbc39bdc6402e32cf2f75c24e39d6ef..99b3b8b27648acecfdf3e6da30b8a72fb8a5f433 100644
--- a/briar-tests/src/org/briarproject/bramble/client/BdfMessageValidatorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.client;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.client.BdfMessageValidator;
diff --git a/briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
index 818db58b612aa9ed8e386bb15873471599f47156..3f4ff4e30c42f0fd0b0662d1dfa52f257c919886 100644
--- a/briar-tests/src/org/briarproject/bramble/client/ClientHelperImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.client;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
@@ -32,13 +32,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-public class ClientHelperImplTest extends BriarTestCase {
+public class ClientHelperImplTest extends BrambleTestCase {
 
 	private final Mockery context = new Mockery();
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -165,7 +165,8 @@ public class ClientHelperImplTest extends BriarTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryMap() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		final Map<MessageId, BdfDictionary> map =
+				new HashMap<MessageId, BdfDictionary>();
 		map.put(messageId, dictionary);
 		final Transaction txn = new Transaction(null, true);
 
@@ -187,7 +188,8 @@ public class ClientHelperImplTest extends BriarTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryQuery() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		final Map<MessageId, BdfDictionary> map =
+				new HashMap<MessageId, BdfDictionary>();
 		map.put(messageId, dictionary);
 		final BdfDictionary query =
 				BdfDictionary.of(new BdfEntry("query", "me"));
diff --git a/briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
index d4f6bfc9762cf70bf1982ae094f2d870f1fd2e4b..983ab2c00105447b52ebe603471782fe3005c0b4 100644
--- a/briar-tests/src/org/briarproject/bramble/contact/ContactManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.contact;
 
-import org.briarproject.BriarMockTestCase;
+import org.briarproject.bramble.BrambleMockTestCase;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.ContactManager;
@@ -19,13 +19,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class ContactManagerImplTest extends BriarMockTestCase {
+public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	private final Mockery context = new Mockery();
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -132,7 +132,8 @@ public class ContactManagerImplTest extends BriarMockTestCase {
 	@Test
 	public void testActiveContacts() throws Exception {
 		Collection<Contact> activeContacts = Collections.singletonList(contact);
-		final Collection<Contact> contacts = new ArrayList<>(activeContacts);
+		final Collection<Contact> contacts =
+				new ArrayList<Contact>(activeContacts);
 		contacts.add(new Contact(new ContactId(3), remote, local, true, false));
 		final Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
index 21fb4e3102c50c29304d10f592e0ca9ab195366b..61e3a0ad34a4ab1888d236da8377628235b76732 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/AsciiArmourTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/AsciiArmourTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class AsciiArmourTest extends BriarTestCase {
+public class AsciiArmourTest extends BrambleTestCase {
 
 	@Test
 	public void testWrapOnSingleLine() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
index cd6494a400f0905bbba60533d31b144765f90e92..6cb64e3982f44ce5bca6f571d815897c3d24f0e6 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/Blake2sDigestTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/Blake2sDigestTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Test;
 
@@ -8,7 +8,7 @@ import java.util.Random;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class Blake2sDigestTest extends BriarTestCase {
+public class Blake2sDigestTest extends BrambleTestCase {
 
 	// Vectors from BLAKE2 web site: https://blake2.net/blake2s-test.txt
 	private static final String[][] keyedTestVectors = {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
index 241e57c6ae8c449ea7a88b65beb67128218e1211..ac55112ddc0c805a0ae5efba916e5b1caa20e851 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves;
 import org.spongycastle.asn1.x9.X9ECParameters;
@@ -20,7 +20,7 @@ import java.security.SecureRandom;
 import static org.briarproject.bramble.crypto.EllipticCurveConstants.PARAMETERS;
 import static org.junit.Assert.assertEquals;
 
-public class EllipticCurveMultiplicationTest extends BriarTestCase {
+public class EllipticCurveMultiplicationTest extends BrambleTestCase {
 
 	@Test
 	public void testMultiplierProducesSameResultsAsDefault() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
index b9e695eda67af04b34f8272232497e4bf05ec3f9..ec166c34498190b2193c98bac1ba35162ea04f32 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurvePerformanceTest.java
@@ -69,7 +69,7 @@ public class EllipticCurvePerformanceTest {
 		ECPublicKeyParameters public2 =
 				(ECPublicKeyParameters) keyPair2.getPublic();
 		// Time some ECDH key agreements
-		List<Long> samples = new ArrayList<>();
+		List<Long> samples = new ArrayList<Long>();
 		for (int i = 0; i < SAMPLES; i++) {
 			ECDHCBasicAgreement agreement = new ECDHCBasicAgreement();
 			long start = System.nanoTime();
@@ -79,7 +79,7 @@ public class EllipticCurvePerformanceTest {
 		}
 		long agreementMedian = median(samples);
 		// Time some signatures
-		List<byte[]> signatures = new ArrayList<>();
+		List<byte[]> signatures = new ArrayList<byte[]>();
 		samples.clear();
 		for (int i = 0; i < SAMPLES; i++) {
 			Digest digest = new Blake2sDigest();
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
index 44f986b7e61eedbac144c4ca9f30264db087084b..b7c84534bd9dbf38ac4c02ad8c139f2ca583210e 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaGeneratorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.crypto.BlockCipher;
 import org.spongycastle.crypto.engines.AESLightEngine;
@@ -9,7 +9,7 @@ import org.spongycastle.crypto.params.KeyParameter;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class FortunaGeneratorTest extends BriarTestCase {
+public class FortunaGeneratorTest extends BrambleTestCase {
 
 	@Test
 	public void testCounterInitialisedToOne() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
index 6e789aa7fedb2c79b5eb0156a1956ea527a67536..ed8d00eee197f0802adf2fd3c5d7f6d6cc01e888 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/FortunaSecureRandomTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 import org.spongycastle.crypto.BlockCipher;
 import org.spongycastle.crypto.digests.SHA256Digest;
@@ -13,7 +13,7 @@ import static org.briarproject.bramble.crypto.FortunaSecureRandom.SELF_TEST_VECT
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertTrue;
 
-public class FortunaSecureRandomTest extends BriarTestCase {
+public class FortunaSecureRandomTest extends BrambleTestCase {
 
 	@Test
 	public void testClassPassesSelfTest() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
index 00cb0e79822f251a3f01783dae723c8943bafc1b..31d24411d01bbc394c34733189a0287827950207 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyAgreementTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -10,7 +10,7 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class KeyAgreementTest extends BriarTestCase {
+public class KeyAgreementTest extends BrambleTestCase {
 
 	@Test
 	public void testDeriveMasterSecret() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
index 3d80762e06c8c13d8f2009544dc2aee73b892da9..607c99ab83530767a39ac528568d66cf57298d2b 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyDerivationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyDerivationTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.plugin.TransportId;
@@ -16,7 +16,7 @@ import java.util.List;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 
-public class KeyDerivationTest extends BriarTestCase {
+public class KeyDerivationTest extends BrambleTestCase {
 
 	private final TransportId transportId = new TransportId("id");
 	private final CryptoComponent crypto;
@@ -141,7 +141,7 @@ public class KeyDerivationTest extends BriarTestCase {
 	}
 
 	private void assertAllDifferent(TransportKeys... transportKeys) {
-		List<SecretKey> secretKeys = new ArrayList<>();
+		List<SecretKey> secretKeys = new ArrayList<SecretKey>();
 		for (TransportKeys k : transportKeys) {
 			secretKeys.add(k.getPreviousIncomingKeys().getTagKey());
 			secretKeys.add(k.getPreviousIncomingKeys().getHeaderKey());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
index 350354bf0e582a16e3cbc74b5604a47fdf45cdcf..30e2a803e91d4435a8fd5ca0863f4ffe4b4f9fc6 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.KeyParser;
 import org.briarproject.bramble.api.crypto.PrivateKey;
@@ -16,7 +16,7 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATUR
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertTrue;
 
-public class KeyEncodingAndParsingTest extends BriarTestCase {
+public class KeyEncodingAndParsingTest extends BrambleTestCase {
 
 	private final CryptoComponentImpl crypto =
 			new CryptoComponentImpl(new TestSeedProvider());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/MacTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/crypto/MacTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
index 8b9e59bab4515636b55de7526f03b9d3d5668ea2..54b4ac9aa63af859b80caf0f19b267bfc665de3a 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/MacTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MacTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.junit.Test;
@@ -12,7 +12,7 @@ import java.util.Arrays;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 
-public class MacTest extends BriarTestCase {
+public class MacTest extends BrambleTestCase {
 
 	private final CryptoComponent crypto;
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
index ea36d9ca366d51d8cc9984f30870b1fc1e591eb6..6123b1403aeb63e7c2f33439e2a3e05c816696ba 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/MessageEncrypterTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/MessageEncrypterTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.PrivateKey;
 import org.briarproject.bramble.api.crypto.PublicKey;
@@ -11,7 +11,7 @@ import java.security.SecureRandom;
 
 import static org.junit.Assert.assertArrayEquals;
 
-public class MessageEncrypterTest extends BriarTestCase {
+public class MessageEncrypterTest extends BrambleTestCase {
 
 	private final SecureRandom random = new SecureRandom();
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
similarity index 89%
rename from briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
index 5d070af0d088b4f30e95867e136edb16eb3f7bbb..c58d39ba834f0b78a66abcc97987a5184b38a510 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordBasedKdfTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.junit.Test;
 
 import java.util.Random;
@@ -12,7 +12,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class PasswordBasedKdfTest extends BriarTestCase {
+public class PasswordBasedKdfTest extends BrambleTestCase {
 
 	private final CryptoComponentImpl crypto =
 			new CryptoComponentImpl(new TestSeedProvider());
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
similarity index 88%
rename from briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
index 3eea773aa4dc1e85f3d5e358d4049c016bdc8dd2..0b86262896c8234f44fa6af02e32d01d839ff4ce 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/PasswordStrengthEstimatorImplTest.java
@@ -1,13 +1,13 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.junit.Test;
 
 import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG;
 import static org.junit.Assert.assertTrue;
 
-public class PasswordStrengthEstimatorImplTest extends BriarTestCase {
+public class PasswordStrengthEstimatorImplTest extends BrambleTestCase {
 
 	@Test
 	public void testWeakPasswords() {
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
index 7971809ddc30855ca2768ef486ee230a7e42dfda..b2d64aad197fd26179245aaa83e0af1320996bc6 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/SignatureTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/SignatureTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestSeedProvider;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestSeedProvider;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.junit.Test;
@@ -13,7 +13,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class SignatureTest extends BriarTestCase {
+public class SignatureTest extends BrambleTestCase {
 
 	private final CryptoComponent crypto;
 
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
index 50d6c10c2bbf3ba79ab4899d7c9f55e553c745e9..f3cefc1363dc4d8f4fe121f82a1841581cb4d774 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamDecrypterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.util.ByteUtils;
 import org.junit.Test;
@@ -18,7 +18,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_H
 import static org.briarproject.bramble.util.ByteUtils.INT_16_BYTES;
 import static org.junit.Assert.assertArrayEquals;
 
-public class StreamDecrypterImplTest extends BriarTestCase {
+public class StreamDecrypterImplTest extends BrambleTestCase {
 
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
index bb542662c583c8f6d8c341ac6afd2ca88b272ff7..d0d9fd3a4aa4bcd9a4df76de426e9f70e01591bb 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/StreamEncrypterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.junit.Test;
 
@@ -13,7 +13,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.STREAM_H
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
 import static org.junit.Assert.assertArrayEquals;
 
-public class StreamEncrypterImplTest extends BriarTestCase {
+public class StreamEncrypterImplTest extends BrambleTestCase {
 
 	private final AuthenticatedCipher cipher;
 	private final SecretKey streamHeaderKey, frameKey;
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java
diff --git a/briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
index 8c19201f9f1d69138a88cd8e57f28f0e2f4f6c76..6dbfa85b34371dadb35c68caf6bebf67015d0c48 100644
--- a/briar-tests/src/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.crypto;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Test;
@@ -11,7 +11,7 @@ import java.util.Random;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class XSalsa20Poly1305AuthenticatedCipherTest extends BriarTestCase {
+public class XSalsa20Poly1305AuthenticatedCipherTest extends BrambleTestCase {
 
 	// Test vectors from the NaCl paper
 	// http://cr.yp.to/highspeed/naclcrypto-20090310.pdf
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
index 7520fdebd3ca72253865be8df67cc6c1ed76c3ab..df658a551efe390d2515268f0e7dc53b88d3b7e0 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.data.BdfList;
@@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class BdfReaderImplTest extends BriarTestCase {
+public class BdfReaderImplTest extends BrambleTestCase {
 
 	private BdfReaderImpl r = null;
 
diff --git a/briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
index c2856e5b0df73f577e9c868ef0ae1cfbae3fb85a..478a047e7780672faacf5284f5f09337d34de104 100644
--- a/briar-tests/src/org/briarproject/bramble/data/BdfWriterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfWriterImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.util.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
@@ -16,7 +16,7 @@ import java.util.Map;
 import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE;
 import static org.junit.Assert.assertArrayEquals;
 
-public class BdfWriterImplTest extends BriarTestCase {
+public class BdfWriterImplTest extends BrambleTestCase {
 
 	private ByteArrayOutputStream out = null;
 	private BdfWriterImpl w = null;
@@ -155,7 +155,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteList() throws IOException {
-		List<Object> l = new ArrayList<>();
+		List<Object> l = new ArrayList<Object>();
 		for (int i = 0; i < 3; i++) l.add(i);
 		w.writeList(l);
 		// LIST tag, elements as integers, END tag
@@ -164,7 +164,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testListCanContainNull() throws IOException {
-		List<Object> l = new ArrayList<>();
+		List<Object> l = new ArrayList<Object>();
 		l.add(1);
 		l.add(null);
 		l.add(NULL_VALUE);
@@ -177,7 +177,7 @@ public class BdfWriterImplTest extends BriarTestCase {
 	@Test
 	public void testWriteDictionary() throws IOException {
 		// Use LinkedHashMap to get predictable iteration order
-		Map<String, Object> m = new LinkedHashMap<>();
+		Map<String, Object> m = new LinkedHashMap<String, Object>();
 		for (int i = 0; i < 4; i++) m.put(String.valueOf(i), i);
 		w.writeDictionary(m);
 		// DICTIONARY tag, keys as strings and values as integers, END tag
@@ -216,12 +216,12 @@ public class BdfWriterImplTest extends BriarTestCase {
 
 	@Test
 	public void testWriteNestedDictionariesAndLists() throws IOException {
-		Map<String, Object> inner = new LinkedHashMap<>();
+		Map<String, Object> inner = new LinkedHashMap<String, Object>();
 		inner.put("bar", new byte[0]);
-		List<Object> list = new ArrayList<>();
+		List<Object> list = new ArrayList<Object>();
 		list.add(1);
 		list.add(inner);
-		Map<String, Object> outer = new LinkedHashMap<>();
+		Map<String, Object> outer = new LinkedHashMap<String, Object>();
 		outer.put("foo", list);
 		w.writeDictionary(outer);
 		// DICTIONARY tag, "foo" as string, LIST tag, 1 as integer,
diff --git a/briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
similarity index 90%
rename from briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
index 953c99a1fdeceed3034237e2fbb99e952575d90f..9d43ae8e5f17be4fa57375090ccbd8a164939d98 100644
--- a/briar-tests/src/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/data/MetadataEncoderParserIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.data;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.db.Metadata;
@@ -15,7 +15,7 @@ import java.util.Map;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
+public class MetadataEncoderParserIntegrationTest extends BrambleTestCase {
 
 	private MetadataEncoderImpl e;
 	private MetadataParserImpl p;
@@ -99,7 +99,7 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testList() throws FormatException {
-		List<Long> l = new ArrayList<>(4);
+		List<Long> l = new ArrayList<Long>(4);
 		l.add(42L);
 		l.add(1337L);
 		l.add(Long.MIN_VALUE);
@@ -114,7 +114,7 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testDictionary() throws FormatException {
-		Map<String, Boolean> m = new HashMap<>();
+		Map<String, Boolean> m = new HashMap<String, Boolean>();
 		m.put("1", true);
 		m.put("2", false);
 
@@ -130,19 +130,19 @@ public class MetadataEncoderParserIntegrationTest extends BriarTestCase {
 
 	@Test
 	public void testComplexDictionary() throws FormatException {
-		Map<String, List> m = new HashMap<>();
-		List<String> one = new ArrayList<>(3);
+		Map<String, List> m = new HashMap<String, List>();
+		List<String> one = new ArrayList<String>(3);
 		one.add("\uFDD0");
 		one.add("\uFDD1");
 		one.add("\uFDD2");
 		m.put("One", one);
-		List<String> two = new ArrayList<>(2);
+		List<String> two = new ArrayList<String>(2);
 		two.add("\u0080");
 		two.add("\uD800\uDC00");
 		m.put("Two", two);
 		d.put("test", m);
 
-		Map<String, Boolean> m2 = new HashMap<>();
+		Map<String, Boolean> m2 = new HashMap<String, Boolean>();
 		m2.put("should be true", true);
 		d.put("another test", m2);
 
diff --git a/briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
index a5658ed95656277689c01a787a8877f08c8a87c6..85de68c80d1294edb55c708fb938fed34312ea6f 100644
--- a/briar-tests/src/org/briarproject/bramble/db/BasicH2Test.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class BasicH2Test extends BriarTestCase {
+public class BasicH2Test extends BrambleTestCase {
 
 	private static final String CREATE_TABLE =
 			"CREATE TABLE foo (uniqueId BINARY(32), name VARCHAR NOT NULL)";
@@ -322,7 +322,7 @@ public class BasicH2Test extends BriarTestCase {
 
 	private List<String> getNames() throws SQLException {
 		String sql = "SELECT name FROM foo ORDER BY uniqueId";
-		List<String> names = new ArrayList<>();
+		List<String> names = new ArrayList<String>();
 		try {
 			PreparedStatement ps = connection.prepareStatement(sql);
 			ResultSet rs = ps.executeQuery();
diff --git a/briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
index 62b7cc0834153915e53ac6bb53e5ac71be9fcfe6..62d0f83673d0b121a77fb9f4763c3e91456667c4 100644
--- a/briar-tests/src/org/briarproject/bramble/db/DatabaseComponentImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactAddedEvent;
@@ -72,7 +72,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
-public class DatabaseComponentImplTest extends BriarTestCase {
+public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	private final Object txn = new Object();
 	private final ClientId clientId;
@@ -118,8 +118,8 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 
 	private DatabaseComponent createDatabaseComponent(Database<Object> database,
 			EventBus eventBus, ShutdownManager shutdown) {
-		return new DatabaseComponentImpl<>(database, Object.class, eventBus,
-				shutdown);
+		return new DatabaseComponentImpl<Object>(database, Object.class,
+				eventBus, shutdown);
 	}
 
 	@Test
@@ -1701,7 +1701,7 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 		Transaction transaction = db.startTransaction(false);
 		try {
 			db.addLocalMessage(transaction, message, metadata, true);
-			Collection<MessageId> dependencies = new ArrayList<>(2);
+			Collection<MessageId> dependencies = new ArrayList<MessageId>(2);
 			dependencies.add(messageId1);
 			dependencies.add(messageId2);
 			db.addMessageDependencies(transaction, message, dependencies);
diff --git a/briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
index 376d7e54a74fc261a84043e65cabdb041997a867..e60cb5b43783da6359d51f6c60988213cfbe8580 100644
--- a/briar-tests/src/org/briarproject/bramble/db/ExponentialBackoffTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/ExponentialBackoffTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class ExponentialBackoffTest extends BriarTestCase {
+public class ExponentialBackoffTest extends BrambleTestCase {
 
 	private static final int ONE_HOUR = 60 * 60 * 1000;
 
diff --git a/briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
index faf91edcd4d1595a9fcdaa9a6ccd1999ee6252da..adffded9fa03534919bc09627c57ffaf2008da16 100644
--- a/briar-tests/src/org/briarproject/bramble/db/H2DatabaseTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
@@ -1,8 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestDatabaseConfig;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -24,6 +23,7 @@ import org.briarproject.bramble.api.transport.IncomingKeys;
 import org.briarproject.bramble.api.transport.OutgoingKeys;
 import org.briarproject.bramble.api.transport.TransportKeys;
 import org.briarproject.bramble.system.SystemClock;
+import org.briarproject.bramble.TestDatabaseConfig;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -61,7 +61,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class H2DatabaseTest extends BriarTestCase {
+public class H2DatabaseTest extends BrambleTestCase {
 
 	private static final int ONE_MEGABYTE = 1024 * 1024;
 	private static final int MAX_SIZE = 5 * ONE_MEGABYTE;
@@ -868,7 +868,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		assertEquals(0, db.countOfferedMessages(txn, contactId));
 
 		// Add some offered messages and count them
-		List<MessageId> ids = new ArrayList<>();
+		List<MessageId> ids = new ArrayList<MessageId>();
 		for (int i = 0; i < 10; i++) {
 			MessageId m = new MessageId(TestUtils.getRandomId());
 			db.addOfferedMessage(txn, contactId, m);
diff --git a/briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
index 947e802bd4ba1e7da74dd3595997fecb7e24e969..3d4ff414a9df2f39f5aa04fe942a670c086c1895 100644
--- a/briar-tests/src/org/briarproject/bramble/db/LockFairnessTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import java.util.concurrent.CountDownLatch;
@@ -12,7 +12,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class LockFairnessTest extends BriarTestCase {
+public class LockFairnessTest extends BrambleTestCase {
 
 	@Test
 	public void testReadersCanShareTheLock() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
index 77b849b60e9b4e17a48bb4f0f20df76b682c6c40..4226f2af5b67e55718b61c8d575f45adae372537 100644
--- a/briar-tests/src/org/briarproject/bramble/db/TransactionIsolationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/TransactionIsolationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.db;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -19,7 +19,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class TransactionIsolationTest extends BriarTestCase {
+public class TransactionIsolationTest extends BrambleTestCase {
 
 	private static final String DROP_TABLE = "DROP TABLE foo IF EXISTS";
 	private static final String CREATE_TABLE = "CREATE TABLE foo"
diff --git a/briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
index f35044b07992fd52d8ad4ec2276e8dc6d8eeed1b..35e8ffa7055eada1f7d4f9189717d4593c077371 100644
--- a/briar-tests/src/org/briarproject/bramble/identity/IdentityManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.identity;
 
-import org.briarproject.BriarMockTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleMockTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
@@ -24,7 +24,7 @@ import static org.briarproject.bramble.api.identity.Author.Status.UNVERIFIED;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.junit.Assert.assertEquals;
 
-public class IdentityManagerImplTest extends BriarMockTestCase {
+public class IdentityManagerImplTest extends BrambleMockTestCase {
 
 	private final IdentityManager identityManager;
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
@@ -79,7 +79,7 @@ public class IdentityManagerImplTest extends BriarMockTestCase {
 	@Test
 	public void testGetAuthorStatus() throws DbException {
 		final AuthorId authorId = new AuthorId(TestUtils.getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		final Collection<Contact> contacts = new ArrayList<Contact>();
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
diff --git a/briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
index 8efc0f535c087a5adc904b5191b13d4f2a9bedfe..0eab6958ca4690c604600652b186cc55b4fbfe85 100644
--- a/briar-tests/src/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.keyagreement;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.KeyPair;
 import org.briarproject.bramble.api.crypto.PublicKey;
@@ -20,7 +20,7 @@ import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
-public class KeyAgreementProtocolTest extends BriarTestCase {
+public class KeyAgreementProtocolTest extends BrambleTestCase {
 
 	@Rule
 	public JUnitRuleMockery context = new JUnitRuleMockery() {{
diff --git a/briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
index 7fb15985421feb88af66cdbcefaac03dfff60449..9249bb4be717d1f2aa55396d8df940f90ed83e8c 100644
--- a/briar-tests/src/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/ShutdownManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.lifecycle;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.lifecycle.ShutdownManager;
 import org.junit.Test;
 
@@ -10,12 +10,12 @@ import java.util.Set;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class ShutdownManagerImplTest extends BriarTestCase {
+public class ShutdownManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testAddAndRemove() {
 		ShutdownManager s = createShutdownManager();
-		Set<Integer> handles = new HashSet<>();
+		Set<Integer> handles = new HashSet<Integer>();
 		for (int i = 0; i < 100; i++) {
 			int handle = s.addShutdownHook(new Runnable() {
 				@Override
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
index 894dc4e480ecf369f362c3bdfd5241ad45ce86fd..d356b86aac8c11aedfa883c3451cb4f873f641b7 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/BackoffImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/BackoffImplTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class BackoffImplTest extends BriarTestCase {
+public class BackoffImplTest extends BrambleTestCase {
 
 	private static final int MIN_INTERVAL = 60 * 1000;
 	private static final int MAX_INTERVAL = 60 * 60 * 1000;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
index c455cd82f6a2aede555905cf2fcc19d590b437cf..9bc1895970db124c92fcead09a8bb64046986a54 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.plugin.ConnectionRegistry;
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class ConnectionRegistryImplTest extends BriarTestCase {
+public class ConnectionRegistryImplTest extends BrambleTestCase {
 
 	private final ContactId contactId, contactId1;
 	private final TransportId transportId, transportId1;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
index ad4e4b665fd2da8bf385821e6ea8914306e98ba2..f4c6e650dcd964c57a4cec8c0c949a062dd59ad0 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/PluginManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.plugin.ConnectionManager;
 import org.briarproject.bramble.api.plugin.PluginConfig;
@@ -23,7 +23,7 @@ import java.util.Arrays;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
-public class PluginManagerImplTest extends BriarTestCase {
+public class PluginManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testStartAndStop() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
index 3cdbcf8a67ca34248ef53a1b75c586e21a4c9215..15c48fb1471485f09ae7e1ad82ce71ea4f44dcdb 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/PollerTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.plugin;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.RunAction;
+import org.briarproject.bramble.RunAction;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactStatusChangedEvent;
 import org.briarproject.bramble.api.plugin.ConnectionManager;
@@ -32,7 +32,7 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
-public class PollerTest extends BriarTestCase {
+public class PollerTest extends BrambleTestCase {
 
 	private final ContactId contactId = new ContactId(234);
 	private final int pollingInterval = 60 * 1000;
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
index cd8e31d647c518d0e6633aeed9c9db927d5105e4..401d0da617cbf629ff8b4931475116d60c36dcea 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.tcp;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.keyagreement.KeyAgreementConnection;
@@ -39,7 +39,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-public class LanTcpPluginTest extends BriarTestCase {
+public class LanTcpPluginTest extends BrambleTestCase {
 
 	private final ContactId contactId = new ContactId(234);
 	private final Backoff backoff = new TestBackoff();
@@ -194,7 +194,8 @@ public class LanTcpPluginTest extends BriarTestCase {
 				plugin.createKeyAgreementListener(new byte[COMMIT_LENGTH]);
 		assertNotNull(kal);
 		Callable<KeyAgreementConnection> c = kal.listen();
-		FutureTask<KeyAgreementConnection> f = new FutureTask<>(c);
+		FutureTask<KeyAgreementConnection> f =
+				new FutureTask<KeyAgreementConnection>(c);
 		new Thread(f).start();
 		// The plugin should have bound a socket and stored the port number
 		BdfList descriptor = kal.getDescriptor();
@@ -290,7 +291,7 @@ public class LanTcpPluginTest extends BriarTestCase {
 	private static class Callback implements DuplexPluginCallback {
 
 		private final Map<ContactId, TransportProperties> remote =
-				new Hashtable<>();
+				new Hashtable<ContactId, TransportProperties>();
 		private final CountDownLatch propertiesLatch = new CountDownLatch(1);
 		private final CountDownLatch connectionsLatch = new CountDownLatch(1);
 		private final TransportProperties local = new TransportProperties();
diff --git a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
similarity index 60%
rename from briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
index 510b2a98e3510bc54c2917ea0b1039309d9b33e1..9271772d5ba10ed8d11f0b3e6990b1c45d9ce547 100644
--- a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.properties;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
 
-public class TransportPropertyManagerImplTest extends BriarTestCase {
+public class TransportPropertyManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testUnitTestsExist() {
diff --git a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
index 3a67bb7f87da39515259e785a4d9a12317892d3c..267d962e6c9472929a8df1b188a0ffdf07cc848a 100644
--- a/briar-tests/src/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.properties;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
@@ -23,7 +23,7 @@ import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_L
 import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
 import static org.junit.Assert.assertEquals;
 
-public class TransportPropertyValidatorTest extends BriarTestCase {
+public class TransportPropertyValidatorTest extends BrambleTestCase {
 
 	private final TransportId transportId;
 	private final BdfDictionary bdfDictionary;
diff --git a/briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
index 1652208d67b3f7e4b588bef7ff855247da4de55e..1f380e77d5c66bddc93b011b576ccb407ec2e8de 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/PacketReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/PacketReaderImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.util.ByteUtils;
@@ -17,7 +17,7 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD
 import static org.briarproject.bramble.api.sync.SyncConstants.PACKET_HEADER_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class PacketReaderImplTest extends BriarTestCase {
+public class PacketReaderImplTest extends BrambleTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testFormatExceptionIfAckIsTooLarge() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
index d9c58531e2a397a71717b43618dd3440d4a79043..6dc90f0fd3f991b8f0e63d43ce457d52d140a051 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.db.Transaction;
@@ -20,7 +20,7 @@ import java.util.concurrent.Executor;
 
 import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS;
 
-public class SimplexOutgoingSessionTest extends BriarTestCase {
+public class SimplexOutgoingSessionTest extends BrambleTestCase {
 
 	private final Mockery context;
 	private final DatabaseComponent db;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
index f97d3fe32a77b910d2fcbf51b824d654e30e980c..ceb51443089538067d34f5074f1bb809fed36d1a 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -39,7 +39,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class SyncIntegrationTest extends BriarTestCase {
+public class SyncIntegrationTest extends BrambleTestCase {
 
 	@Inject
 	GroupFactory groupFactory;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
index 456911d54f2d94aead4306cb583b1ee7d26f7545..67155b40ceb1b56b1ac89dfac5b3301a98d64c32 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.crypto.CryptoModule;
 import org.briarproject.bramble.transport.TransportModule;
 
diff --git a/briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
index a436e8977fc53729db0e1273147e19a0c999851a..a7cb067c6fdeb99580fe9e82b5431b8a024567e7 100644
--- a/briar-tests/src/org/briarproject/bramble/sync/ValidationManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.sync;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DatabaseComponent;
@@ -38,7 +38,7 @@ import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.UNKNOWN;
 
-public class ValidationManagerImplTest extends BriarTestCase {
+public class ValidationManagerImplTest extends BrambleTestCase {
 
 	private final ClientId clientId =
 			new ClientId(TestUtils.getRandomString(5));
@@ -831,7 +831,8 @@ public class ValidationManagerImplTest extends BriarTestCase {
 				context.mock(IncomingMessageHook.class);
 		final MessageId messageId3 = new MessageId(TestUtils.getRandomId());
 		final MessageId messageId4 = new MessageId(TestUtils.getRandomId());
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependents =
+				new LinkedHashMap<MessageId, State>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
 		final Transaction txn = new Transaction(null, true);
@@ -952,10 +953,12 @@ public class ValidationManagerImplTest extends BriarTestCase {
 				raw);
 		final Message message4 = new Message(messageId4, groupId, timestamp,
 				raw);
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependents =
+				new LinkedHashMap<MessageId, State>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependencies =
+				new LinkedHashMap<MessageId, State>();
 		twoDependencies.put(messageId1, DELIVERED);
 		twoDependencies.put(messageId2, DELIVERED);
 		final Transaction txn = new Transaction(null, true);
@@ -1117,7 +1120,8 @@ public class ValidationManagerImplTest extends BriarTestCase {
 		final MessageValidator validator = context.mock(MessageValidator.class);
 		final IncomingMessageHook hook =
 				context.mock(IncomingMessageHook.class);
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		final Map<MessageId, State> twoDependencies =
+				new LinkedHashMap<MessageId, State>();
 		twoDependencies.put(messageId, DELIVERED);
 		twoDependencies.put(messageId2, UNKNOWN);
 		final Transaction txn = new Transaction(null, true);
diff --git a/briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java b/bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
similarity index 92%
rename from briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
index ad9affb9a737d3e755604ad36263109c641a93f2..b4db19bad12d39c3c6ccfb4835a675a5fcfdf11f 100644
--- a/briar-tests/src/org/briarproject/bramble/system/LinuxSeedProviderTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/system/LinuxSeedProviderTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.system;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.util.OsUtils;
 import org.junit.After;
@@ -18,7 +18,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class LinuxSeedProviderTest extends BriarTestCase {
+public class LinuxSeedProviderTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 
@@ -33,7 +33,7 @@ public class LinuxSeedProviderTest extends BriarTestCase {
 			System.err.println("WARNING: Skipping test, can't run on this OS");
 			return;
 		}
-		Set<Bytes> seeds = new HashSet<>();
+		Set<Bytes> seeds = new HashSet<Bytes>();
 		LinuxSeedProvider p = new LinuxSeedProvider();
 		for (int i = 0; i < 1000; i++) {
 			byte[] seed = p.getSeed();
diff --git a/briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
index d3de3b87ae438af7ce3a4973cc7a49c08a6b8185..d4eed7a5357fe410a8afd21dfc39807df60866e6 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/KeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
@@ -24,13 +24,13 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class KeyManagerImplTest extends BriarTestCase {
+public class KeyManagerImplTest extends BrambleTestCase {
 
 	private final Mockery context = new Mockery();
 	private final KeyManagerImpl keyManager;
@@ -63,7 +63,7 @@ public class KeyManagerImplTest extends BriarTestCase {
 		Author remoteAuthor = new Author(remoteAuthorId, "author",
 				getRandomBytes(42));
 		AuthorId localAuthorId = new AuthorId(getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		final Collection<Contact> contacts = new ArrayList<Contact>();
 		contacts.add(new Contact(contactId, remoteAuthor, localAuthorId, true,
 				true));
 		contacts.add(new Contact(inactiveContactId, remoteAuthor, localAuthorId,
diff --git a/briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
index 827ba97e2840e3f6a945cfd8619f164e8541b90e..83b24340f25ba7755f477c8a2f804f4dea838906 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/ReorderingWindowTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/ReorderingWindowTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.transport.ReorderingWindow.Change;
 import org.junit.Test;
 
@@ -12,7 +12,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.REORDERI
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class ReorderingWindowTest extends BriarTestCase {
+public class ReorderingWindowTest extends BrambleTestCase {
 
 	private static final int BITMAP_BYTES = REORDERING_WINDOW_SIZE / 8;
 
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
index cd01b5779c7a2753d7d3a6943113bbb1da8f7902..6423988313ee3161763545047c6bd753ae8cf411 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.StreamDecrypter;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -9,7 +9,7 @@ import org.junit.Test;
 import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class StreamReaderImplTest extends BriarTestCase {
+public class StreamReaderImplTest extends BrambleTestCase {
 
 	@Test
 	public void testEmptyFramesAreSkipped() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
similarity index 93%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
index 8292f804f3bd2113bbdcf393a78fb69d376f7228..85214cacb1ddf33300d02579775393a45e8cf081 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderWriterIntegrationTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.crypto.StreamDecrypter;
 import org.briarproject.bramble.api.crypto.StreamEncrypter;
 import org.junit.Test;
@@ -19,7 +19,7 @@ import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENG
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-public class StreamReaderWriterIntegrationTest extends BriarTestCase {
+public class StreamReaderWriterIntegrationTest extends BrambleTestCase {
 
 	@Test
 	public void testWriteAndRead() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
index 01e9c7c0e94ee9ae0027f318c2db853b31544500..c7d7a16d6c3b2876c1d8c9937e1d0e001ffc0a7a 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/StreamWriterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.crypto.StreamEncrypter;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -9,7 +9,7 @@ import org.junit.Test;
 import static org.briarproject.bramble.api.transport.TransportConstants.MAX_PAYLOAD_LENGTH;
 import static org.junit.Assert.assertEquals;
 
-public class StreamWriterImplTest extends BriarTestCase {
+public class StreamWriterImplTest extends BrambleTestCase {
 
 	@Test
 	public void testCloseWithoutWritingWritesFinalFrame() throws Exception {
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TestStreamDecrypter.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamDecrypter.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/transport/TestStreamDecrypter.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamDecrypter.java
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TestStreamEncrypter.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamEncrypter.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/transport/TestStreamEncrypter.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TestStreamEncrypter.java
diff --git a/briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
index 71e646bf98df95ee5124cefa273d78a454825d9e..6bce11a8387ba5408dc1363fbab76aaa9cc4cdca 100644
--- a/briar-tests/src/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.transport;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.RunAction;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.RunAction;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -40,7 +40,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-public class TransportKeyManagerImplTest extends BriarTestCase {
+public class TransportKeyManagerImplTest extends BrambleTestCase {
 
 	private final TransportId transportId = new TransportId("id");
 	private final long maxLatency = 30 * 1000; // 30 seconds
@@ -62,7 +62,8 @@ public class TransportKeyManagerImplTest extends BriarTestCase {
 				context.mock(ScheduledExecutorService.class);
 		final Clock clock = context.mock(Clock.class);
 
-		final Map<ContactId, TransportKeys> loaded = new LinkedHashMap<>();
+		final Map<ContactId, TransportKeys> loaded =
+				new LinkedHashMap<ContactId, TransportKeys>();
 		final TransportKeys shouldRotate = createTransportKeys(900, 0);
 		final TransportKeys shouldNotRotate = createTransportKeys(1000, 0);
 		loaded.put(contactId, shouldRotate);
@@ -341,7 +342,7 @@ public class TransportKeyManagerImplTest extends BriarTestCase {
 		final boolean alice = true;
 		final TransportKeys transportKeys = createTransportKeys(1000, 0);
 		// Keep a copy of the tags
-		final List<byte[]> tags = new ArrayList<>();
+		final List<byte[]> tags = new ArrayList<byte[]>();
 		final Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
diff --git a/briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
index 54eebbce128b94ed3b4339884d0b3fbc2511e110..a4fda13b8c3f19ccbad0c8ecc9a057a49cfdefcf 100644
--- a/briar-tests/src/org/briarproject/bramble/util/ByteUtilsTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.util;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.briarproject.bramble.util.ByteUtils.MAX_16_BIT_UNSIGNED;
@@ -8,7 +8,7 @@ import static org.briarproject.bramble.util.ByteUtils.MAX_32_BIT_UNSIGNED;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-public class ByteUtilsTest extends BriarTestCase {
+public class ByteUtilsTest extends BrambleTestCase {
 
 	@Test
 	public void testReadUint16() {
diff --git a/briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java b/bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
index 0814db61119b9adbcc40a85781e4d5d0b361e69f..140d654a4be35900499e22bb1e2f9c8356a9dbd4 100644
--- a/briar-tests/src/org/briarproject/bramble/util/StringUtilsTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/util/StringUtilsTest.java
@@ -1,13 +1,13 @@
 package org.briarproject.bramble.util;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 
-public class StringUtilsTest extends BriarTestCase {
+public class StringUtilsTest extends BrambleTestCase {
 
 	@Test
 	public void testToHexString() {
diff --git a/bramble-j2se/build.gradle b/bramble-j2se/build.gradle
index d61f5dcdcdae51e34d8e282aa8969d248ea99fd1..5a874f7d9ca6538e5836a393f1077291b54748c5 100644
--- a/bramble-j2se/build.gradle
+++ b/bramble-j2se/build.gradle
@@ -7,4 +7,10 @@ apply plugin: 'witness'
 dependencies {
 	compile project(':bramble-core')
 	compile fileTree(dir: 'libs', include: '*.jar')
+
+	testCompile project(path: ':bramble-core', configuration: 'testOutput')
+}
+
+tasks.withType(Test) {
+	systemProperty 'java.library.path', 'libs'
 }
diff --git a/briar-tests/src/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
similarity index 100%
rename from briar-tests/src/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImplTest.java
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
similarity index 88%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
index 9de331d42ffefc13b96a8ba0ed5a86a70219ffc3..26afffe3b9c5ca6aabcdb5d97ffcce3e9958b1e6 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/LinuxRemovableDriveFinderTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class LinuxRemovableDriveFinderTest extends BriarTestCase {
+public class LinuxRemovableDriveFinderTest extends BrambleTestCase {
 
 	@Test
 	public void testParseMountPoint() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
similarity index 87%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
index 3050581d5d102a57822d5b60ed078d158d8b6c50..fbbddca405128745b892bb5797d29345988955db 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/MacRemovableDriveFinderTest.java
@@ -1,11 +1,11 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class MacRemovableDriveFinderTest extends BriarTestCase {
+public class MacRemovableDriveFinderTest extends BrambleTestCase {
 
 	@Test
 	public void testParseMountPoint() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
similarity index 94%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
index d2bd29cd4e52aa80677c9d1461b1bac41637153a..a58fc2a533bb572f3ee4cd3131c5782e825fe3e3 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.plugin.file.RemovableDriveMonitor.Callback;
 import org.junit.Test;
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class PollingRemovableDriveMonitorTest extends BriarTestCase {
+public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 
 	@Test
 	public void testOneCallbackPerFile() throws Exception {
@@ -41,7 +41,7 @@ public class PollingRemovableDriveMonitorTest extends BriarTestCase {
 		};
 		// Create a callback that waits for two files
 		final CountDownLatch latch = new CountDownLatch(2);
-		final List<File> detected = new ArrayList<>();
+		final List<File> detected = new ArrayList<File>();
 		@NotNullByDefault
 		Callback callback = new Callback() {
 
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
index 25a2a1b16ba099d96dfcfb6fb1083a426d9abc3b..d803b0a50e00543f47bd606a55c422a07e5707a2 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.ImmediateExecutor;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.ImmediateExecutor;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
 import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
@@ -29,7 +29,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class RemovableDrivePluginTest extends BriarTestCase {
+public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 	private final ContactId contactId = new ContactId(234);
@@ -73,7 +73,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfNoDriveIsChosen() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 
@@ -112,7 +112,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfOutputDirDoesNotExist() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 
@@ -151,7 +151,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNullIfOutputDirIsAFile() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a file rather than a directory
@@ -192,7 +192,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWriterIsNotNullIfOutputDirIsADir() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
@@ -236,7 +236,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 	public void testWritingToWriter() throws Exception {
 		final File drive1 = new File(testDir, "1");
 		final File drive2 = new File(testDir, "2");
-		final List<File> drives = new ArrayList<>();
+		final List<File> drives = new ArrayList<File>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
similarity index 93%
rename from briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
index 6b49f7d70331a026f3533d67993edfa5dc0fb175..83d26f1df3b2199ec9906d4c53f0f3a23501ec95 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble.plugin.file;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.plugin.file.RemovableDriveMonitor.Callback;
 import org.briarproject.bramble.util.OsUtils;
@@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class UnixRemovableDriveMonitorTest extends BriarTestCase {
+public class UnixRemovableDriveMonitorTest extends BrambleTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 
@@ -61,7 +61,7 @@ public class UnixRemovableDriveMonitorTest extends BriarTestCase {
 			return;
 		}
 		// Create a callback that will wait for two files before stopping
-		final List<File> detected = new ArrayList<>();
+		final List<File> detected = new ArrayList<File>();
 		final CountDownLatch latch = new CountDownLatch(2);
 		@NotNullByDefault
 		final Callback callback = new Callback() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
similarity index 95%
rename from briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
index 35aea6e15ca6c966c7dd13013b4579632e7fa86d..02b0456994f389e7a19c37609d2dbd0bf37ae82f 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/CountryCodesTest.java
@@ -1,12 +1,12 @@
 package org.briarproject.bramble.plugin.modem;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
-public class CountryCodesTest extends BriarTestCase {
+public class CountryCodesTest extends BrambleTestCase {
 
 	@Test
 	public void testTranslation() {
diff --git a/briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
rename to bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
index d50a54fae95b535cb76881e6a2fa97e7851d0bea..64df9fce6fc3791bccdae1de50e72a8085a21005 100644
--- a/briar-tests/src/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.bramble.plugin.modem;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.bramble.BrambleTestCase;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback;
 import org.briarproject.bramble.api.properties.TransportProperties;
@@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class ModemPluginTest extends BriarTestCase {
+public class ModemPluginTest extends BrambleTestCase {
 
 	private static final String ISO_1336 = "GB";
 	private static final String NUMBER = "0123456789";
diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index ab370acc6b5a677ae6ea02dd53416f690382cef2..5d24464bab565d9c6d32fe46ac3fe4fe1f867b46 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -30,14 +30,13 @@ dependencies {
 	compile 'info.guardianproject.trustedintents:trustedintents:0.2'
 	compile 'de.hdodenhof:circleimageview:2.1.0'
 	compile 'com.google.zxing:core:3.2.1'
-	apt 'com.google.dagger:dagger-compiler:2.0.2'
+	apt 'com.google.dagger:dagger-compiler:2.8'
 	provided 'javax.annotation:jsr250-api:1.0'
 	compile 'com.jpardogo.materialtabstrip:library:1.1.0'
 	compile 'com.github.bumptech.glide:glide:3.7.0'
 	compile 'uk.co.samuelwall:material-tap-target-prompt:1.3.0'
 
-	testCompile 'junit:junit:4.12'
-	testCompile project(path: ':briar-tests')
+	testCompile project(path: ':bramble-core', configuration: 'testOutput')
 	testCompile 'org.robolectric:robolectric:3.0'
 	testCompile 'org.mockito:mockito-core:1.10.19'
 }
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
index 6b4d135b4b032bbbb14045a0cc2f109df6c98ee2..11810fb1caae3cc212f04b0dded7cb7063e0374a 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
@@ -4,7 +4,7 @@ import android.content.Intent;
 
 import junit.framework.Assert;
 
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.identity.Author;
 import org.briarproject.bramble.api.identity.AuthorId;
diff --git a/briar-core/.gitignore b/briar-core/.gitignore
index eeb02632a0a71dc53ad5bbb4f04aff39855b50e6..217c03c15290909413558c6b2453ab0718e96d8c 100644
--- a/briar-core/.gitignore
+++ b/briar-core/.gitignore
@@ -1,3 +1,4 @@
 bin
 build
+test.tmp
 .settings
diff --git a/briar-core/build.gradle b/briar-core/build.gradle
index d75100870a6a76734250db066794bb589098b2d0..74691734ca615cc6fe3e3291fcc622abd19d613f 100644
--- a/briar-core/build.gradle
+++ b/briar-core/build.gradle
@@ -16,11 +16,10 @@ dependencies {
 	compile 'com.squareup.okhttp3:okhttp:3.3.1'
 	compile 'org.jsoup:jsoup:1.9.2'
 
-	testCompile project(':briar-tests') // TODO remove when moving unit tests (#778)
-	testCompile 'junit:junit:4.12'
+	testCompile project(':bramble-core') // TODO get rid of this dependency
+
+	testCompile project(path: ':bramble-api', configuration: 'testOutput')
 	testCompile 'net.jodah:concurrentunit:0.4.2'
-	testCompile 'com.google.dagger:dagger-compiler:2.8'
-	testApt 'com.google.dagger:dagger-compiler:2.8'
 }
 
 dependencyVerification {
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
index a03603046af7bec2235af592f0afcdf61a0e2edd..454d79ebc3547eb85af8147b615f4a0554dd5814 100644
--- a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTest.java
@@ -2,8 +2,7 @@ package org.briarproject.briar;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.client.ContactGroupFactory;
 import org.briarproject.bramble.api.contact.Contact;
@@ -60,11 +59,11 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
-import static org.briarproject.TestUtils.getSecretKey;
+import static org.briarproject.bramble.TestUtils.getSecretKey;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.DELIVERED;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.INVALID;
 import static org.briarproject.bramble.api.sync.ValidationManager.State.PENDING;
+import static org.briarproject.briar.TestPluginConfigModule.MAX_LATENCY;
 import static org.junit.Assert.assertTrue;
 
 @MethodsNotNullByDefault
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
index dc76b464261ff1484121d869e8ac8cf7e8223456..1a39d901a7c29e8a3effa195eab63f51a7df5ca7 100644
--- a/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarIntegrationTestComponent.java
@@ -1,8 +1,7 @@
 package org.briarproject.briar;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.db.DatabaseComponent;
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java b/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..5523fdd0a9b76ddc69221c318520a3c453cae42a
--- /dev/null
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarTestCase.java
@@ -0,0 +1,11 @@
+package org.briarproject.briar;
+
+import org.briarproject.bramble.BrambleTestCase;
+
+public abstract class BriarTestCase extends BrambleTestCase {
+
+	public BriarTestCase() {
+		super();
+	}
+
+}
diff --git a/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java b/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..5aa297b13056cb442c404fac481d317bb3892fce
--- /dev/null
+++ b/briar-core/src/test/java/org/briarproject/briar/BriarTestUtils.java
@@ -0,0 +1,28 @@
+package org.briarproject.briar;
+
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.api.client.MessageTracker;
+import org.briarproject.briar.api.client.MessageTracker.GroupCount;
+
+import static org.junit.Assert.assertEquals;
+
+public class BriarTestUtils {
+
+	public static void assertGroupCount(MessageTracker tracker, GroupId g,
+			long msgCount, long unreadCount, long latestMsgTime)
+			throws DbException {
+		GroupCount groupCount = tracker.getGroupCount(g);
+		assertEquals(msgCount, groupCount.getMsgCount());
+		assertEquals(unreadCount, groupCount.getUnreadCount());
+		assertEquals(latestMsgTime, groupCount.getLatestMsgTime());
+	}
+
+	public static void assertGroupCount(MessageTracker tracker, GroupId g,
+			long msgCount, long unreadCount) throws	DbException {
+		GroupCount c1 = tracker.getGroupCount(g);
+		assertEquals(msgCount, c1.getMsgCount());
+		assertEquals(unreadCount, c1.getUnreadCount());
+	}
+
+}
diff --git a/briar-tests/src/org/briarproject/CaptureArgumentAction.java b/briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
similarity index 96%
rename from briar-tests/src/org/briarproject/CaptureArgumentAction.java
rename to briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
index 6fda69885a8ca621afcf8370ea47a4e83bc6ee7f..34a5788fc9a934009b135879c3a034fdd0ad1423 100644
--- a/briar-tests/src/org/briarproject/CaptureArgumentAction.java
+++ b/briar-core/src/test/java/org/briarproject/briar/CaptureArgumentAction.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.hamcrest.Description;
 import org.jmock.api.Action;
diff --git a/briar-tests/src/org/briarproject/TestLifecycleModule.java b/briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
similarity index 98%
rename from briar-tests/src/org/briarproject/TestLifecycleModule.java
rename to briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
index 8f8c9030b27d24a1bebb138efe3bff884497d98f..7344aaf4b40e65da75ea0e71d2aefc83ed2e8a0a 100644
--- a/briar-tests/src/org/briarproject/TestLifecycleModule.java
+++ b/briar-core/src/test/java/org/briarproject/briar/TestLifecycleModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
diff --git a/briar-tests/src/org/briarproject/TestPluginConfigModule.java b/briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
similarity index 97%
rename from briar-tests/src/org/briarproject/TestPluginConfigModule.java
rename to briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
index 416d5f1085b8c3d2f70e86c9fda610cd7ee137a8..ae5a4a2e358f515e689f00b365073f1b91cadc1e 100644
--- a/briar-tests/src/org/briarproject/TestPluginConfigModule.java
+++ b/briar-core/src/test/java/org/briarproject/briar/TestPluginConfigModule.java
@@ -1,4 +1,4 @@
-package org.briarproject;
+package org.briarproject.briar;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.plugin.PluginConfig;
diff --git a/briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
index 3430dc39909d5190b68128db60e188a983bf9668..ee2a275226b6bb0c5f5b55d8104b420c4762020a 100644
--- a/briar-tests/src/org/briarproject/briar/blog/BlogManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
@@ -34,8 +34,8 @@ import org.junit.Test;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
index 85a2659d09ee3eccfea1c8dabf10a468eb2fd7e1..8feaeaa4e66ef36efed3eb9053f84f71917a10db 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.briar.BriarIntegrationTest;
@@ -21,7 +21,7 @@ import java.util.Iterator;
 
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.briar.api.blog.MessageType.COMMENT;
 import static org.briarproject.briar.api.blog.MessageType.POST;
 import static org.briarproject.briar.api.blog.MessageType.WRAPPED_COMMENT;
diff --git a/briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
index 56c8999bd9bdf5fcee08e05acc41d0ca2c4d0b00..8bc1c865ccab215d04f381e3c21d2f1e68c896f9 100644
--- a/briar-tests/src/org/briarproject/briar/blog/BlogPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.blog;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
index 2c38258e2a42e7bf6570fed19551cf27e5faa4a3..0398163611d7be820ce7b8e5bf35927b5f669e09 100644
--- a/briar-tests/src/org/briarproject/briar/client/MessageQueueManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.client;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.CaptureArgumentAction;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.briar.CaptureArgumentAction;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.data.BdfList;
@@ -130,7 +130,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message is too short to be a valid queue message
@@ -141,7 +141,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 		}});
 
@@ -174,7 +174,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message has a negative queue position
@@ -187,7 +187,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 		}});
 
@@ -220,7 +220,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 				context.mock(ValidationManager.class);
 
 		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
+				new AtomicReference<MessageValidator>();
 		final QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		final Metadata metadata = new Metadata();
@@ -234,7 +234,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
 					with(any(MessageValidator.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<MessageValidator>(captured,
 					MessageValidator.class, 1));
 			// The message should be delegated
 			oneOf(queueMessageValidator).validateMessage(
@@ -267,7 +267,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -283,7 +283,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -319,7 +319,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -337,7 +337,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -375,7 +375,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -392,7 +392,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
@@ -433,7 +433,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		final ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
+				new AtomicReference<IncomingMessageHook>();
 		final IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
@@ -457,7 +457,7 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
 					with(any(IncomingMessageHook.class)));
-			will(new CaptureArgumentAction<>(captured,
+			will(new CaptureArgumentAction<IncomingMessageHook>(captured,
 					IncomingMessageHook.class, 1));
 			oneOf(db).getGroupMetadata(txn, groupId);
 			will(returnValue(groupMetadata));
diff --git a/briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java b/briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
similarity index 96%
rename from briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
index e35af03566c3cf9cc840bf6c89f6538d18e1d523..87c8f5a54bb700e6e5f88cd91aacf9c873cffadf 100644
--- a/briar-tests/src/org/briarproject/briar/client/MessageTreeImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/client/MessageTreeImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.client;
 
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.briar.api.client.MessageTree;
@@ -19,7 +19,7 @@ public class MessageTreeImplTest {
 
 	@Test
 	public void testMessageTree() {
-		tree = new MessageTreeImpl<>();
+		tree = new MessageTreeImpl<TestNode>();
 		testSimpleTree();
 		tree.clear();
 		testSimpleTree();
diff --git a/briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
index 0a4a0ac6fd89be677b770a3a7e960f32af9310d5..f8a5b83548fddf340d3dd1c35c56f126035d9b74 100644
--- a/briar-tests/src/org/briarproject/briar/forum/ForumManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
index f4527089ca20feccf79675d2c611f5558d9c2f00..f8a0f119d5f8e187ade887433a9aa67c83c5b009 100644
--- a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.briar.BriarIntegrationTest;
 import org.briarproject.briar.BriarIntegrationTestComponent;
@@ -17,7 +17,7 @@ import java.util.Collection;
 
 import javax.annotation.Nullable;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
diff --git a/briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
index 4eacdc503360ae59ad146f36a5dcd29a025aff48..0fe57588465f83de465b7a9f1e5f1c782ed037ae 100644
--- a/briar-tests/src/org/briarproject/briar/forum/ForumPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.forum;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
index c0de31ef2deb531118380d570a5eb5c34ece7808..b424040ec5c62f4f4c4ac47ee6dadcfb6fbf426a 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroduceeManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
index 09c0474d9135257aa485f77edc225f952107d7fa..1861eeef5a589cd9d2cfc1845cdf01fe7a2bea65 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroducerManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
index 80cd0c1581af6739fd5cf07134c72fb993ca6cfb..8141dd0f4e92bc97abf7f59ea4deb8303e1b50f8 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java
@@ -2,8 +2,8 @@ package org.briarproject.briar.introduction;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
@@ -51,8 +51,8 @@ import java.util.logging.Logger;
 
 import javax.inject.Inject;
 
-import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.TestPluginConfigModule.TRANSPORT_ID;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.briar.api.client.MessageQueueManager.QUEUE_STATE_KEY;
 import static org.briarproject.briar.api.introduction.IntroductionConstants.E_PUBLIC_KEY;
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
index ba3dcae6a109181a4410a5dec354109dbbdec0e5..7528bd1a3abfbc301668557396470e4cc5d4d107 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestPluginConfigModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.contact.ContactModule;
 import org.briarproject.bramble.crypto.CryptoModule;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
index 6d9841e2c780f26fd75f336bb32c4a9485da9cb3..04566982fcd310e0666493967fec7e853cdbbe28 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
index 5678cc61c452cd57c2729fd9a79cb8c1da25e6a9..5ea72f4d379b4888ba881a9187876a3cae118e83 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/IntroductionValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java
rename to briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
index 5c43548c43e5657a368398da830460d0eb592b8e..194d24eff51494e3cc3d6319b334fc35ece891d2 100644
--- a/briar-tests/src/org/briarproject/briar/introduction/MessageSenderTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.briar.BriarTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
index 348e829e4a2c3bf01c9f478e462d3ab04ef46e81..b7d522f39bbbb45703dae8b9fd92467ee359af3c 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
@@ -1,7 +1,6 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PrivateKey;
@@ -11,6 +10,7 @@ import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.system.SystemModule;
 import org.briarproject.bramble.util.StringUtils;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.briar.api.forum.ForumConstants;
 import org.briarproject.briar.api.forum.ForumPost;
 import org.briarproject.briar.api.forum.ForumPostFactory;
@@ -20,7 +20,7 @@ import org.junit.Test;
 
 import javax.inject.Inject;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
index 37ede5370201dfb27f1d1eda191c28a65c1f1987..3019c0acaa76f694967dc10682185fffb64afd3a 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestLifecycleModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestLifecycleModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.crypto.CryptoModule;
 import org.briarproject.bramble.data.DataModule;
diff --git a/briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
index f6ac2bf66e4d1447750f4ed19dc98ae00b0d6284..4aaf3e8ede1dddd6942f86e6ac35de58d7793b49 100644
--- a/briar-tests/src/org/briarproject/briar/messaging/MessagingManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessagingManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
index 88b9fcf201a93766d1c5f08ed2b73f3f094e3886..cb9c2af07864ea1bb2ec6cec0ccc5732e8edd5fc 100644
--- a/briar-tests/src/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.data.BdfDictionary;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
index 098fdb11b70f7e5d479587caee33e28d09705ffa..023ec5c2a4b158c1e0d8dc3fa41e793decbab5b8 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java
@@ -1,8 +1,7 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.BriarTestCase;
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.crypto.SecretKey;
@@ -23,6 +22,7 @@ import org.briarproject.bramble.api.transport.StreamContext;
 import org.briarproject.bramble.api.transport.StreamReaderFactory;
 import org.briarproject.bramble.api.transport.StreamWriterFactory;
 import org.briarproject.bramble.system.SystemModule;
+import org.briarproject.briar.BriarTestCase;
 import org.briarproject.briar.api.messaging.MessagingManager;
 import org.briarproject.briar.api.messaging.PrivateMessage;
 import org.briarproject.briar.api.messaging.PrivateMessageFactory;
@@ -36,10 +36,10 @@ import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import static org.briarproject.TestPluginConfigModule.MAX_LATENCY;
-import static org.briarproject.TestPluginConfigModule.TRANSPORT_ID;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
+import static org.briarproject.briar.TestPluginConfigModule.MAX_LATENCY;
+import static org.briarproject.briar.TestPluginConfigModule.TRANSPORT_ID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
index 566c9783060e0221aa5262eff11b9aae98c23763..a459316521bb685db054203337c13a29fbca25d1 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
@@ -1,8 +1,8 @@
 package org.briarproject.briar.messaging;
 
-import org.briarproject.TestDatabaseModule;
-import org.briarproject.TestPluginConfigModule;
-import org.briarproject.TestSeedProviderModule;
+import org.briarproject.bramble.TestDatabaseModule;
+import org.briarproject.briar.TestPluginConfigModule;
+import org.briarproject.bramble.TestSeedProviderModule;
 import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.identity.IdentityManager;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
index 249d46fad6b6cc6b62d0f1ba9e9555aff925e433..92addf7a973b950db3eced913f2ef328a7bd2158 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupInvitationIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.sync.Group;
 import org.briarproject.briar.BriarIntegrationTest;
@@ -22,7 +22,7 @@ import java.util.Collection;
 
 import javax.annotation.Nullable;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
index 88650c06f2a3668fb32665f0c9dd8077db1ab4cc..e8e9bbb8cc4f8e608c042af72ceab84c947ff250 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.data.BdfDictionary;
@@ -21,9 +21,9 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
index 19fb33f6137022d6a08780a2be6953aeff6cdd29..e9efabdf780056e6912a9532ab1a75d40a7bb031 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
 import org.briarproject.bramble.api.db.DbException;
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
index 0d680b8b2c7dc5a3bef2255a1e19fb6bda42fadb..a6d8d0c28a20674e0e727bb9bcbc474286b45ae6 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.api.db.Transaction;
@@ -21,8 +21,8 @@ import org.junit.Test;
 
 import java.util.Collection;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.identity.Author.Status.VERIFIED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.briar.api.privategroup.Visibility.INVISIBLE;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
similarity index 97%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
index f3bbccb495e609f8822f8abf758ca4e49d694ae0..69422fb832e8702e1f8a3f7f0eb80819c4f70916 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.BriarMockTestCase;
+import org.briarproject.bramble.BrambleMockTestCase;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.contact.ContactId;
@@ -23,8 +23,8 @@ import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
 import org.briarproject.briar.api.privategroup.PrivateGroupManager;
 import org.jmock.Expectations;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.briar.api.privategroup.PrivateGroupManager.*;
 import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID;
 import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT;
@@ -33,7 +33,7 @@ import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN;
 import static org.briarproject.briar.privategroup.invitation.MessageType.LEAVE;
 import static org.junit.Assert.assertEquals;
 
-public abstract class AbstractProtocolEngineTest extends BriarMockTestCase {
+public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 
 	protected final DatabaseComponent db =
 			context.mock(DatabaseComponent.class);
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
index 48989510048d14c28e3b309fe486ee37c7b7dc43..3456b263d12d8e3556762c1e283182adeb283e68 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
@@ -5,7 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
 import org.jmock.Expectations;
 import org.junit.Test;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.briar.privategroup.invitation.CreatorState.DISSOLVED;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
index c1557b9404714a4d66eb8ba1e7a17aa7ad43ef14..4f7f242f90a714030e399c7b2b9eeb908f677d91 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.BriarMockTestCase;
-import org.briarproject.TestUtils;
+import org.briarproject.bramble.BrambleMockTestCase;
+import org.briarproject.bramble.TestUtils;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.client.ContactGroupFactory;
@@ -44,9 +44,9 @@ import java.util.Map;
 import javax.annotation.Nullable;
 
 import static junit.framework.TestCase.fail;
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
@@ -61,7 +61,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class GroupInvitationManagerImplTest extends BriarMockTestCase {
+public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	private final DatabaseComponent db = context.mock(DatabaseComponent.class);
 	private final ClientHelper clientHelper = context.mock(ClientHelper.class);
@@ -636,7 +636,8 @@ public class GroupInvitationManagerImplTest extends BriarMockTestCase {
 		final BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
 		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		final BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
-		final Map<MessageId, BdfDictionary> results = new HashMap<>();
+		final Map<MessageId, BdfDictionary> results =
+				new HashMap<MessageId, BdfDictionary>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
 		long time1 = 1L, time2 = 2L;
@@ -700,7 +701,8 @@ public class GroupInvitationManagerImplTest extends BriarMockTestCase {
 		final BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
 		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		final BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
-		final Map<MessageId, BdfDictionary> results = new HashMap<>();
+		final Map<MessageId, BdfDictionary> results =
+				new HashMap<MessageId, BdfDictionary>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
 		final Message message2 = new Message(messageId2, contactGroup.getId(),
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
similarity index 98%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
index b230be881f424809c0dba72d9bc6d620e529f51e..077208984cd86f826254b59a8bdd88f0c5f2fb00 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.privategroup.invitation;
 
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
@@ -18,9 +18,9 @@ import org.junit.Test;
 
 import java.security.GeneralSecurityException;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
index 1b7f763a05058cb7a3444dd79c5338ffeea14c2f..d45ec461b7f64671075dc675a940e905933d60df 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
@@ -17,8 +17,8 @@ import org.junit.Test;
 import java.util.Collections;
 import java.util.Map;
 
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE;
diff --git a/briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
rename to briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
index 0f88bbc964413085ca2263a3ce4e315112feb9d1..00fac93a8821b88545be27fd8d3d283c369a5a47 100644
--- a/briar-tests/src/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
@@ -5,7 +5,7 @@ import org.briarproject.briar.api.client.ProtocolStateException;
 import org.jmock.Expectations;
 import org.junit.Test;
 
-import static org.briarproject.TestUtils.getRandomId;
+import static org.briarproject.bramble.TestUtils.getRandomId;
 import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE;
 import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED;
 import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE;
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
index 40a225142c28cc2136a398a1c1ab1c081f112726..58fc86ee2ba9d9fa513de9a7b76f08ca56c7dc51 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
@@ -2,7 +2,7 @@ package org.briarproject.briar.sharing;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.db.NoSuchGroupException;
@@ -30,7 +30,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import static org.briarproject.TestUtils.assertGroupCount;
+import static org.briarproject.briar.BriarTestUtils.assertGroupCount;
 import static org.briarproject.briar.api.blog.BlogSharingManager.CLIENT_ID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
index e5845d7cce84263a0960ba3a36a4d4ee902e7b8b..8e6c2dcb44f45041b1f38d146e34862b0524d0d0 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
@@ -2,7 +2,7 @@ package org.briarproject.briar.sharing;
 
 import net.jodah.concurrentunit.Waiter;
 
-import org.briarproject.TestDatabaseModule;
+import org.briarproject.bramble.TestDatabaseModule;
 import org.briarproject.bramble.api.Bytes;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.api.data.BdfList;
@@ -39,8 +39,8 @@ import java.util.Collection;
 import java.util.List;
 
 import static junit.framework.Assert.assertNotNull;
-import static org.briarproject.TestUtils.getRandomBytes;
-import static org.briarproject.TestUtils.getRandomString;
+import static org.briarproject.bramble.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.TestUtils.getRandomString;
 import static org.briarproject.briar.api.forum.ForumConstants.FORUM_SALT_LENGTH;
 import static org.briarproject.briar.api.forum.ForumSharingManager.CLIENT_ID;
 import static org.briarproject.briar.api.sharing.SharingConstants.SHARE_MSG_TYPE_INVITATION;
diff --git a/briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
similarity index 99%
rename from briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
rename to briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
index 7c8423e2adda0e7da0083eef24424d3d7cf086c4..104a1962d4adca3612eab2acb11ffa9a869a563c 100644
--- a/briar-tests/src/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.sharing;
 
-import org.briarproject.TestUtils;
-import org.briarproject.ValidatorTestCase;
+import org.briarproject.bramble.TestUtils;
+import org.briarproject.bramble.ValidatorTestCase;
 import org.briarproject.bramble.api.FormatException;
 import org.briarproject.bramble.api.UniqueId;
 import org.briarproject.bramble.api.client.BdfMessageContext;
diff --git a/briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
similarity index 84%
rename from briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java
rename to briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
index 10306c4f522901e95b56a3b317c829e267012619..b29ddbab65e90498f39300b89bbcac284c48f5a5 100644
--- a/briar-tests/src/org/briarproject/briar/sharing/SharingManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingManagerImplTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.briar.sharing;
 
-import org.briarproject.BriarTestCase;
+import org.briarproject.briar.BriarTestCase;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
diff --git a/briar-tests/.gitignore b/briar-tests/.gitignore
deleted file mode 100644
index eeb02632a0a71dc53ad5bbb4f04aff39855b50e6..0000000000000000000000000000000000000000
--- a/briar-tests/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-build
-.settings
diff --git a/briar-tests/build.gradle b/briar-tests/build.gradle
deleted file mode 100644
index 31009696687ed30f5e8e69fdb81a5537b2bd7241..0000000000000000000000000000000000000000
--- a/briar-tests/build.gradle
+++ /dev/null
@@ -1,43 +0,0 @@
-apply plugin: 'java'
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-apply plugin: 'witness'
-
-dependencies {
-	compile project(':briar-core')
-	compile project(':bramble-j2se')
-	compile "junit:junit:4.12"
-	compile "org.jmock:jmock:2.8.1"
-	compile "org.jmock:jmock-junit4:2.8.1"
-	compile "org.jmock:jmock-legacy:2.8.1"
-	compile "org.hamcrest:hamcrest-library:1.3"
-	compile "org.hamcrest:hamcrest-core:1.3"
-}
-
-dependencyVerification {
-	verify = [
-			'junit:junit:59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a',
-			'org.jmock:jmock:75d4bdaf636879f0215830c5e6ab99407069a625eaffde5d57b32d887b75dc14',
-			'org.jmock:jmock-junit4:81e3fff46ed56738a6f3f5147525d1d85cda591ce5df007cc193e735cee31113',
-			'org.jmock:jmock-legacy:19c76059eb254775ba884fc8039bc5c7d1700dc68cc55ad3be5b405a2a8a1819',
-			'org.jmock:jmock-testjar:c3642147a5980771dde19d5f1d782d4790a7f9b1521bf9c8cd2b4c23f6384730',
-			'org.hamcrest:hamcrest-library:711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c',
-			'org.hamcrest:hamcrest-core:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9',
-			'cglib:cglib-nodep:3a9ab1f5de15b49dedc7e96d35363c4c43a2b2cd42275f5d4731846042f3fcf2',
-			'org.ow2.asm:asm:71c4f78e437b8fdcd9cc0dfd2abea8c089eb677005a6a5cff320206cc52b46cc',
-			'org.beanshell:bsh:9b04edc75d19db54f1b4e8b5355e9364384c6cf71eb0a1b9724c159d779879f8',
-			'org.objenesis:objenesis:c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80',
-	]
-}
-
-sourceSets {
-	main.java.srcDirs = ['src']
-	main.resources.srcDirs = ['src']
-	test.java.srcDirs = ['src']
-	test.resources.srcDirs = ['src']
-}
-
-tasks.withType(Test) {
-	systemProperty 'java.library.path', '../bramble-j2se/libs'
-}
diff --git a/briar-tests/src/.gitignore b/briar-tests/src/.gitignore
deleted file mode 100644
index 94260a35069411445665db3f9b9b41ee347f32af..0000000000000000000000000000000000000000
--- a/briar-tests/src/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build
-test.tmp
diff --git a/settings.gradle b/settings.gradle
index d66211a06fe585a28589807c1caf676356d570b9..de661574c253874536c6bd89b1366fc568f62bd0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,5 +3,4 @@ include ':bramble-core'
 include ':bramble-j2se'
 include ':briar-api'
 include ':briar-core'
-include ':briar-tests'
 include ':briar-android'