diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/AndroidPluginModule.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/AndroidPluginModule.java
index d070c90ea852f2cced900ab0317f239007634824..0dbc81b3ec3ff890a0e2d3429c2f3a55d0774196 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/AndroidPluginModule.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/AndroidPluginModule.java
@@ -45,7 +45,7 @@ public class AndroidPluginModule {
 				backoffFactory);
 		DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(ioExecutor,
 				backoffFactory, appContext);
-		final Collection<DuplexPluginFactory> duplex =
+		Collection<DuplexPluginFactory> duplex =
 				Arrays.asList(bluetooth, tor, lan);
 		@NotNullByDefault
 		PluginConfig pluginConfig = new PluginConfig() {
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
index 509e700e5e7c8a054b059c68ffcd016b99b4b5b0..580c5834508642e8f1d0892ee67ee607ca0b7e9c 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
@@ -285,11 +285,11 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
 		Map<ContactId, TransportProperties> remote =
 				callback.getRemoteProperties();
 		for (Entry<ContactId, TransportProperties> e : remote.entrySet()) {
-			final ContactId c = e.getKey();
+			ContactId c = e.getKey();
 			if (connected.contains(c)) continue;
-			final String address = e.getValue().get(PROP_ADDRESS);
+			String address = e.getValue().get(PROP_ADDRESS);
 			if (StringUtils.isNullOrEmpty(address)) continue;
-			final String uuid = e.getValue().get(PROP_UUID);
+			String uuid = e.getValue().get(PROP_UUID);
 			if (StringUtils.isNullOrEmpty(uuid)) continue;
 			ioExecutor.execute(() -> {
 				if (!running) return;
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
index 797eb048c315f75cc8f1a8a1bfb9c6e47bc46c43..1045f372ce34a604054cf8036ea81611f9288642 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
@@ -400,7 +400,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 			}
 			socket = ss;
 			// Store the port number
-			final String localPort = String.valueOf(ss.getLocalPort());
+			String localPort = String.valueOf(ss.getLocalPort());
 			Settings s = new Settings();
 			s.put(PREF_TOR_PORT, localPort);
 			callback.mergeSettings(s);
@@ -536,8 +536,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 		}
 	}
 
-	private void connectAndCallBack(final ContactId c,
-			final TransportProperties p) {
+	private void connectAndCallBack(ContactId c, TransportProperties p) {
 		ioExecutor.execute(() -> {
 			if (!isRunning()) return;
 			DuplexTransportConnection d = createConnection(p);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/PoliteExecutor.java b/bramble-core/src/main/java/org/briarproject/bramble/PoliteExecutor.java
index 72e52b0c7355e25236e2f147473fb48f3ed4d3d1..32a3a7b32b8ad3255e70f9fd2926398c4403e793 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/PoliteExecutor.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/PoliteExecutor.java
@@ -48,8 +48,8 @@ public class PoliteExecutor implements Executor {
 	}
 
 	@Override
-	public void execute(final Runnable r) {
-		final long submitted = System.currentTimeMillis();
+	public void execute(Runnable r) {
+		long submitted = System.currentTimeMillis();
 		Runnable wrapped = () -> {
 			if (log.isLoggable(LOG_LEVEL)) {
 				long queued = System.currentTimeMillis() - submitted;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/TimeLoggingExecutor.java b/bramble-core/src/main/java/org/briarproject/bramble/TimeLoggingExecutor.java
index 9c3be9779889f7dd284f026b1cf5d2c4f73a00c4..c81bf43a7aeb6e6569c624b2831f17ae0bee7f8e 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/TimeLoggingExecutor.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/TimeLoggingExecutor.java
@@ -28,9 +28,9 @@ public class TimeLoggingExecutor extends ThreadPoolExecutor {
 	}
 
 	@Override
-	public void execute(final Runnable r) {
+	public void execute(Runnable r) {
 		if (log.isLoggable(LOG_LEVEL)) {
-			final long submitted = System.currentTimeMillis();
+			long submitted = System.currentTimeMillis();
 			super.execute(() -> {
 				long started = System.currentTimeMillis();
 				long queued = started - submitted;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
index a7f5cc689d367d57a2f36cded7861ac9d4d82a29..7be465d990661b827f86b2b40723ebe45e2972c2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java
@@ -88,7 +88,7 @@ class LifecycleManagerImpl implements LifecycleManager {
 		executors.add(e);
 	}
 
-	private LocalAuthor createLocalAuthor(final String nickname) {
+	private LocalAuthor createLocalAuthor(String nickname) {
 		long now = System.currentTimeMillis();
 		KeyPair keyPair = crypto.generateSignatureKeyPair();
 		byte[] publicKey = keyPair.getPublic().getEncoded();
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
index 1d985f3d9c825a4897d1b53f275ffc0b5d6d1ab2..2405c0be83375ca5e815c853893033f08e4e4ca0 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
@@ -111,7 +111,7 @@ class Poller implements EventListener {
 			connectToContact(c, (DuplexPlugin) p);
 	}
 
-	private void connectToContact(final ContactId c, final SimplexPlugin p) {
+	private void connectToContact(ContactId c, SimplexPlugin p) {
 		ioExecutor.execute(() -> {
 			TransportId t = p.getId();
 			if (!connectionRegistry.isConnected(c, t)) {
@@ -122,7 +122,7 @@ class Poller implements EventListener {
 		});
 	}
 
-	private void connectToContact(final ContactId c, final DuplexPlugin p) {
+	private void connectToContact(ContactId c, DuplexPlugin p) {
 		ioExecutor.execute(() -> {
 			TransportId t = p.getId();
 			if (!connectionRegistry.isConnected(c, t)) {
@@ -153,7 +153,7 @@ class Poller implements EventListener {
 		try {
 			PollTask scheduled = tasks.get(t);
 			if (scheduled == null || due < scheduled.due) {
-				final PollTask task = new PollTask(p, due, randomiseNext);
+				PollTask task = new PollTask(p, due, randomiseNext);
 				tasks.put(t, task);
 				scheduler.schedule(
 						() -> ioExecutor.execute(task), delay, MILLISECONDS);
@@ -164,7 +164,7 @@ class Poller implements EventListener {
 	}
 
 	@IoExecutor
-	private void poll(final Plugin p) {
+	private void poll(Plugin p) {
 		TransportId t = p.getId();
 		if (LOG.isLoggable(INFO)) LOG.info("Polling plugin " + t);
 		p.poll(connectionRegistry.getConnectedContacts(t));
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
index 17b61358d20bd4b0d1cdbb9bf39244e882923ced..6355342e6545d5ca43a1b5e4625b53151fe79d17 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/file/FilePlugin.java
@@ -108,7 +108,7 @@ abstract class FilePlugin implements SimplexPlugin {
 		}
 	}
 
-	protected void createReaderFromFile(final File f) {
+	protected void createReaderFromFile(File f) {
 		if (!running) return;
 		ioExecutor.execute(new ReaderCreator(f));
 	}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
index 32c2b5be078968124c0de8dca84d47f28af33846..e40d531bdbe7107ec6a02cae767da510ee4af990 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/PortMapperImpl.java
@@ -37,7 +37,7 @@ class PortMapperImpl implements PortMapper {
 	}
 
 	@Override
-	public MappingResult map(final int port) {
+	public MappingResult map(int port) {
 		if (!started.getAndSet(true)) start();
 		if (gateway == null) return null;
 		InetAddress internal = gateway.getLocalAddress();
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
index 7ee44b4469be8d478ff145669bb7421571b2ab64..af6922793ce3103f1fb0dd0359f986aeebec02bb 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java
@@ -214,8 +214,7 @@ abstract class TcpPlugin implements DuplexPlugin {
 		}
 	}
 
-	private void connectAndCallBack(final ContactId c,
-			final TransportProperties p) {
+	private void connectAndCallBack(ContactId c, TransportProperties p) {
 		ioExecutor.execute(() -> {
 			if (!isRunning()) return;
 			DuplexTransportConnection d = createConnection(p);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
index ea730b64fbef9e87612d124fab7ee746bedc1690..7a26db774683ffec836afd53d3403660e80cc740 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReliabilityLayerImpl.java
@@ -48,7 +48,7 @@ class ReliabilityLayerImpl implements ReliabilityLayer, WriteHandler {
 	@Override
 	public void start() {
 		SlipEncoder encoder = new SlipEncoder(this);
-		final Sender sender = new Sender(clock, encoder);
+		Sender sender = new Sender(clock, encoder);
 		receiver = new Receiver(clock, sender);
 		decoder = new SlipDecoder(receiver, Data.MAX_LENGTH);
 		inputStream = new ReceiverInputStream(receiver);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
index 291605a785a9ca301062566fc5db7e91e1fb5b1b..3184a11082f97dacd3266fa2c599a6e96ee2f8e8 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java
@@ -93,7 +93,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		hooks.put(c, hook);
 	}
 
-	private void validateOutstandingMessagesAsync(final ClientId c) {
+	private void validateOutstandingMessagesAsync(ClientId c) {
 		dbExecutor.execute(() -> validateOutstandingMessages(c));
 	}
 
@@ -114,7 +114,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void validateNextMessageAsync(final Queue<MessageId> unvalidated) {
+	private void validateNextMessageAsync(Queue<MessageId> unvalidated) {
 		if (unvalidated.isEmpty()) return;
 		dbExecutor.execute(() -> validateNextMessage(unvalidated));
 	}
@@ -148,7 +148,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void deliverOutstandingMessagesAsync(final ClientId c) {
+	private void deliverOutstandingMessagesAsync(ClientId c) {
 		dbExecutor.execute(() -> deliverOutstandingMessages(c));
 	}
 
@@ -169,8 +169,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void deliverNextPendingMessageAsync(
-			final Queue<MessageId> pending) {
+	private void deliverNextPendingMessageAsync(Queue<MessageId> pending) {
 		if (pending.isEmpty()) return;
 		dbExecutor.execute(() -> deliverNextPendingMessage(pending));
 	}
@@ -234,7 +233,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void validateMessageAsync(final Message m, final Group g) {
+	private void validateMessageAsync(Message m, Group g) {
 		validationExecutor.execute(() -> validateMessage(m, g));
 	}
 
@@ -258,8 +257,8 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void storeMessageContextAsync(final Message m, final ClientId c,
-			final MessageContext result) {
+	private void storeMessageContextAsync(Message m, ClientId c,
+			MessageContext result) {
 		dbExecutor.execute(() -> storeMessageContext(m, c, result));
 	}
 
@@ -354,7 +353,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		return pending;
 	}
 
-	private void shareOutstandingMessagesAsync(final ClientId c) {
+	private void shareOutstandingMessagesAsync(ClientId c) {
 		dbExecutor.execute(() -> shareOutstandingMessages(c));
 	}
 
@@ -381,7 +380,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 	 * This method should only be called for messages that have all their
 	 * dependencies delivered and have been delivered themselves.
 	 */
-	private void shareNextMessageAsync(final Queue<MessageId> toShare) {
+	private void shareNextMessageAsync(Queue<MessageId> toShare) {
 		if (toShare.isEmpty()) return;
 		dbExecutor.execute(() -> shareNextMessage(toShare));
 	}
@@ -410,7 +409,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void invalidateNextMessageAsync(final Queue<MessageId> invalidate) {
+	private void invalidateNextMessageAsync(Queue<MessageId> invalidate) {
 		if (invalidate.isEmpty()) return;
 		dbExecutor.execute(() -> invalidateNextMessage(invalidate));
 	}
@@ -467,12 +466,12 @@ class ValidationManagerImpl implements ValidationManager, Service,
 		}
 	}
 
-	private void loadGroupAndValidateAsync(final Message m) {
+	private void loadGroupAndValidateAsync(Message m) {
 		dbExecutor.execute(() -> loadGroupAndValidate(m));
 	}
 
 	@DatabaseExecutor
-	private void loadGroupAndValidate(final Message m) {
+	private void loadGroupAndValidate(Message m) {
 		try {
 			Group g;
 			Transaction txn = db.startTransaction(true);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
index 04d1fdbb2e0da3e82f564f8397981e1360fb9701..d0c6fd709d619911f6cc9862b99947df3eb82bfe 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java
@@ -155,7 +155,7 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
 		}
 	}
 
-	private void removeContact(final ContactId c) {
+	private void removeContact(ContactId c) {
 		activeContacts.remove(c);
 		dbExecutor.execute(() -> {
 			for (TransportKeyManager m : managers.values()) m.removeContact(c);
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/PoliteExecutorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/PoliteExecutorTest.java
index fbd12ae79e4f84fb62b5cfb8400371c6514f84ca..2c53a8de44ae7a2b5b23ca3241620703b7e5c8df 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/PoliteExecutorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/PoliteExecutorTest.java
@@ -24,10 +24,10 @@ public class PoliteExecutorTest extends BrambleTestCase {
 		Executor delegate = Executors.newSingleThreadExecutor();
 		// Allow all the tasks to be delegated straight away
 		PoliteExecutor polite = new PoliteExecutor(TAG, delegate, TASKS * 2);
-		final List<Integer> list = new Vector<>();
-		final CountDownLatch latch = new CountDownLatch(TASKS);
+		List<Integer> list = new Vector<>();
+		CountDownLatch latch = new CountDownLatch(TASKS);
 		for (int i = 0; i < TASKS; i++) {
-			final int result = i;
+			int result = i;
 			polite.execute(() -> {
 				list.add(result);
 				latch.countDown();
@@ -46,10 +46,10 @@ public class PoliteExecutorTest extends BrambleTestCase {
 		Executor delegate = Executors.newSingleThreadExecutor();
 		// Allow two tasks to be delegated at a time
 		PoliteExecutor polite = new PoliteExecutor(TAG, delegate, 2);
-		final List<Integer> list = new Vector<>();
-		final CountDownLatch latch = new CountDownLatch(TASKS);
+		List<Integer> list = new Vector<>();
+		CountDownLatch latch = new CountDownLatch(TASKS);
 		for (int i = 0; i < TASKS; i++) {
-			final int result = i;
+			int result = i;
 			polite.execute(() -> {
 				list.add(result);
 				latch.countDown();
@@ -67,11 +67,11 @@ public class PoliteExecutorTest extends BrambleTestCase {
 		Executor delegate = Executors.newCachedThreadPool();
 		// Allow all the tasks to be delegated straight away
 		PoliteExecutor polite = new PoliteExecutor(TAG, delegate, TASKS * 2);
-		final List<Integer> list = new Vector<>();
-		final CountDownLatch[] latches = new CountDownLatch[TASKS];
+		List<Integer> list = new Vector<>();
+		CountDownLatch[] latches = new CountDownLatch[TASKS];
 		for (int i = 0; i < TASKS; i++) latches[i] = new CountDownLatch(1);
 		for (int i = 0; i < TASKS; i++) {
-			final int result = i;
+			int result = i;
 			polite.execute(() -> {
 				try {
 					// Each task waits for the next task, if any, to finish
@@ -95,10 +95,10 @@ public class PoliteExecutorTest extends BrambleTestCase {
 		Executor delegate = Executors.newCachedThreadPool();
 		// Allow one task to be delegated at a time
 		PoliteExecutor polite = new PoliteExecutor(TAG, delegate, 1);
-		final List<Integer> list = new Vector<>();
-		final CountDownLatch latch = new CountDownLatch(TASKS);
+		List<Integer> list = new Vector<>();
+		CountDownLatch latch = new CountDownLatch(TASKS);
 		for (int i = 0; i < TASKS; i++) {
-			final int result = i;
+			int result = i;
 			polite.execute(() -> {
 				try {
 					// Each task runs faster than the previous task
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
index 58afef572e2eb56eac2c160c5e53b6d2d09dad94..07735626425d175aa0983d4b3446cc75b2f80dc6 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/BdfMessageValidatorTest.java
@@ -83,9 +83,9 @@ public class BdfMessageValidatorTest extends ValidatorTestCase {
 
 	@Test(expected = InvalidMessageException.class)
 	public void testRejectsTooShortMessage() throws Exception {
-		final byte[] invalidRaw = new byte[MESSAGE_HEADER_LENGTH];
+		byte[] invalidRaw = new byte[MESSAGE_HEADER_LENGTH];
 		// Use a mock message so the length of the raw message can be invalid
-		final Message invalidMessage = context.mock(Message.class);
+		Message invalidMessage = context.mock(Message.class);
 
 		context.checking(new Expectations() {{
 			oneOf(invalidMessage).getTimestamp();
@@ -101,8 +101,8 @@ public class BdfMessageValidatorTest extends ValidatorTestCase {
 
 	@Test
 	public void testAcceptsMinLengthMessage() throws Exception {
-		final byte[] shortRaw = new byte[MESSAGE_HEADER_LENGTH + 1];
-		final Message shortMessage =
+		byte[] shortRaw = new byte[MESSAGE_HEADER_LENGTH + 1];
+		Message shortMessage =
 				new Message(messageId, groupId, timestamp, shortRaw);
 
 		context.checking(new Expectations() {{
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
index 15b129da2240da6f3db01534264f65055dd4517e..fddf10b363724c96cccb12759ea8948aa4c504c3 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java
@@ -76,8 +76,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testAddLocalMessage() throws Exception {
-		final boolean shared = true;
-		final Transaction txn = new Transaction(null, false);
+		boolean shared = true;
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -95,7 +95,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testCreateMessage() throws Exception {
-		final byte[] bytes = expectToByteArray(list);
+		byte[] bytes = expectToByteArray(list);
 
 		context.checking(new Expectations() {{
 			oneOf(messageFactory).createMessage(groupId, timestamp, bytes);
@@ -107,7 +107,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGetMessageAsList() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 
 		expectToList(true);
 		context.checking(new Expectations() {{
@@ -125,7 +125,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGetGroupMetadataAsDictionary() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
@@ -145,7 +145,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionary() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
@@ -165,9 +165,9 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryMap() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		Map<MessageId, BdfDictionary> map = new HashMap<>();
 		map.put(messageId, dictionary);
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
@@ -187,13 +187,13 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGetMessageMetadataAsDictionaryQuery() throws Exception {
-		final Map<MessageId, BdfDictionary> map = new HashMap<>();
+		Map<MessageId, BdfDictionary> map = new HashMap<>();
 		map.put(messageId, dictionary);
-		final BdfDictionary query =
+		BdfDictionary query =
 				BdfDictionary.of(new BdfEntry("query", "me"));
-		final Metadata queryMetadata = new Metadata();
+		Metadata queryMetadata = new Metadata();
 		queryMetadata.put("query", getRandomBytes(42));
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
@@ -215,7 +215,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testMergeGroupMetadata() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -233,7 +233,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testMergeMessageMetadata() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -280,10 +280,10 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testSign() throws Exception {
-		final byte[] privateKey = getRandomBytes(42);
-		final byte[] signed = getRandomBytes(42);
+		byte[] privateKey = getRandomBytes(42);
+		byte[] signed = getRandomBytes(42);
 
-		final byte[] bytes = expectToByteArray(list);
+		byte[] bytes = expectToByteArray(list);
 		context.checking(new Expectations() {{
 			oneOf(cryptoComponent).sign(label, bytes, privateKey);
 			will(returnValue(signed));
@@ -295,8 +295,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testVerifySignature() throws Exception {
-		final byte[] publicKey = getRandomBytes(42);
-		final byte[] bytes = expectToByteArray(list);
+		byte[] publicKey = getRandomBytes(42);
+		byte[] bytes = expectToByteArray(list);
 
 		context.checking(new Expectations() {{
 			oneOf(cryptoComponent).verify(label, bytes, publicKey, rawMessage);
@@ -309,8 +309,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
 
 	@Test
 	public void testVerifyWrongSignature() throws Exception {
-		final byte[] publicKey = getRandomBytes(42);
-		final byte[] bytes = expectToByteArray(list);
+		byte[] publicKey = getRandomBytes(42);
+		byte[] bytes = expectToByteArray(list);
 
 		context.checking(new Expectations() {{
 			oneOf(cryptoComponent).verify(label, bytes, publicKey, rawMessage);
@@ -327,8 +327,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
 		}
 	}
 
-	private byte[] expectToByteArray(final BdfList list) throws Exception {
-		final BdfWriter bdfWriter = context.mock(BdfWriter.class);
+	private byte[] expectToByteArray(BdfList list) throws Exception {
+		BdfWriter bdfWriter = context.mock(BdfWriter.class);
 
 		context.checking(new Expectations() {{
 			oneOf(bdfWriterFactory)
@@ -339,8 +339,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
 		return new byte[0];
 	}
 
-	private void expectToList(final boolean eof) throws Exception {
-		final BdfReader bdfReader = context.mock(BdfReader.class);
+	private void expectToList(boolean eof) throws Exception {
+		BdfReader bdfReader = context.mock(BdfReader.class);
 
 		context.checking(new Expectations() {{
 			oneOf(bdfReaderFactory)
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
index dca8a823b603696dd154b6ab7b73d6024efd21a6..9ded370dd80328249a21427c99f509bc179fe896 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java
@@ -46,10 +46,10 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testAddContact() throws Exception {
-		final SecretKey master = getSecretKey();
-		final long timestamp = 42;
-		final boolean alice = true;
-		final Transaction txn = new Transaction(null, false);
+		SecretKey master = getSecretKey();
+		long timestamp = 42;
+		boolean alice = true;
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -64,14 +64,13 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 			oneOf(db).endTransaction(txn);
 		}});
 
-		assertEquals(contactId, contactManager
-				.addContact(remote, local, master, timestamp, alice, verified,
-						active));
+		assertEquals(contactId, contactManager.addContact(remote, local,
+				master, timestamp, alice, verified, active));
 	}
 
 	@Test
 	public void testGetContact() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -86,8 +85,8 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testGetContactByAuthor() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Collection<Contact> contacts = Collections.singleton(contact);
+		Transaction txn = new Transaction(null, true);
+		Collection<Contact> contacts = Collections.singleton(contact);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -102,7 +101,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test(expected = NoSuchContactException.class)
 	public void testGetContactByUnknownAuthor() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -116,8 +115,8 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test(expected = NoSuchContactException.class)
 	public void testGetContactByUnknownLocalAuthor() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Collection<Contact> contacts = Collections.singleton(contact);
+		Transaction txn = new Transaction(null, true);
+		Collection<Contact> contacts = Collections.singleton(contact);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -132,9 +131,9 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testActiveContacts() throws Exception {
 		Collection<Contact> activeContacts = Collections.singletonList(contact);
-		final Collection<Contact> contacts = new ArrayList<>(activeContacts);
+		Collection<Contact> contacts = new ArrayList<>(activeContacts);
 		contacts.add(new Contact(new ContactId(3), remote, local, true, false));
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -149,7 +148,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testRemoveContact() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
 			will(returnValue(txn));
@@ -165,7 +164,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testSetContactActive() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		context.checking(new Expectations() {{
 			oneOf(db).setContactActive(txn, contactId, active);
 		}});
@@ -175,7 +174,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testContactExists() throws Exception {
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
index e646e0711aaa7da4d6db8af0376e268b84249084..e25f77ee69fa8159cf61fbd1bb9e53f8954aeeeb 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java
@@ -127,11 +127,11 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	@Test
 	@SuppressWarnings("unchecked")
 	public void testSimpleCalls() throws Exception {
-		final int shutdownHandle = 12345;
+		int shutdownHandle = 12345;
 		Mockery context = new Mockery();
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// open()
 			oneOf(database).open();
@@ -230,9 +230,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -260,9 +260,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testAddLocalMessage() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -303,9 +303,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// Check whether the contact is in the DB (which it's not)
 			exactly(18).of(database).startTransaction();
@@ -509,9 +509,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// Check whether the pseudonym is in the DB (which it's not)
 			exactly(3).of(database).startTransaction();
@@ -561,9 +561,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// Check whether the group is in the DB (which it's not)
 			exactly(8).of(database).startTransaction();
@@ -666,9 +666,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// Check whether the message is in the DB (which it's not)
 			exactly(11).of(database).startTransaction();
@@ -801,9 +801,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// startTransaction()
 			oneOf(database).startTransaction();
@@ -896,13 +896,13 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGenerateAck() throws Exception {
-		final Collection<MessageId> messagesToAck = Arrays.asList(messageId,
+		Collection<MessageId> messagesToAck = Arrays.asList(messageId,
 				messageId1);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -931,14 +931,14 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGenerateBatch() throws Exception {
-		final byte[] raw1 = new byte[size];
-		final Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
-		final Collection<byte[]> messages = Arrays.asList(raw, raw1);
+		byte[] raw1 = new byte[size];
+		Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
+		Collection<byte[]> messages = Arrays.asList(raw, raw1);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -975,13 +975,13 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGenerateOffer() throws Exception {
-		final MessageId messageId1 = new MessageId(TestUtils.getRandomId());
-		final Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
+		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
+		Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1013,13 +1013,13 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGenerateRequest() throws Exception {
-		final MessageId messageId1 = new MessageId(TestUtils.getRandomId());
-		final Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
+		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
+		Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1048,14 +1048,14 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testGenerateRequestedBatch() throws Exception {
-		final byte[] raw1 = new byte[size];
-		final Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
-		final Collection<byte[]> messages = Arrays.asList(raw, raw1);
+		byte[] raw1 = new byte[size];
+		Collection<MessageId> ids = Arrays.asList(messageId, messageId1);
+		Collection<byte[]> messages = Arrays.asList(raw, raw1);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1095,9 +1095,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testReceiveAck() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1128,9 +1128,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testReceiveMessage() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1183,9 +1183,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testReceiveDuplicateMessage() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1220,9 +1220,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testReceiveMessageWithoutVisibleGroup() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1248,14 +1248,14 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testReceiveOffer() throws Exception {
-		final MessageId messageId1 = new MessageId(TestUtils.getRandomId());
-		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
-		final MessageId messageId3 = new MessageId(TestUtils.getRandomId());
+		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
+		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
+		MessageId messageId3 = new MessageId(TestUtils.getRandomId());
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1304,9 +1304,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testReceiveRequest() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1338,9 +1338,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testChangingVisibilityCallsListeners() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1379,9 +1379,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
 			will(returnValue(txn));
@@ -1409,14 +1409,14 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testTransportKeys() throws Exception {
-		final TransportKeys transportKeys = createTransportKeys();
-		final Map<ContactId, TransportKeys> keys = Collections.singletonMap(
+		TransportKeys transportKeys = createTransportKeys();
+		Map<ContactId, TransportKeys> keys = Collections.singletonMap(
 				contactId, transportKeys);
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// startTransaction()
 			oneOf(database).startTransaction();
@@ -1472,19 +1472,19 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 
 	@Test
 	public void testMergeSettings() throws Exception {
-		final Settings before = new Settings();
+		Settings before = new Settings();
 		before.put("foo", "bar");
 		before.put("baz", "bam");
-		final Settings update = new Settings();
+		Settings update = new Settings();
 		update.put("baz", "qux");
-		final Settings merged = new Settings();
+		Settings merged = new Settings();
 		merged.put("foo", "bar");
 		merged.put("baz", "qux");
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			// startTransaction()
 			oneOf(database).startTransaction();
@@ -1547,9 +1547,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
@@ -1572,9 +1572,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testCannotAddLocalIdentityAsContact() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
@@ -1607,9 +1607,9 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	public void testCannotAddDuplicateContact() throws Exception {
 		Mockery context = new Mockery();
 		@SuppressWarnings("unchecked")
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
 
 		context.checking(new Expectations() {{
 			oneOf(database).startTransaction();
@@ -1643,12 +1643,12 @@ public class DatabaseComponentImplTest extends BrambleTestCase {
 	@Test
 	@SuppressWarnings("unchecked")
 	public void testMessageDependencies() throws Exception {
-		final int shutdownHandle = 12345;
+		int shutdownHandle = 12345;
 		Mockery context = new Mockery();
-		final Database<Object> database = context.mock(Database.class);
-		final ShutdownManager shutdown = context.mock(ShutdownManager.class);
-		final EventBus eventBus = context.mock(EventBus.class);
-		final MessageId messageId2 = new MessageId(TestUtils.getRandomId());
+		Database<Object> database = context.mock(Database.class);
+		ShutdownManager shutdown = context.mock(ShutdownManager.class);
+		EventBus eventBus = context.mock(EventBus.class);
+		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		context.checking(new Expectations() {{
 			// open()
 			oneOf(database).open();
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
index f063b0b93a7c28225ed24cbf6aa1fe1104d8278d..7eba28093f44e2726353d11ba69fbce565f500bb 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTest.java
@@ -464,11 +464,11 @@ public class H2DatabaseTest extends BrambleTestCase {
 
 	@Test
 	public void testCloseWaitsForCommit() throws Exception {
-		final CountDownLatch closing = new CountDownLatch(1);
-		final CountDownLatch closed = new CountDownLatch(1);
-		final AtomicBoolean transactionFinished = new AtomicBoolean(false);
-		final AtomicBoolean error = new AtomicBoolean(false);
-		final Database<Connection> db = open(false);
+		CountDownLatch closing = new CountDownLatch(1);
+		CountDownLatch closed = new CountDownLatch(1);
+		AtomicBoolean transactionFinished = new AtomicBoolean(false);
+		AtomicBoolean error = new AtomicBoolean(false);
+		Database<Connection> db = open(false);
 
 		// Start a transaction
 		Connection txn = db.startTransaction();
@@ -501,11 +501,11 @@ public class H2DatabaseTest extends BrambleTestCase {
 
 	@Test
 	public void testCloseWaitsForAbort() throws Exception {
-		final CountDownLatch closing = new CountDownLatch(1);
-		final CountDownLatch closed = new CountDownLatch(1);
-		final AtomicBoolean transactionFinished = new AtomicBoolean(false);
-		final AtomicBoolean error = new AtomicBoolean(false);
-		final Database<Connection> db = open(false);
+		CountDownLatch closing = new CountDownLatch(1);
+		CountDownLatch closed = new CountDownLatch(1);
+		AtomicBoolean transactionFinished = new AtomicBoolean(false);
+		AtomicBoolean error = new AtomicBoolean(false);
+		Database<Connection> db = open(false);
 
 		// Start a transaction
 		Connection txn = db.startTransaction();
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
index 5b0d376106045dade93e12b2d0aea64f08e6e38e..161e2a26315bf6fd211c32cb8b6f1d7250ff9e86 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/db/LockFairnessTest.java
@@ -17,11 +17,11 @@ public class LockFairnessTest extends BrambleTestCase {
 	@Test
 	public void testReadersCanShareTheLock() throws Exception {
 		// Use a fair lock
-		final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
-		final CountDownLatch firstReaderHasLock = new CountDownLatch(1);
-		final CountDownLatch firstReaderHasFinished = new CountDownLatch(1);
-		final CountDownLatch secondReaderHasLock = new CountDownLatch(1);
-		final CountDownLatch secondReaderHasFinished = new CountDownLatch(1);
+		ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
+		CountDownLatch firstReaderHasLock = new CountDownLatch(1);
+		CountDownLatch firstReaderHasFinished = new CountDownLatch(1);
+		CountDownLatch secondReaderHasLock = new CountDownLatch(1);
+		CountDownLatch secondReaderHasFinished = new CountDownLatch(1);
 		// First reader
 		Thread first = new Thread() {
 			@Override
@@ -76,13 +76,13 @@ public class LockFairnessTest extends BrambleTestCase {
 	@Test
 	public void testWritersDoNotStarve() throws Exception {
 		// Use a fair lock
-		final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
-		final CountDownLatch firstReaderHasLock = new CountDownLatch(1);
-		final CountDownLatch firstReaderHasFinished = new CountDownLatch(1);
-		final CountDownLatch secondReaderHasFinished = new CountDownLatch(1);
-		final CountDownLatch writerHasFinished = new CountDownLatch(1);
-		final AtomicBoolean secondReaderHasHeldLock = new AtomicBoolean(false);
-		final AtomicBoolean writerHasHeldLock = new AtomicBoolean(false);
+		ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
+		CountDownLatch firstReaderHasLock = new CountDownLatch(1);
+		CountDownLatch firstReaderHasFinished = new CountDownLatch(1);
+		CountDownLatch secondReaderHasFinished = new CountDownLatch(1);
+		CountDownLatch writerHasFinished = new CountDownLatch(1);
+		AtomicBoolean secondReaderHasHeldLock = new AtomicBoolean(false);
+		AtomicBoolean writerHasHeldLock = new AtomicBoolean(false);
 		// First reader
 		Thread first = new Thread() {
 			@Override
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
index e6f423ee757c33f929ed53589e1e864f36e8bb59..2a6e56ee01749844e284fe852fe566bf4b7e29a1 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/identity/IdentityManagerImplTest.java
@@ -80,8 +80,8 @@ public class IdentityManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testGetAuthorStatus() throws DbException {
-		final AuthorId authorId = new AuthorId(TestUtils.getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		AuthorId authorId = new AuthorId(TestUtils.getRandomId());
+		Collection<Contact> contacts = new ArrayList<>();
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
@@ -125,8 +125,8 @@ public class IdentityManagerImplTest extends BrambleMockTestCase {
 				identityManager.getAuthorStatus(localAuthor.getId()));
 	}
 
-	private void checkAuthorStatusContext(final AuthorId authorId,
-			final Collection<Contact> contacts) throws DbException {
+	private void checkAuthorStatusContext(AuthorId authorId,
+			Collection<Contact> contacts) throws DbException {
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
index cac8923d1296bd0fa69165c0f18d932a72bdca7d..a737328780331e290cdd73a0346541098a141d23 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java
@@ -65,11 +65,11 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test
 	public void testAliceProtocol() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(BOB_COMMIT, null);
-		final Payload ourPayload = new Payload(ALICE_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.getSecretKey();
-		final SecretKey masterSecret = TestUtils.getSecretKey();
+		Payload theirPayload = new Payload(BOB_COMMIT, null);
+		Payload ourPayload = new Payload(ALICE_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		SecretKey sharedSecret = TestUtils.getSecretKey();
+		SecretKey masterSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -129,11 +129,11 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test
 	public void testBobProtocol() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(ALICE_COMMIT, null);
-		final Payload ourPayload = new Payload(BOB_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.getSecretKey();
-		final SecretKey masterSecret = TestUtils.getSecretKey();
+		Payload theirPayload = new Payload(ALICE_COMMIT, null);
+		Payload ourPayload = new Payload(BOB_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		SecretKey sharedSecret = TestUtils.getSecretKey();
+		SecretKey masterSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -192,9 +192,9 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test(expected = AbortException.class)
 	public void testAliceProtocolAbortOnBadKey() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(BOB_COMMIT, null);
-		final Payload ourPayload = new Payload(ALICE_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		Payload theirPayload = new Payload(BOB_COMMIT, null);
+		Payload ourPayload = new Payload(ALICE_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -233,9 +233,9 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test(expected = AbortException.class)
 	public void testBobProtocolAbortOnBadKey() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(ALICE_COMMIT, null);
-		final Payload ourPayload = new Payload(BOB_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		Payload theirPayload = new Payload(ALICE_COMMIT, null);
+		Payload ourPayload = new Payload(BOB_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -270,10 +270,10 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test(expected = AbortException.class)
 	public void testAliceProtocolAbortOnBadConfirm() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(BOB_COMMIT, null);
-		final Payload ourPayload = new Payload(ALICE_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.getSecretKey();
+		Payload theirPayload = new Payload(BOB_COMMIT, null);
+		Payload ourPayload = new Payload(ALICE_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		SecretKey sharedSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
@@ -335,10 +335,10 @@ public class KeyAgreementProtocolTest extends BrambleTestCase {
 	@Test(expected = AbortException.class)
 	public void testBobProtocolAbortOnBadConfirm() throws Exception {
 		// set up
-		final Payload theirPayload = new Payload(ALICE_COMMIT, null);
-		final Payload ourPayload = new Payload(BOB_COMMIT, null);
-		final KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
-		final SecretKey sharedSecret = TestUtils.getSecretKey();
+		Payload theirPayload = new Payload(ALICE_COMMIT, null);
+		Payload ourPayload = new Payload(BOB_COMMIT, null);
+		KeyPair ourKeyPair = new KeyPair(ourPubKey, null);
+		SecretKey sharedSecret = TestUtils.getSecretKey();
 
 		KeyAgreementProtocol protocol =
 				new KeyAgreementProtocol(callbacks, crypto, payloadEncoder,
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
index dba85a6b2ab33bd16630810d25b4664a67a5b4c2..f0841bc8e7d2e225c30678f52b7ced4f41816b58 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/ConnectionRegistryImplTest.java
@@ -35,7 +35,7 @@ public class ConnectionRegistryImplTest extends BrambleTestCase {
 	@Test
 	public void testRegisterAndUnregister() {
 		Mockery context = new Mockery();
-		final EventBus eventBus = context.mock(EventBus.class);
+		EventBus eventBus = context.mock(EventBus.class);
 		context.checking(new Expectations() {{
 			exactly(5).of(eventBus).broadcast(with(any(
 					ConnectionOpenedEvent.class)));
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
index 23a40ed20db4ae08451dcf22a12d58e512366ce6..2bcc22c0fa5d477c8c9d52efcd965481d797df9e 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PluginManagerImplTest.java
@@ -30,36 +30,36 @@ public class PluginManagerImplTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor ioExecutor = Executors.newSingleThreadExecutor();
-		final EventBus eventBus = context.mock(EventBus.class);
-		final PluginConfig pluginConfig = context.mock(PluginConfig.class);
-		final ConnectionManager connectionManager =
+		Executor ioExecutor = Executors.newSingleThreadExecutor();
+		EventBus eventBus = context.mock(EventBus.class);
+		PluginConfig pluginConfig = context.mock(PluginConfig.class);
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final SettingsManager settingsManager =
+		SettingsManager settingsManager =
 				context.mock(SettingsManager.class);
-		final TransportPropertyManager transportPropertyManager =
+		TransportPropertyManager transportPropertyManager =
 				context.mock(TransportPropertyManager.class);
-		final UiCallback uiCallback = context.mock(UiCallback.class);
+		UiCallback uiCallback = context.mock(UiCallback.class);
 
 		// Two simplex plugin factories: both create plugins, one fails to start
-		final SimplexPluginFactory simplexFactory =
+		SimplexPluginFactory simplexFactory =
 				context.mock(SimplexPluginFactory.class);
-		final SimplexPlugin simplexPlugin = context.mock(SimplexPlugin.class);
-		final TransportId simplexId = new TransportId("simplex");
-		final SimplexPluginFactory simplexFailFactory =
+		SimplexPlugin simplexPlugin = context.mock(SimplexPlugin.class);
+		TransportId simplexId = new TransportId("simplex");
+		SimplexPluginFactory simplexFailFactory =
 				context.mock(SimplexPluginFactory.class, "simplexFailFactory");
-		final SimplexPlugin simplexFailPlugin =
+		SimplexPlugin simplexFailPlugin =
 				context.mock(SimplexPlugin.class, "simplexFailPlugin");
-		final TransportId simplexFailId = new TransportId("simplex1");
+		TransportId simplexFailId = new TransportId("simplex1");
 
 		// Two duplex plugin factories: one creates a plugin, the other fails
-		final DuplexPluginFactory duplexFactory =
+		DuplexPluginFactory duplexFactory =
 				context.mock(DuplexPluginFactory.class);
-		final DuplexPlugin duplexPlugin = context.mock(DuplexPlugin.class);
-		final TransportId duplexId = new TransportId("duplex");
-		final DuplexPluginFactory duplexFailFactory =
+		DuplexPlugin duplexPlugin = context.mock(DuplexPlugin.class);
+		TransportId duplexId = new TransportId("duplex");
+		DuplexPluginFactory duplexFailFactory =
 				context.mock(DuplexPluginFactory.class, "duplexFailFactory");
-		final TransportId duplexFailId = new TransportId("duplex1");
+		TransportId duplexFailId = new TransportId("duplex1");
 
 		context.checking(new Expectations() {{
 			allowing(simplexPlugin).getId();
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
index 89afcdf85f632796e35c71def0ff1e1e24dee112..8d9a975a766f3e858f877cfc768c10a1615d95b1 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerTest.java
@@ -42,35 +42,35 @@ public class PollerTest extends BrambleTestCase {
 	public void testConnectOnContactStatusChanged() throws Exception {
 		Mockery context = new Mockery();
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final Executor ioExecutor = new ImmediateExecutor();
-		final ScheduledExecutorService scheduler =
+		Executor ioExecutor = new ImmediateExecutor();
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final ConnectionManager connectionManager =
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final ConnectionRegistry connectionRegistry =
+		ConnectionRegistry connectionRegistry =
 				context.mock(ConnectionRegistry.class);
-		final PluginManager pluginManager = context.mock(PluginManager.class);
-		final SecureRandom random = context.mock(SecureRandom.class);
-		final Clock clock = context.mock(Clock.class);
+		PluginManager pluginManager = context.mock(PluginManager.class);
+		SecureRandom random = context.mock(SecureRandom.class);
+		Clock clock = context.mock(Clock.class);
 
 		// Two simplex plugins: one supports polling, the other doesn't
-		final SimplexPlugin simplexPlugin = context.mock(SimplexPlugin.class);
-		final SimplexPlugin simplexPlugin1 =
+		SimplexPlugin simplexPlugin = context.mock(SimplexPlugin.class);
+		SimplexPlugin simplexPlugin1 =
 				context.mock(SimplexPlugin.class, "simplexPlugin1");
-		final TransportId simplexId1 = new TransportId("simplex1");
-		final List<SimplexPlugin> simplexPlugins = Arrays.asList(simplexPlugin,
+		TransportId simplexId1 = new TransportId("simplex1");
+		List<SimplexPlugin> simplexPlugins = Arrays.asList(simplexPlugin,
 				simplexPlugin1);
-		final TransportConnectionWriter simplexWriter =
+		TransportConnectionWriter simplexWriter =
 				context.mock(TransportConnectionWriter.class);
 
 		// Two duplex plugins: one supports polling, the other doesn't
-		final DuplexPlugin duplexPlugin = context.mock(DuplexPlugin.class);
-		final TransportId duplexId = new TransportId("duplex");
-		final DuplexPlugin duplexPlugin1 =
+		DuplexPlugin duplexPlugin = context.mock(DuplexPlugin.class);
+		TransportId duplexId = new TransportId("duplex");
+		DuplexPlugin duplexPlugin1 =
 				context.mock(DuplexPlugin.class, "duplexPlugin1");
-		final List<DuplexPlugin> duplexPlugins = Arrays.asList(duplexPlugin,
+		List<DuplexPlugin> duplexPlugins = Arrays.asList(duplexPlugin,
 				duplexPlugin1);
-		final DuplexTransportConnection duplexConnection =
+		DuplexTransportConnection duplexConnection =
 				context.mock(DuplexTransportConnection.class);
 
 		context.checking(new Expectations() {{
@@ -129,20 +129,20 @@ public class PollerTest extends BrambleTestCase {
 			throws Exception {
 		Mockery context = new Mockery();
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final Executor ioExecutor = new ImmediateExecutor();
-		final ScheduledExecutorService scheduler =
+		Executor ioExecutor = new ImmediateExecutor();
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final ConnectionManager connectionManager =
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final ConnectionRegistry connectionRegistry =
+		ConnectionRegistry connectionRegistry =
 				context.mock(ConnectionRegistry.class);
-		final PluginManager pluginManager = context.mock(PluginManager.class);
-		final SecureRandom random = context.mock(SecureRandom.class);
-		final Clock clock = context.mock(Clock.class);
+		PluginManager pluginManager = context.mock(PluginManager.class);
+		SecureRandom random = context.mock(SecureRandom.class);
+		Clock clock = context.mock(Clock.class);
 
-		final DuplexPlugin plugin = context.mock(DuplexPlugin.class);
-		final TransportId transportId = new TransportId("id");
-		final DuplexTransportConnection duplexConnection =
+		DuplexPlugin plugin = context.mock(DuplexPlugin.class);
+		TransportId transportId = new TransportId("id");
+		DuplexTransportConnection duplexConnection =
 				context.mock(DuplexTransportConnection.class);
 
 		context.checking(new Expectations() {{
@@ -194,19 +194,19 @@ public class PollerTest extends BrambleTestCase {
 	public void testRescheduleOnConnectionOpened() throws Exception {
 		Mockery context = new Mockery();
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final Executor ioExecutor = new ImmediateExecutor();
-		final ScheduledExecutorService scheduler =
+		Executor ioExecutor = new ImmediateExecutor();
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final ConnectionManager connectionManager =
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final ConnectionRegistry connectionRegistry =
+		ConnectionRegistry connectionRegistry =
 				context.mock(ConnectionRegistry.class);
-		final PluginManager pluginManager = context.mock(PluginManager.class);
-		final SecureRandom random = context.mock(SecureRandom.class);
-		final Clock clock = context.mock(Clock.class);
+		PluginManager pluginManager = context.mock(PluginManager.class);
+		SecureRandom random = context.mock(SecureRandom.class);
+		Clock clock = context.mock(Clock.class);
 
-		final DuplexPlugin plugin = context.mock(DuplexPlugin.class);
-		final TransportId transportId = new TransportId("id");
+		DuplexPlugin plugin = context.mock(DuplexPlugin.class);
+		TransportId transportId = new TransportId("id");
 
 		context.checking(new Expectations() {{
 			allowing(plugin).getId();
@@ -239,19 +239,19 @@ public class PollerTest extends BrambleTestCase {
 	public void testRescheduleDoesNotReplaceEarlierTask() throws Exception {
 		Mockery context = new Mockery();
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final Executor ioExecutor = new ImmediateExecutor();
-		final ScheduledExecutorService scheduler =
+		Executor ioExecutor = new ImmediateExecutor();
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final ConnectionManager connectionManager =
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final ConnectionRegistry connectionRegistry =
+		ConnectionRegistry connectionRegistry =
 				context.mock(ConnectionRegistry.class);
-		final PluginManager pluginManager = context.mock(PluginManager.class);
-		final SecureRandom random = context.mock(SecureRandom.class);
-		final Clock clock = context.mock(Clock.class);
+		PluginManager pluginManager = context.mock(PluginManager.class);
+		SecureRandom random = context.mock(SecureRandom.class);
+		Clock clock = context.mock(Clock.class);
 
-		final DuplexPlugin plugin = context.mock(DuplexPlugin.class);
-		final TransportId transportId = new TransportId("id");
+		DuplexPlugin plugin = context.mock(DuplexPlugin.class);
+		TransportId transportId = new TransportId("id");
 
 		context.checking(new Expectations() {{
 			allowing(plugin).getId();
@@ -299,20 +299,20 @@ public class PollerTest extends BrambleTestCase {
 	public void testPollOnTransportEnabled() throws Exception {
 		Mockery context = new Mockery();
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final Executor ioExecutor = new ImmediateExecutor();
-		final ScheduledExecutorService scheduler =
+		Executor ioExecutor = new ImmediateExecutor();
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final ConnectionManager connectionManager =
+		ConnectionManager connectionManager =
 				context.mock(ConnectionManager.class);
-		final ConnectionRegistry connectionRegistry =
+		ConnectionRegistry connectionRegistry =
 				context.mock(ConnectionRegistry.class);
-		final PluginManager pluginManager = context.mock(PluginManager.class);
-		final SecureRandom random = context.mock(SecureRandom.class);
-		final Clock clock = context.mock(Clock.class);
+		PluginManager pluginManager = context.mock(PluginManager.class);
+		SecureRandom random = context.mock(SecureRandom.class);
+		Clock clock = context.mock(Clock.class);
 
-		final Plugin plugin = context.mock(Plugin.class);
-		final TransportId transportId = new TransportId("id");
-		final List<ContactId> connected = Collections.singletonList(contactId);
+		Plugin plugin = context.mock(Plugin.class);
+		TransportId transportId = new TransportId("id");
+		List<ContactId> connected = Collections.singletonList(contactId);
 
 		context.checking(new Expectations() {{
 			allowing(plugin).getId();
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
index f4332c473bd713893f71875988b10c7fabf20bec..b4f360c7b53bddbc46b6e7d3ba62dd1998feb272 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java
@@ -145,11 +145,11 @@ public class LanTcpPluginTest extends BrambleTestCase {
 		assertEquals(2, split.length);
 		String addrString = split[0];
 		// Listen on the same interface as the plugin
-		final ServerSocket ss = new ServerSocket();
+		ServerSocket ss = new ServerSocket();
 		ss.bind(new InetSocketAddress(addrString, 0), 10);
 		int port = ss.getLocalPort();
-		final CountDownLatch latch = new CountDownLatch(1);
-		final AtomicBoolean error = new AtomicBoolean(false);
+		CountDownLatch latch = new CountDownLatch(1);
+		AtomicBoolean error = new AtomicBoolean(false);
 		new Thread() {
 			@Override
 			public void run() {
@@ -239,10 +239,10 @@ public class LanTcpPluginTest extends BrambleTestCase {
 		assertEquals(2, split.length);
 		String addrString = split[0];
 		// Listen on the same interface as the plugin
-		final ServerSocket ss = new ServerSocket();
+		ServerSocket ss = new ServerSocket();
 		ss.bind(new InetSocketAddress(addrString, 0), 10);
-		final CountDownLatch latch = new CountDownLatch(1);
-		final AtomicBoolean error = new AtomicBoolean(false);
+		CountDownLatch latch = new CountDownLatch(1);
+		AtomicBoolean error = new AtomicBoolean(false);
 		new Thread() {
 			@Override
 			public void run() {
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
index 4e4ec63b35547a3b230662af4ec5b2c3844167ef..ee3a2643bc987088b78784489a84afd6fc884be2 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java
@@ -87,11 +87,11 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testCreatesGroupsAtStartup() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Contact contact1 = getContact(true);
-		final Contact contact2 = getContact(true);
-		final List<Contact> contacts = Arrays.asList(contact1, contact2);
-		final Group contactGroup1 = getGroup(), contactGroup2 = getGroup();
+		Transaction txn = new Transaction(null, false);
+		Contact contact1 = getContact(true);
+		Contact contact2 = getContact(true);
+		List<Contact> contacts = Arrays.asList(contact1, contact2);
+		Group contactGroup1 = getGroup(), contactGroup2 = getGroup();
 
 		context.checking(new Expectations() {{
 			oneOf(db).addGroup(txn, localGroup);
@@ -124,9 +124,9 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testCreatesGroupWhenAddingContact() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Contact contact = getContact(true);
-		final Group contactGroup = getGroup();
+		Transaction txn = new Transaction(null, false);
+		Contact contact = getContact(true);
+		Group contactGroup = getGroup();
 
 		context.checking(new Expectations() {{
 			// Create the group and share it with the contact
@@ -151,9 +151,9 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testRemovesGroupWhenRemovingContact() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Contact contact = getContact(true);
-		final Group contactGroup = getGroup();
+		Transaction txn = new Transaction(null, false);
+		Contact contact = getContact(true);
+		Group contactGroup = getGroup();
 
 		context.checking(new Expectations() {{
 			oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, contact);
@@ -168,17 +168,17 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testDoesNotDeleteAnythingWhenFirstUpdateIsDelivered()
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final GroupId contactGroupId = new GroupId(getRandomId());
-		final long timestamp = 123456789;
-		final Message message = getMessage(contactGroupId, timestamp);
-		final Metadata meta = new Metadata();
-		final BdfDictionary metaDictionary = BdfDictionary.of(
+		Transaction txn = new Transaction(null, false);
+		GroupId contactGroupId = new GroupId(getRandomId());
+		long timestamp = 123456789;
+		Message message = getMessage(contactGroupId, timestamp);
+		Metadata meta = new Metadata();
+		BdfDictionary metaDictionary = BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 2),
 				new BdfEntry("local", false)
 		);
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// A remote update for another transport should be ignored
 		MessageId barUpdateId = new MessageId(getRandomId());
@@ -210,32 +210,32 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testDeletesOlderUpdatesWhenUpdateIsDelivered()
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final GroupId contactGroupId = new GroupId(getRandomId());
-		final long timestamp = 123456789;
-		final Message message = getMessage(contactGroupId, timestamp);
-		final Metadata meta = new Metadata();
-		final BdfDictionary metaDictionary = BdfDictionary.of(
+		Transaction txn = new Transaction(null, false);
+		GroupId contactGroupId = new GroupId(getRandomId());
+		long timestamp = 123456789;
+		Message message = getMessage(contactGroupId, timestamp);
+		Metadata meta = new Metadata();
+		BdfDictionary metaDictionary = BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 4),
 				new BdfEntry("local", false)
 		);
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// Old remote updates for the same transport should be deleted
-		final MessageId fooVersion2 = new MessageId(getRandomId());
+		MessageId fooVersion2 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion2, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 2),
 				new BdfEntry("local", false)
 		));
-		final MessageId fooVersion1 = new MessageId(getRandomId());
+		MessageId fooVersion1 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion1, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 1),
 				new BdfEntry("local", false)
 		));
-		final MessageId fooVersion3 = new MessageId(getRandomId());
+		MessageId fooVersion3 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion3, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 3),
@@ -263,33 +263,33 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testDeletesObsoleteUpdateWhenDelivered() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final GroupId contactGroupId = new GroupId(getRandomId());
-		final long timestamp = 123456789;
-		final Message message = getMessage(contactGroupId, timestamp);
-		final Metadata meta = new Metadata();
-		final BdfDictionary metaDictionary = BdfDictionary.of(
+		Transaction txn = new Transaction(null, false);
+		GroupId contactGroupId = new GroupId(getRandomId());
+		long timestamp = 123456789;
+		Message message = getMessage(contactGroupId, timestamp);
+		Metadata meta = new Metadata();
+		BdfDictionary metaDictionary = BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 3),
 				new BdfEntry("local", false)
 		);
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// Old remote updates for the same transport should be deleted
-		final MessageId fooVersion2 = new MessageId(getRandomId());
+		MessageId fooVersion2 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion2, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 2),
 				new BdfEntry("local", false)
 		));
-		final MessageId fooVersion1 = new MessageId(getRandomId());
+		MessageId fooVersion1 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion1, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 1),
 				new BdfEntry("local", false)
 		));
 		// A newer remote update for the same transport should not be deleted
-		final MessageId fooVersion4 = new MessageId(getRandomId());
+		MessageId fooVersion4 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion4, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 4),
@@ -318,9 +318,9 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testStoresRemotePropertiesWithVersion0() throws Exception {
-		final Contact contact = getContact(true);
-		final Group contactGroup = getGroup();
-		final Transaction txn = new Transaction(null, false);
+		Contact contact = getContact(true);
+		Group contactGroup = getGroup();
+		Transaction txn = new Transaction(null, false);
 		Map<TransportId, TransportProperties> properties =
 				new LinkedHashMap<>();
 		properties.put(new TransportId("foo"), fooProperties);
@@ -357,8 +357,8 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testReturnsEmptyPropertiesIfNoLocalPropertiesAreFound()
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Transaction txn = new Transaction(null, false);
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// A local update for another transport should be ignored
 		MessageId barUpdateId = new MessageId(getRandomId());
@@ -384,8 +384,8 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testReturnsLocalProperties() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Transaction txn = new Transaction(null, false);
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// A local update for another transport should be ignored
 		MessageId barUpdateId = new MessageId(getRandomId());
@@ -395,13 +395,13 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 				new BdfEntry("local", true)
 		));
 		// A local update for the right transport should be returned
-		final MessageId fooUpdateId = new MessageId(getRandomId());
+		MessageId fooUpdateId = new MessageId(getRandomId());
 		messageMetadata.put(fooUpdateId, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 1),
 				new BdfEntry("local", true)
 		));
-		final BdfList fooUpdate = BdfList.of("foo", 1, fooPropertiesDict);
+		BdfList fooUpdate = BdfList.of("foo", 1, fooPropertiesDict);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -423,15 +423,15 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testReturnsRemotePropertiesOrEmptyProperties()
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		Contact contact1 = getContact(false);
-		final Contact contact2 = getContact(true);
-		final Contact contact3 = getContact(true);
-		final List<Contact> contacts =
+		Contact contact2 = getContact(true);
+		Contact contact3 = getContact(true);
+		List<Contact> contacts =
 				Arrays.asList(contact1, contact2, contact3);
-		final Group contactGroup2 = getGroup();
-		final Group contactGroup3 = getGroup();
-		final Map<MessageId, BdfDictionary> messageMetadata3 =
+		Group contactGroup2 = getGroup();
+		Group contactGroup3 = getGroup();
+		Map<MessageId, BdfDictionary> messageMetadata3 =
 				new LinkedHashMap<>();
 		// A remote update for another transport should be ignored
 		MessageId barUpdateId = new MessageId(getRandomId());
@@ -448,13 +448,13 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 				new BdfEntry("local", true)
 		));
 		// A remote update for the right transport should be returned
-		final MessageId fooUpdateId = new MessageId(getRandomId());
+		MessageId fooUpdateId = new MessageId(getRandomId());
 		messageMetadata3.put(fooUpdateId, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 1),
 				new BdfEntry("local", false)
 		));
-		final BdfList fooUpdate = BdfList.of("foo", 1, fooPropertiesDict);
+		BdfList fooUpdate = BdfList.of("foo", 1, fooPropertiesDict);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -492,15 +492,15 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testMergingUnchangedPropertiesDoesNotCreateUpdate()
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final MessageId updateId = new MessageId(getRandomId());
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Transaction txn = new Transaction(null, false);
+		MessageId updateId = new MessageId(getRandomId());
+		Map<MessageId, BdfDictionary> messageMetadata =
 				Collections.singletonMap(updateId, BdfDictionary.of(
 						new BdfEntry("transportId", "foo"),
 						new BdfEntry("version", 1),
 						new BdfEntry("local", true)
 				));
-		final BdfList update = BdfList.of("foo", 1, fooPropertiesDict);
+		BdfList update = BdfList.of("foo", 1, fooPropertiesDict);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -522,9 +522,9 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testMergingNewPropertiesCreatesUpdate() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Contact contact = getContact(true);
-		final Group contactGroup = getGroup();
+		Transaction txn = new Transaction(null, false);
+		Contact contact = getContact(true);
+		Group contactGroup = getGroup();
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -556,21 +556,21 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testMergingUpdatedPropertiesCreatesUpdate() throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final Contact contact = getContact(true);
-		final Group contactGroup = getGroup();
+		Transaction txn = new Transaction(null, false);
+		Contact contact = getContact(true);
+		Group contactGroup = getGroup();
 		BdfDictionary oldMetadata = BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 1),
 				new BdfEntry("local", true)
 		);
-		final MessageId localGroupUpdateId = new MessageId(getRandomId());
-		final Map<MessageId, BdfDictionary> localGroupMessageMetadata =
+		MessageId localGroupUpdateId = new MessageId(getRandomId());
+		Map<MessageId, BdfDictionary> localGroupMessageMetadata =
 				Collections.singletonMap(localGroupUpdateId, oldMetadata);
-		final MessageId contactGroupUpdateId = new MessageId(getRandomId());
-		final Map<MessageId, BdfDictionary> contactGroupMessageMetadata =
+		MessageId contactGroupUpdateId = new MessageId(getRandomId());
+		Map<MessageId, BdfDictionary> contactGroupMessageMetadata =
 				Collections.singletonMap(contactGroupUpdateId, oldMetadata);
-		final BdfList oldUpdate = BdfList.of("foo", 1, BdfDictionary.of(
+		BdfList oldUpdate = BdfList.of("foo", 1, BdfDictionary.of(
 				new BdfEntry("fooKey1", "oldFooValue1")
 		));
 
@@ -638,36 +638,36 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 		return new Message(messageId, g, timestamp, raw);
 	}
 
-	private void expectGetLocalProperties(final Transaction txn)
+	private void expectGetLocalProperties(Transaction txn)
 			throws Exception {
-		final Map<MessageId, BdfDictionary> messageMetadata =
+		Map<MessageId, BdfDictionary> messageMetadata =
 				new LinkedHashMap<>();
 		// The only update for transport "foo" should be returned
-		final MessageId fooVersion999 = new MessageId(getRandomId());
+		MessageId fooVersion999 = new MessageId(getRandomId());
 		messageMetadata.put(fooVersion999, BdfDictionary.of(
 				new BdfEntry("transportId", "foo"),
 				new BdfEntry("version", 999)
 		));
 		// An old update for transport "bar" should be deleted
-		final MessageId barVersion2 = new MessageId(getRandomId());
+		MessageId barVersion2 = new MessageId(getRandomId());
 		messageMetadata.put(barVersion2, BdfDictionary.of(
 				new BdfEntry("transportId", "bar"),
 				new BdfEntry("version", 2)
 		));
 		// An even older update for transport "bar" should be deleted
-		final MessageId barVersion1 = new MessageId(getRandomId());
+		MessageId barVersion1 = new MessageId(getRandomId());
 		messageMetadata.put(barVersion1, BdfDictionary.of(
 				new BdfEntry("transportId", "bar"),
 				new BdfEntry("version", 1)
 		));
 		// The latest update for transport "bar" should be returned
-		final MessageId barVersion3 = new MessageId(getRandomId());
+		MessageId barVersion3 = new MessageId(getRandomId());
 		messageMetadata.put(barVersion3, BdfDictionary.of(
 				new BdfEntry("transportId", "bar"),
 				new BdfEntry("version", 3)
 		));
-		final BdfList fooUpdate = BdfList.of("foo", 999, fooPropertiesDict);
-		final BdfList barUpdate = BdfList.of("bar", 3, barPropertiesDict);
+		BdfList fooUpdate = BdfList.of("foo", 999, fooPropertiesDict);
+		BdfList barUpdate = BdfList.of("bar", 3, barPropertiesDict);
 
 		context.checking(new Expectations() {{
 			// Find the latest local update for each transport
@@ -684,13 +684,13 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void expectStoreMessage(final Transaction txn, final GroupId g,
-			String transportId, final BdfDictionary properties, long version,
-			boolean local, final boolean shared) throws Exception {
-		final long timestamp = 123456789;
-		final BdfList body = BdfList.of(transportId, version, properties);
-		final Message message = getMessage(g, timestamp);
-		final BdfDictionary meta = BdfDictionary.of(
+	private void expectStoreMessage(Transaction txn, GroupId g,
+			String transportId, BdfDictionary properties, long version,
+			boolean local, boolean shared) throws Exception {
+		long timestamp = 123456789;
+		BdfList body = BdfList.of(transportId, version, properties);
+		Message message = getMessage(g, timestamp);
+		BdfDictionary meta = BdfDictionary.of(
 				new BdfEntry("transportId", transportId),
 				new BdfEntry("version", version),
 				new BdfEntry("local", local)
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
index a2ebedfeb9a7e115dfdfbcf2631984b577d22434..92f030052fd6e37578e32318ff1e02dea6669bfe 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
@@ -6,10 +6,10 @@ import org.briarproject.bramble.api.db.Transaction;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.sync.Ack;
 import org.briarproject.bramble.api.sync.MessageId;
+import org.briarproject.bramble.api.sync.RecordWriter;
 import org.briarproject.bramble.test.BrambleTestCase;
 import org.briarproject.bramble.test.ImmediateExecutor;
 import org.briarproject.bramble.test.TestUtils;
-import org.briarproject.bramble.api.sync.RecordWriter;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.junit.Test;
@@ -44,10 +44,10 @@ public class SimplexOutgoingSessionTest extends BrambleTestCase {
 
 	@Test
 	public void testNothingToSend() throws Exception {
-		final SimplexOutgoingSession session = new SimplexOutgoingSession(db,
+		SimplexOutgoingSession session = new SimplexOutgoingSession(db,
 				dbExecutor, eventBus, contactId, maxLatency, recordWriter);
-		final Transaction noAckTxn = new Transaction(null, false);
-		final Transaction noMsgTxn = new Transaction(null, false);
+		Transaction noAckTxn = new Transaction(null, false);
+		Transaction noMsgTxn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Add listener
@@ -80,14 +80,14 @@ public class SimplexOutgoingSessionTest extends BrambleTestCase {
 
 	@Test
 	public void testSomethingToSend() throws Exception {
-		final Ack ack = new Ack(Collections.singletonList(messageId));
-		final byte[] raw = new byte[1234];
-		final SimplexOutgoingSession session = new SimplexOutgoingSession(db,
+		Ack ack = new Ack(Collections.singletonList(messageId));
+		byte[] raw = new byte[1234];
+		SimplexOutgoingSession session = new SimplexOutgoingSession(db,
 				dbExecutor, eventBus, contactId, maxLatency, recordWriter);
-		final Transaction ackTxn = new Transaction(null, false);
-		final Transaction noAckTxn = new Transaction(null, false);
-		final Transaction msgTxn = new Transaction(null, false);
-		final Transaction noMsgTxn = new Transaction(null, false);
+		Transaction ackTxn = new Transaction(null, false);
+		Transaction noAckTxn = new Transaction(null, false);
+		Transaction msgTxn = new Transaction(null, false);
+		Transaction noMsgTxn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Add listener
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
index e81592dee5d52e7b5a80fbf2a8f8f8b248aeb361..c2285bd5f61694f9feca500ccf2e272141e3f88d 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java
@@ -92,9 +92,9 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testStartAndStop() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			// validateOutstandingMessages()
@@ -126,13 +126,13 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testMessagesAreValidatedAtStartup() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, false);
-		final Transaction txn3 = new Transaction(null, true);
-		final Transaction txn4 = new Transaction(null, false);
-		final Transaction txn5 = new Transaction(null, true);
-		final Transaction txn6 = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, false);
+		Transaction txn3 = new Transaction(null, true);
+		Transaction txn4 = new Transaction(null, false);
+		Transaction txn5 = new Transaction(null, true);
+		Transaction txn6 = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			// Get messages to validate
@@ -217,11 +217,11 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testPendingMessagesAreDeliveredAtStartup() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, false);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, false);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			// Get messages to validate
@@ -303,11 +303,11 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testMessagesAreSharedAtStartup() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, true);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, true);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// No messages to validate
@@ -355,9 +355,9 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testIncomingMessagesAreShared() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
-		final Transaction txn2 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
+		Transaction txn2 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -405,12 +405,12 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testValidationContinuesAfterNoSuchMessageException()
 			throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, true);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, true);
-		final Transaction txn5 = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, true);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, true);
+		Transaction txn5 = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			// Get messages to validate
@@ -476,12 +476,12 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testValidationContinuesAfterNoSuchGroupException()
 			throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, true);
-		final Transaction txn2 = new Transaction(null, true);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, true);
-		final Transaction txn5 = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, true);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, true);
+		Transaction txn5 = new Transaction(null, true);
 
 		context.checking(new Expectations() {{
 			// Get messages to validate
@@ -551,8 +551,8 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testNonLocalMessagesAreValidatedWhenAdded() throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -591,8 +591,8 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testMessagesWithUndeliveredDependenciesArePending()
 			throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -624,8 +624,8 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testMessagesWithDeliveredDependenciesGetDelivered()
 			throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -663,9 +663,9 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 	@Test
 	public void testMessagesWithInvalidDependenciesAreInvalid()
 			throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
-		final Transaction txn2 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
+		Transaction txn2 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -716,18 +716,18 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testRecursiveInvalidation() throws Exception {
-		final MessageId messageId3 = new MessageId(TestUtils.getRandomId());
-		final MessageId messageId4 = new MessageId(TestUtils.getRandomId());
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		MessageId messageId3 = new MessageId(TestUtils.getRandomId());
+		MessageId messageId4 = new MessageId(TestUtils.getRandomId());
+		Map<MessageId, State> twoDependents = new LinkedHashMap<>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
-		final Transaction txn2 = new Transaction(null, false);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, false);
-		final Transaction txn5 = new Transaction(null, false);
-		final Transaction txn6 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
+		Transaction txn2 = new Transaction(null, false);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, false);
+		Transaction txn5 = new Transaction(null, false);
+		Transaction txn6 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -819,25 +819,25 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testPendingDependentsGetDelivered() throws Exception {
-		final MessageId messageId3 = new MessageId(TestUtils.getRandomId());
-		final MessageId messageId4 = new MessageId(TestUtils.getRandomId());
-		final Message message3 = new Message(messageId3, groupId, timestamp,
+		MessageId messageId3 = new MessageId(TestUtils.getRandomId());
+		MessageId messageId4 = new MessageId(TestUtils.getRandomId());
+		Message message3 = new Message(messageId3, groupId, timestamp,
 				raw);
-		final Message message4 = new Message(messageId4, groupId, timestamp,
+		Message message4 = new Message(messageId4, groupId, timestamp,
 				raw);
-		final Map<MessageId, State> twoDependents = new LinkedHashMap<>();
+		Map<MessageId, State> twoDependents = new LinkedHashMap<>();
 		twoDependents.put(messageId1, PENDING);
 		twoDependents.put(messageId2, PENDING);
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
 		twoDependencies.put(messageId1, DELIVERED);
 		twoDependencies.put(messageId2, DELIVERED);
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
-		final Transaction txn2 = new Transaction(null, false);
-		final Transaction txn3 = new Transaction(null, false);
-		final Transaction txn4 = new Transaction(null, false);
-		final Transaction txn5 = new Transaction(null, false);
-		final Transaction txn6 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
+		Transaction txn2 = new Transaction(null, false);
+		Transaction txn3 = new Transaction(null, false);
+		Transaction txn4 = new Transaction(null, false);
+		Transaction txn5 = new Transaction(null, false);
+		Transaction txn6 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
@@ -976,12 +976,12 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testOnlyReadyPendingDependentsGetDelivered() throws Exception {
-		final Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
+		Map<MessageId, State> twoDependencies = new LinkedHashMap<>();
 		twoDependencies.put(messageId, DELIVERED);
 		twoDependencies.put(messageId2, UNKNOWN);
-		final Transaction txn = new Transaction(null, true);
-		final Transaction txn1 = new Transaction(null, false);
-		final Transaction txn2 = new Transaction(null, false);
+		Transaction txn = new Transaction(null, true);
+		Transaction txn1 = new Transaction(null, false);
+		Transaction txn2 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Load the group
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
index d4d02efa2cb99a3020935401d3fca2c7e95fb549..ade43e14486ed9a9f23b7825e1d6e8a8021ea1b2 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/KeyManagerImplTest.java
@@ -58,21 +58,21 @@ public class KeyManagerImplTest extends BrambleTestCase {
 
 	@Before
 	public void testStartService() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		AuthorId remoteAuthorId = new AuthorId(getRandomId());
 		Author remoteAuthor = new Author(remoteAuthorId, "author",
 				getRandomBytes(42));
 		AuthorId localAuthorId = new AuthorId(getRandomId());
-		final Collection<Contact> contacts = new ArrayList<>();
+		Collection<Contact> contacts = new ArrayList<>();
 		contacts.add(new Contact(contactId, remoteAuthor, localAuthorId, true,
 				true));
 		contacts.add(new Contact(inactiveContactId, remoteAuthor, localAuthorId,
 				true, false));
-		final SimplexPluginFactory pluginFactory =
+		SimplexPluginFactory pluginFactory =
 				context.mock(SimplexPluginFactory.class);
-		final Collection<SimplexPluginFactory> factories = Collections
+		Collection<SimplexPluginFactory> factories = Collections
 				.singletonList(pluginFactory);
-		final int maxLatency = 1337;
+		int maxLatency = 1337;
 
 		context.checking(new Expectations() {{
 			oneOf(pluginConfig).getSimplexFactories();
@@ -100,9 +100,9 @@ public class KeyManagerImplTest extends BrambleTestCase {
 
 	@Test
 	public void testAddContact() throws Exception {
-		final SecretKey secretKey = getSecretKey();
-		final long timestamp = 42L;
-		final boolean alice =  true;
+		SecretKey secretKey = getSecretKey();
+		long timestamp = 42L;
+		boolean alice =  true;
 
 		context.checking(new Expectations() {{
 			oneOf(transportKeyManager)
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
index 40ff0763105d6756b87752fc08af10dda68fef3c..d8e2ae1dea1c1aa81104728e027cd93d3ad8fbee 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamReaderImplTest.java
@@ -14,7 +14,7 @@ public class StreamReaderImplTest extends BrambleTestCase {
 	@Test
 	public void testEmptyFramesAreSkipped() throws Exception {
 		Mockery context = new Mockery();
-		final StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
+		StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
 		context.checking(new Expectations() {{
 			oneOf(decrypter).readFrame(with(any(byte[].class)));
 			will(returnValue(0)); // Empty frame
@@ -37,7 +37,7 @@ public class StreamReaderImplTest extends BrambleTestCase {
 	@Test
 	public void testEmptyFramesAreSkippedWithBuffer() throws Exception {
 		Mockery context = new Mockery();
-		final StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
+		StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
 		context.checking(new Expectations() {{
 			oneOf(decrypter).readFrame(with(any(byte[].class)));
 			will(returnValue(0)); // Empty frame
@@ -63,7 +63,7 @@ public class StreamReaderImplTest extends BrambleTestCase {
 	@Test
 	public void testMultipleReadsPerFrame() throws Exception {
 		Mockery context = new Mockery();
-		final StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
+		StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
 		context.checking(new Expectations() {{
 			oneOf(decrypter).readFrame(with(any(byte[].class)));
 			will(returnValue(MAX_PAYLOAD_LENGTH)); // Nice long frame
@@ -85,7 +85,7 @@ public class StreamReaderImplTest extends BrambleTestCase {
 	@Test
 	public void testMultipleReadsPerFrameWithOffsets() throws Exception {
 		Mockery context = new Mockery();
-		final StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
+		StreamDecrypter decrypter = context.mock(StreamDecrypter.class);
 		context.checking(new Expectations() {{
 			oneOf(decrypter).readFrame(with(any(byte[].class)));
 			will(returnValue(MAX_PAYLOAD_LENGTH)); // Nice long frame
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
index b0db082ba8d4b968d0fe6f4bcd1e25929df6ba38..53f1038bdbd60ace0d20216ccc634902d801b4ff 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/StreamWriterImplTest.java
@@ -14,7 +14,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	@Test
 	public void testCloseWithoutWritingWritesFinalFrame() throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		context.checking(new Expectations() {{
 			// Write an empty final frame
 			oneOf(encrypter).writeFrame(with(any(byte[].class)), with(0),
@@ -31,7 +31,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	public void testFlushWithoutBufferedDataWritesFrameAndFlushes()
 			throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		StreamWriterImpl w = new StreamWriterImpl(encrypter);
 		context.checking(new Expectations() {{
 			// Write a non-final frame with an empty payload
@@ -58,7 +58,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	public void testFlushWithBufferedDataWritesFrameAndFlushes()
 			throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		StreamWriterImpl w = new StreamWriterImpl(encrypter);
 		context.checking(new Expectations() {{
 			// Write a non-final frame with one payload byte
@@ -85,7 +85,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	@Test
 	public void testSingleByteWritesWriteFullFrame() throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		StreamWriterImpl w = new StreamWriterImpl(encrypter);
 		context.checking(new Expectations() {{
 			// Write a full non-final frame
@@ -109,7 +109,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	@Test
 	public void testMultiByteWritesWriteFullFrames() throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		StreamWriterImpl w = new StreamWriterImpl(encrypter);
 		context.checking(new Expectations() {{
 			// Write two full non-final frames
@@ -140,7 +140,7 @@ public class StreamWriterImplTest extends BrambleTestCase {
 	@Test
 	public void testLargeMultiByteWriteWritesFullFrames() throws Exception {
 		Mockery context = new Mockery();
-		final StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
+		StreamEncrypter encrypter = context.mock(StreamEncrypter.class);
 		StreamWriterImpl w = new StreamWriterImpl(encrypter);
 		context.checking(new Expectations() {{
 			// Write two full non-final frames
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
index a418f9066e082fe0eaeb41e52b3c586e66550873..0cdfaeb561228cfd7d22c991a7dae780ba5becb4 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/TransportKeyManagerImplTest.java
@@ -56,20 +56,20 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	@Test
 	public void testKeysAreRotatedAtStartup() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final Map<ContactId, TransportKeys> loaded = new LinkedHashMap<>();
-		final TransportKeys shouldRotate = createTransportKeys(900, 0);
-		final TransportKeys shouldNotRotate = createTransportKeys(1000, 0);
+		Map<ContactId, TransportKeys> loaded = new LinkedHashMap<>();
+		TransportKeys shouldRotate = createTransportKeys(900, 0);
+		TransportKeys shouldNotRotate = createTransportKeys(1000, 0);
 		loaded.put(contactId, shouldRotate);
 		loaded.put(contactId1, shouldNotRotate);
-		final TransportKeys rotated = createTransportKeys(1000, 0);
-		final Transaction txn = new Transaction(null, false);
+		TransportKeys rotated = createTransportKeys(1000, 0);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Get the current time (1 ms after start of rotation period 1000)
@@ -108,17 +108,17 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	@Test
 	public void testKeysAreRotatedWhenAddingContact() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final boolean alice = true;
-		final TransportKeys transportKeys = createTransportKeys(999, 0);
-		final TransportKeys rotated = createTransportKeys(1000, 0);
-		final Transaction txn = new Transaction(null, false);
+		boolean alice = true;
+		TransportKeys transportKeys = createTransportKeys(999, 0);
+		TransportKeys rotated = createTransportKeys(1000, 0);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(crypto).deriveTransportKeys(transportId, masterKey, 999,
@@ -155,14 +155,14 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	public void testOutgoingStreamContextIsNullIfContactIsNotFound()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		TransportKeyManager
 				transportKeyManager = new TransportKeyManagerImpl(db,
@@ -176,18 +176,18 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	public void testOutgoingStreamContextIsNullIfStreamCounterIsExhausted()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final boolean alice = true;
+		boolean alice = true;
 		// The stream counter has been exhausted
-		final TransportKeys transportKeys = createTransportKeys(1000,
+		TransportKeys transportKeys = createTransportKeys(1000,
 				MAX_32_BIT_UNSIGNED + 1);
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(crypto).deriveTransportKeys(transportId, masterKey, 1000,
@@ -224,18 +224,18 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	@Test
 	public void testOutgoingStreamCounterIsIncremented() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final boolean alice = true;
+		boolean alice = true;
 		// The stream counter can be used one more time before being exhausted
-		final TransportKeys transportKeys = createTransportKeys(1000,
+		TransportKeys transportKeys = createTransportKeys(1000,
 				MAX_32_BIT_UNSIGNED);
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(crypto).deriveTransportKeys(transportId, masterKey, 1000,
@@ -285,16 +285,16 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	public void testIncomingStreamContextIsNullIfTagIsNotFound()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final boolean alice = true;
-		final TransportKeys transportKeys = createTransportKeys(1000, 0);
-		final Transaction txn = new Transaction(null, false);
+		boolean alice = true;
+		TransportKeys transportKeys = createTransportKeys(1000, 0);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(crypto).deriveTransportKeys(transportId, masterKey, 1000,
@@ -332,18 +332,18 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	@Test
 	public void testTagIsNotRecognisedTwice() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final boolean alice = true;
-		final TransportKeys transportKeys = createTransportKeys(1000, 0);
+		boolean alice = true;
+		TransportKeys transportKeys = createTransportKeys(1000, 0);
 		// Keep a copy of the tags
-		final List<byte[]> tags = new ArrayList<>();
-		final Transaction txn = new Transaction(null, false);
+		List<byte[]> tags = new ArrayList<>();
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(crypto).deriveTransportKeys(transportId, masterKey, 1000,
@@ -402,19 +402,19 @@ public class TransportKeyManagerImplTest extends BrambleTestCase {
 	@Test
 	public void testKeysAreRotatedToCurrentPeriod() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final CryptoComponent crypto = context.mock(CryptoComponent.class);
-		final Executor dbExecutor = context.mock(Executor.class);
-		final ScheduledExecutorService scheduler =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		CryptoComponent crypto = context.mock(CryptoComponent.class);
+		Executor dbExecutor = context.mock(Executor.class);
+		ScheduledExecutorService scheduler =
 				context.mock(ScheduledExecutorService.class);
-		final Clock clock = context.mock(Clock.class);
+		Clock clock = context.mock(Clock.class);
 
-		final TransportKeys transportKeys = createTransportKeys(1000, 0);
-		final Map<ContactId, TransportKeys> loaded =
+		TransportKeys transportKeys = createTransportKeys(1000, 0);
+		Map<ContactId, TransportKeys> loaded =
 				Collections.singletonMap(contactId, transportKeys);
-		final TransportKeys rotated = createTransportKeys(1001, 0);
-		final Transaction txn = new Transaction(null, false);
-		final Transaction txn1 = new Transaction(null, false);
+		TransportKeys rotated = createTransportKeys(1001, 0);
+		Transaction txn = new Transaction(null, false);
+		Transaction txn1 = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			// Get the current time (the start of rotation period 1000)
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
index b9312a1bab9834c146f89946071b3220b884eca1..da27f3ba06a4c40d4f414e91012874918238c4f1 100644
--- a/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java
@@ -110,7 +110,7 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
 		public void run() {
 			try {
 				// Load user32.dll
-				final User32 user32 = (User32) Native.loadLibrary("user32",
+				User32 user32 = (User32) Native.loadLibrary("user32",
 						User32.class, options);
 				// Create a callback to handle the WM_QUERYENDSESSION message
 				WindowProc proc = (hwnd, msg, wp, lp) -> {
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
index 616f9661109541df235f5eab8f2a571d02843ce1..a2a8f0b8d2b96911b876b786f3ee5c6a9f1698f6 100644
--- a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java
@@ -41,9 +41,9 @@ public class DesktopPluginModule extends PluginModule {
 				backoffFactory, shutdownManager);
 		SimplexPluginFactory removable =
 				new RemovableDrivePluginFactory(ioExecutor);
-		final Collection<SimplexPluginFactory> simplex =
+		Collection<SimplexPluginFactory> simplex =
 				Collections.singletonList(removable);
-		final Collection<DuplexPluginFactory> duplex =
+		Collection<DuplexPluginFactory> duplex =
 				Arrays.asList(bluetooth, modem, lan, wan);
 		@NotNullByDefault
 		PluginConfig pluginConfig = new PluginConfig() {
diff --git a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
index ee48ad416854d212568ec7bc6c5443cf40b8aadb..6e119909a85b2bbb324f10165e3abac213219d79 100644
--- a/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
+++ b/bramble-j2se/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
@@ -204,18 +204,18 @@ class BluetoothPlugin implements DuplexPlugin {
 	}
 
 	@Override
-	public void poll(final Collection<ContactId> connected) {
+	public void poll(Collection<ContactId> connected) {
 		if (!running) return;
 		backoff.increment();
 		// Try to connect to known devices in parallel
 		Map<ContactId, TransportProperties> remote =
 				callback.getRemoteProperties();
 		for (Entry<ContactId, TransportProperties> e : remote.entrySet()) {
-			final ContactId c = e.getKey();
+			ContactId c = e.getKey();
 			if (connected.contains(c)) continue;
-			final String address = e.getValue().get(PROP_ADDRESS);
+			String address = e.getValue().get(PROP_ADDRESS);
 			if (StringUtils.isNullOrEmpty(address)) continue;
-			final String uuid = e.getValue().get(PROP_UUID);
+			String uuid = e.getValue().get(PROP_UUID);
 			if (StringUtils.isNullOrEmpty(uuid)) continue;
 			ioExecutor.execute(() -> {
 				if (!running) return;
@@ -270,7 +270,7 @@ class BluetoothPlugin implements DuplexPlugin {
 		// Make the device discoverable if possible
 		makeDeviceDiscoverable();
 		// Bind a server socket for receiving key agreementconnections
-		final StreamConnectionNotifier ss;
+		StreamConnectionNotifier ss;
 		try {
 			ss = (StreamConnectionNotifier) Connector.open(url);
 		} catch (IOException e) {
diff --git a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
index 9d8db1b84ddcc7743ee2bf91a6e6b62bf097e284..2c694b53bffefd0599e01e98eadf894712f22f20 100644
--- a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/PollingRemovableDriveMonitorTest.java
@@ -26,10 +26,10 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 	@Test
 	public void testOneCallbackPerFile() throws Exception {
 		// Create a finder that returns no files the first time, then two files
-		final File file1 = new File("foo");
-		final File file2 = new File("bar");
+		File file1 = new File("foo");
+		File file2 = new File("bar");
 		@NotNullByDefault
-		final RemovableDriveFinder finder = new RemovableDriveFinder() {
+		RemovableDriveFinder finder = new RemovableDriveFinder() {
 
 			private AtomicBoolean firstCall = new AtomicBoolean(true);
 
@@ -40,8 +40,8 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 			}
 		};
 		// Create a callback that waits for two files
-		final CountDownLatch latch = new CountDownLatch(2);
-		final List<File> detected = new ArrayList<>();
+		CountDownLatch latch = new CountDownLatch(2);
+		List<File> detected = new ArrayList<>();
 		@NotNullByDefault
 		Callback callback = new Callback() {
 
@@ -57,7 +57,7 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 			}
 		};
 		// Create the monitor and start it
-		final RemovableDriveMonitor monitor = new PollingRemovableDriveMonitor(
+		RemovableDriveMonitor monitor = new PollingRemovableDriveMonitor(
 				Executors.newCachedThreadPool(), finder, 1);
 		monitor.start(callback);
 		// Wait for the monitor to detect the files
@@ -72,7 +72,7 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 	@Test
 	public void testExceptionCallback() throws Exception {
 		// Create a finder that throws an exception the second time it's polled
-		final RemovableDriveFinder finder = new RemovableDriveFinder() {
+		RemovableDriveFinder finder = new RemovableDriveFinder() {
 
 			private AtomicBoolean firstCall = new AtomicBoolean(true);
 
@@ -83,7 +83,7 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 			}
 		};
 		// Create a callback that waits for an exception
-		final CountDownLatch latch = new CountDownLatch(1);
+		CountDownLatch latch = new CountDownLatch(1);
 		@NotNullByDefault
 		Callback callback = new Callback() {
 
@@ -98,7 +98,7 @@ public class PollingRemovableDriveMonitorTest extends BrambleTestCase {
 			}
 		};
 		// Create the monitor and start it
-		final RemovableDriveMonitor monitor = new PollingRemovableDriveMonitor(
+		RemovableDriveMonitor monitor = new PollingRemovableDriveMonitor(
 				Executors.newCachedThreadPool(), finder, 1);
 		monitor.start(callback);
 		assertTrue(latch.await(10, SECONDS));
diff --git a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
index 101c74cf7796368a1995dcdd58d178f8833c96e7..7ab6001b16890fa86958840da42c5bdf7c116099 100644
--- a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/RemovableDrivePluginTest.java
@@ -41,17 +41,17 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	public void testWriterIsNullIfNoDrivesAreFound() throws Exception {
-		final List<File> drives = Collections.emptyList();
+		List<File> drives = Collections.emptyList();
 
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -71,21 +71,21 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	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<>();
+		File drive1 = new File(testDir, "1");
+		File drive2 = new File(testDir, "2");
+		List<File> drives = new ArrayList<>();
 		drives.add(drive1);
 		drives.add(drive2);
 
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -110,21 +110,21 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	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<>();
+		File drive1 = new File(testDir, "1");
+		File drive2 = new File(testDir, "2");
+		List<File> drives = new ArrayList<>();
 		drives.add(drive1);
 		drives.add(drive2);
 
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -149,9 +149,9 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	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<>();
+		File drive1 = new File(testDir, "1");
+		File drive2 = new File(testDir, "2");
+		List<File> drives = new ArrayList<>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a file rather than a directory
@@ -160,12 +160,12 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -190,9 +190,9 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	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<>();
+		File drive1 = new File(testDir, "1");
+		File drive2 = new File(testDir, "2");
+		List<File> drives = new ArrayList<>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
@@ -201,12 +201,12 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -234,9 +234,9 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 
 	@Test
 	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<>();
+		File drive1 = new File(testDir, "1");
+		File drive2 = new File(testDir, "2");
+		List<File> drives = new ArrayList<>();
 		drives.add(drive1);
 		drives.add(drive2);
 		// Create drive1 as a directory
@@ -245,12 +245,12 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -292,12 +292,12 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
@@ -318,12 +318,12 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final Executor executor = context.mock(Executor.class);
-		final SimplexPluginCallback callback =
+		Executor executor = context.mock(Executor.class);
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
@@ -344,11 +344,11 @@ public class RemovableDrivePluginTest extends BrambleTestCase {
 		Mockery context = new Mockery() {{
 			setThreadingPolicy(new Synchroniser());
 		}};
-		final SimplexPluginCallback callback =
+		SimplexPluginCallback callback =
 				context.mock(SimplexPluginCallback.class);
-		final RemovableDriveFinder finder =
+		RemovableDriveFinder finder =
 				context.mock(RemovableDriveFinder.class);
-		final RemovableDriveMonitor monitor =
+		RemovableDriveMonitor monitor =
 				context.mock(RemovableDriveMonitor.class);
 
 		context.checking(new Expectations() {{
diff --git a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
index 0a43ba1538ca19a3bc14bf33cad82614688a13a0..f2d5204ed04242c51b5f55179bf6454960cef23a 100644
--- a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/file/UnixRemovableDriveMonitorTest.java
@@ -61,10 +61,10 @@ public class UnixRemovableDriveMonitorTest extends BrambleTestCase {
 			return;
 		}
 		// Create a callback that will wait for two files before stopping
-		final List<File> detected = new ArrayList<>();
-		final CountDownLatch latch = new CountDownLatch(2);
+		List<File> detected = new ArrayList<>();
+		CountDownLatch latch = new CountDownLatch(2);
 		@NotNullByDefault
-		final Callback callback = new Callback() {
+		Callback callback = new Callback() {
 
 			@Override
 			public void driveInserted(File f) {
@@ -99,7 +99,7 @@ public class UnixRemovableDriveMonitorTest extends BrambleTestCase {
 		TestUtils.deleteTestDirectory(testDir);
 	}
 
-	private RemovableDriveMonitor createMonitor(final File dir) {
+	private RemovableDriveMonitor createMonitor(File dir) {
 		@NotNullByDefault
 		RemovableDriveMonitor monitor = new UnixRemovableDriveMonitor() {
 			@Override
diff --git a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
index 6f8cd501604704e5b4efb479c758f950deb2f534..6d12af19a6c95bfcfcb40703769d433639cc85fe 100644
--- a/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
+++ b/bramble-j2se/src/test/java/org/briarproject/bramble/plugin/modem/ModemPluginTest.java
@@ -21,12 +21,12 @@ public class ModemPluginTest extends BrambleTestCase {
 	@Test
 	public void testModemCreation() throws Exception {
 		Mockery context = new Mockery();
-		final ModemFactory modemFactory = context.mock(ModemFactory.class);
-		final SerialPortList serialPortList =
+		ModemFactory modemFactory = context.mock(ModemFactory.class);
+		SerialPortList serialPortList =
 				context.mock(SerialPortList.class);
-		final ModemPlugin plugin = new ModemPlugin(modemFactory,
+		ModemPlugin plugin = new ModemPlugin(modemFactory,
 				serialPortList, null, 0);
-		final Modem modem = context.mock(Modem.class);
+		Modem modem = context.mock(Modem.class);
 		context.checking(new Expectations() {{
 			oneOf(serialPortList).getPortNames();
 			will(returnValue(new String[] { "foo", "bar", "baz" }));
@@ -53,20 +53,20 @@ public class ModemPluginTest extends BrambleTestCase {
 	@Test
 	public void testCreateConnection() throws Exception {
 		Mockery context = new Mockery();
-		final ModemFactory modemFactory = context.mock(ModemFactory.class);
-		final SerialPortList serialPortList =
+		ModemFactory modemFactory = context.mock(ModemFactory.class);
+		SerialPortList serialPortList =
 				context.mock(SerialPortList.class);
-		final DuplexPluginCallback callback =
+		DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
-		final ModemPlugin plugin = new ModemPlugin(modemFactory,
+		ModemPlugin plugin = new ModemPlugin(modemFactory,
 				serialPortList, callback, 0);
-		final Modem modem = context.mock(Modem.class);
-		final TransportProperties local = new TransportProperties();
+		Modem modem = context.mock(Modem.class);
+		TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
-		final TransportProperties remote = new TransportProperties();
+		TransportProperties remote = new TransportProperties();
 		remote.put("iso3166", ISO_1336);
 		remote.put("number", NUMBER);
-		final ContactId contactId = new ContactId(234);
+		ContactId contactId = new ContactId(234);
 		context.checking(new Expectations() {{
 			// start()
 			oneOf(serialPortList).getPortNames();
@@ -92,20 +92,20 @@ public class ModemPluginTest extends BrambleTestCase {
 	@Test
 	public void testCreateConnectionWhenDialReturnsFalse() throws Exception {
 		Mockery context = new Mockery();
-		final ModemFactory modemFactory = context.mock(ModemFactory.class);
-		final SerialPortList serialPortList =
+		ModemFactory modemFactory = context.mock(ModemFactory.class);
+		SerialPortList serialPortList =
 				context.mock(SerialPortList.class);
-		final DuplexPluginCallback callback =
+		DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
-		final ModemPlugin plugin = new ModemPlugin(modemFactory,
+		ModemPlugin plugin = new ModemPlugin(modemFactory,
 				serialPortList, callback, 0);
-		final Modem modem = context.mock(Modem.class);
-		final TransportProperties local = new TransportProperties();
+		Modem modem = context.mock(Modem.class);
+		TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
-		final TransportProperties remote = new TransportProperties();
+		TransportProperties remote = new TransportProperties();
 		remote.put("iso3166", ISO_1336);
 		remote.put("number", NUMBER);
-		final ContactId contactId = new ContactId(234);
+		ContactId contactId = new ContactId(234);
 		context.checking(new Expectations() {{
 			// start()
 			oneOf(serialPortList).getPortNames();
@@ -131,20 +131,20 @@ public class ModemPluginTest extends BrambleTestCase {
 	@Test
 	public void testCreateConnectionWhenDialThrowsException() throws Exception {
 		Mockery context = new Mockery();
-		final ModemFactory modemFactory = context.mock(ModemFactory.class);
-		final SerialPortList serialPortList =
+		ModemFactory modemFactory = context.mock(ModemFactory.class);
+		SerialPortList serialPortList =
 				context.mock(SerialPortList.class);
-		final DuplexPluginCallback callback =
+		DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
-		final ModemPlugin plugin = new ModemPlugin(modemFactory,
+		ModemPlugin plugin = new ModemPlugin(modemFactory,
 				serialPortList, callback, 0);
-		final Modem modem = context.mock(Modem.class);
-		final TransportProperties local = new TransportProperties();
+		Modem modem = context.mock(Modem.class);
+		TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
-		final TransportProperties remote = new TransportProperties();
+		TransportProperties remote = new TransportProperties();
 		remote.put("iso3166", ISO_1336);
 		remote.put("number", NUMBER);
-		final ContactId contactId = new ContactId(234);
+		ContactId contactId = new ContactId(234);
 		context.checking(new Expectations() {{
 			// start()
 			oneOf(serialPortList).getPortNames();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
index e86afcbdcf90709e8ecbb9e2d434998489507180..41463fe850c3a1646ae856290c4e0e7fde5b2877 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
@@ -242,7 +242,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 		});
 	}
 
-	private void showContactNotification(final ContactId c) {
+	private void showContactNotification(ContactId c) {
 		androidExecutor.runOnUiThread(() -> {
 			if (blockContacts) return;
 			if (c.equals(blockedContact)) return;
@@ -255,7 +255,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@Override
-	public void clearContactNotification(final ContactId c) {
+	public void clearContactNotification(ContactId c) {
 		androidExecutor.runOnUiThread(() -> {
 			Integer count = contactCounts.remove(c);
 			if (count == null) return; // Already cleared
@@ -350,7 +350,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@UiThread
-	private void showGroupMessageNotification(final GroupId g) {
+	private void showGroupMessageNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			if (blockGroups) return;
 			if (g.equals(blockedGroup)) return;
@@ -363,7 +363,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@Override
-	public void clearGroupMessageNotification(final GroupId g) {
+	public void clearGroupMessageNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			Integer count = groupCounts.remove(g);
 			if (count == null) return; // Already cleared
@@ -427,7 +427,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@UiThread
-	private void showForumPostNotification(final GroupId g) {
+	private void showForumPostNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			if (blockForums) return;
 			if (g.equals(blockedGroup)) return;
@@ -440,7 +440,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@Override
-	public void clearForumPostNotification(final GroupId g) {
+	public void clearForumPostNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			Integer count = forumCounts.remove(g);
 			if (count == null) return; // Already cleared
@@ -504,7 +504,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@UiThread
-	private void showBlogPostNotification(final GroupId g) {
+	private void showBlogPostNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			if (blockBlogs) return;
 			if (g.equals(blockedGroup)) return;
@@ -517,7 +517,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@Override
-	public void clearBlogPostNotification(final GroupId g) {
+	public void clearBlogPostNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			Integer count = blogCounts.remove(g);
 			if (count == null) return; // Already cleared
@@ -611,24 +611,24 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	}
 
 	@Override
-	public void blockNotification(final GroupId g) {
+	public void blockNotification(GroupId g) {
 		androidExecutor.runOnUiThread((Runnable) () -> blockedGroup = g);
 	}
 
 	@Override
-	public void unblockNotification(final GroupId g) {
+	public void unblockNotification(GroupId g) {
 		androidExecutor.runOnUiThread(() -> {
 			if (g.equals(blockedGroup)) blockedGroup = null;
 		});
 	}
 
 	@Override
-	public void blockContactNotification(final ContactId c) {
+	public void blockContactNotification(ContactId c) {
 		androidExecutor.runOnUiThread((Runnable) () -> blockedContact = c);
 	}
 
 	@Override
-	public void unblockContactNotification(final ContactId c) {
+	public void unblockContactNotification(ContactId c) {
 		androidExecutor.runOnUiThread(() -> {
 			if (c.equals(blockedContact)) blockedContact = null;
 		});
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
index 4d5dad242d716b61466463ff9e3ce5dc95e1d33a..725a690475b0249b1b2456cbd6f425fcecfde02f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
@@ -80,7 +80,7 @@ public class AppModule {
 	@Provides
 	@Singleton
 	DatabaseConfig provideDatabaseConfig(Application app) {
-		final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
+		File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
 		@MethodsNotNullByDefault
 		@ParametersNotNullByDefault
 		DatabaseConfig databaseConfig = new DatabaseConfig() {
@@ -132,7 +132,7 @@ public class AppModule {
 
 	@Provides
 	@Singleton
-	DevConfig provideDevConfig(final CryptoComponent crypto) {
+	DevConfig provideDevConfig(CryptoComponent crypto) {
 		@NotNullByDefault
 		DevConfig devConfig = new DevConfig() {
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
index 576b00be5ac746435d817431a49b942b1e2302a8..0e6bb7c399b79d68f0bc942164f8d0b4013b6125 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java
@@ -111,7 +111,7 @@ public class BriarService extends Service {
 		}.start();
 	}
 
-	private void showStartupFailureNotification(final StartResult result) {
+	private void showStartupFailureNotification(StartResult result) {
 		androidExecutor.runOnUiThread(() -> {
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(BriarService.this);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
index 7bfd39fa5e020b48c984df05db6ea43dd140e492..218f5b13ca2b6be0d9f46740cdb3ce26693b0cff 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
@@ -151,7 +151,7 @@ public abstract class BaseActivity extends AppCompatActivity
 	}
 
 	@Override
-	public void runOnUiThreadUnlessDestroyed(final Runnable r) {
+	public void runOnUiThreadUnlessDestroyed(Runnable r) {
 		runOnUiThread(() -> {
 			if (!destroyed && !isFinishing()) r.run();
 		});
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
index 663d8581f71743d6e014a275714f5e8851bf48a5..e98a63cfa560756c7a97e53cbce1fe84966991e1 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java
@@ -97,7 +97,7 @@ public abstract class BriarActivity extends BaseActivity {
 		return toolbar;
 	}
 
-	protected void signOut(final boolean removeFromRecentApps) {
+	protected void signOut(boolean removeFromRecentApps) {
 		if (briarController.hasEncryptionKey()) {
 			// Don't use UiResultHandler because we want the result even if
 			// this activity has been destroyed
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
index cc326bef4bd7a6f0de8365c3abd446fe898596cb..e2b588dfa00ff7c0ac9b50958efd0f164a1e94fa 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
@@ -84,7 +84,7 @@ abstract class BaseControllerImpl extends DbControllerImpl
 		this.listener = listener;
 	}
 
-	void onBlogPostAdded(final BlogPostHeader h, final boolean local) {
+	void onBlogPostAdded(BlogPostHeader h, boolean local) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onBlogPostAdded(h, local));
 	}
@@ -94,8 +94,8 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void loadBlogPosts(final GroupId groupId,
-			final ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
+	public void loadBlogPosts(GroupId groupId,
+			ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Collection<BlogPostItem> items = loadItems(groupId);
@@ -129,8 +129,8 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void loadBlogPost(final BlogPostHeader header,
-			final ResultExceptionHandler<BlogPostItem, DbException> handler) {
+	public void loadBlogPost(BlogPostHeader header,
+			ResultExceptionHandler<BlogPostItem, DbException> handler) {
 
 		String body = bodyCache.get(header.getId());
 		if (body != null) {
@@ -155,8 +155,8 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void loadBlogPost(final GroupId g, final MessageId m,
-			final ResultExceptionHandler<BlogPostItem, DbException> handler) {
+	public void loadBlogPost(GroupId g, MessageId m,
+			ResultExceptionHandler<BlogPostItem, DbException> handler) {
 
 		BlogPostHeader header = headerCache.get(m);
 		if (header != null) {
@@ -182,9 +182,8 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void repeatPost(final BlogPostItem item,
-			final @Nullable String comment,
-			final ExceptionHandler<DbException> handler) {
+	public void repeatPost(BlogPostItem item, @Nullable String comment,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor a = identityManager.getLocalAuthor();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
index dc4dff55d8368202fbbc7c53b5939af91af1eb1f..2d3c9b3972a240e5b115d97be529bac7baf10729 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java
@@ -32,7 +32,7 @@ public class BlogActivity extends BriarActivity
 		Intent i = getIntent();
 		byte[] b = i.getByteArrayExtra(GROUP_ID);
 		if (b == null) throw new IllegalStateException("No group ID in intent");
-		final GroupId groupId = new GroupId(b);
+		GroupId groupId = new GroupId(b);
 		blogController.setGroupId(groupId);
 
 		setContentView(R.layout.activity_fragment_container_toolbar);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
index de0e22356f6c9aac996d64378862a26c84e75608..be7b8ff2222cd4fc230f6393f7dbd193efc8bd87 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogControllerImpl.java
@@ -125,32 +125,32 @@ class BlogControllerImpl extends BaseControllerImpl
 		}
 	}
 
-	private void onBlogInvitationAccepted(final ContactId c) {
+	private void onBlogInvitationAccepted(ContactId c) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onBlogInvitationAccepted(c));
 	}
 
-	private void onBlogLeft(final ContactId c) {
+	private void onBlogLeft(ContactId c) {
 		listener.runOnUiThreadUnlessDestroyed(() -> listener.onBlogLeft(c));
 	}
 
 	@Override
 	public void loadBlogPosts(
-			final ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
+			ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		loadBlogPosts(groupId, handler);
 	}
 
 	@Override
-	public void loadBlogPost(final MessageId m,
-			final ResultExceptionHandler<BlogPostItem, DbException> handler) {
+	public void loadBlogPost(MessageId m,
+			ResultExceptionHandler<BlogPostItem, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		loadBlogPost(groupId, m, handler);
 	}
 
 	@Override
 	public void loadBlog(
-			final ResultExceptionHandler<BlogItem, DbException> handler) {
+			ResultExceptionHandler<BlogItem, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		runOnDbThread(() -> {
 			try {
@@ -173,8 +173,7 @@ class BlogControllerImpl extends BaseControllerImpl
 	}
 
 	@Override
-	public void deleteBlog(
-			final ResultExceptionHandler<Void, DbException> handler) {
+	public void deleteBlog(ResultExceptionHandler<Void, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		runOnDbThread(() -> {
 			try {
@@ -195,7 +194,7 @@ class BlogControllerImpl extends BaseControllerImpl
 
 	@Override
 	public void loadSharingContacts(
-			final ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
+			ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		runOnDbThread(() -> {
 			try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
index b9ca60be5bebdcc936cfcf96e46fdc5a3f4a12cd..7f6e36eda4787ef0a02a75b9856b9e46b6116080 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java
@@ -137,7 +137,7 @@ public class BlogFragment extends BaseFragment
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case R.id.action_write_blog_post:
 				Intent i = new Intent(getActivity(),
@@ -184,7 +184,7 @@ public class BlogFragment extends BaseFragment
 	}
 
 	@Override
-	public void onBlogPostAdded(BlogPostHeader header, final boolean local) {
+	public void onBlogPostAdded(BlogPostHeader header, boolean local) {
 		blogController.loadBlogPost(header,
 				new UiResultExceptionHandler<BlogPostItem, DbException>(
 						this) {
@@ -224,7 +224,7 @@ public class BlogFragment extends BaseFragment
 		getContext().startActivity(i);
 	}
 
-	private void loadBlogPosts(final boolean reload) {
+	private void loadBlogPosts(boolean reload) {
 		blogController.loadBlogPosts(
 				new UiResultExceptionHandler<Collection<BlogPostItem>,
 						DbException>(this) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
index b76858c543a9fe692d66c9847387ff69eae5a792..4e01c943f6e67d80bcaacd1f422cb94107160869 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
@@ -88,7 +88,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 		return "blogPost" + id.hashCode();
 	}
 
-	void bindItem(@Nullable final BlogPostItem item) {
+	void bindItem(@Nullable BlogPostItem item) {
 		if (item == null) return;
 
 		setTransitionName(item.getId());
@@ -152,7 +152,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 		}
 	}
 
-	private void onBindComment(final BlogCommentItem item) {
+	private void onBindComment(BlogCommentItem item) {
 		// reblogger
 		reblogger.setAuthor(item.getAuthor());
 		reblogger.setAuthorStatus(item.getAuthorStatus());
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
index bd81d908beb5465029094a37e28f39b1c42462b6..1118fe654da6c0fd0a44d32b04717dbdbedb9525 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedControllerImpl.java
@@ -96,7 +96,7 @@ class FeedControllerImpl extends BaseControllerImpl
 
 	@Override
 	public void loadBlogPosts(
-			final ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
+			ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -122,7 +122,7 @@ class FeedControllerImpl extends BaseControllerImpl
 
 	@Override
 	public void loadPersonalBlog(
-			final ResultExceptionHandler<Blog, DbException> handler) {
+			ResultExceptionHandler<Blog, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
index a3153ef4eb3c59bbecfbb47ebcd645840fcf93bc..a884510a0ff8c9c9d5f40d3f5ea86c7c3fb6b62a 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java
@@ -135,8 +135,8 @@ public class FeedFragment extends BaseFragment implements
 				});
 	}
 
-	private void loadBlogPosts(final boolean clear) {
-		final int revision = adapter.getRevision();
+	private void loadBlogPosts(boolean clear) {
+		int revision = adapter.getRevision();
 		feedController.loadBlogPosts(
 				new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>(
 						this) {
@@ -167,7 +167,7 @@ public class FeedFragment extends BaseFragment implements
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		if (personalBlog == null) return false;
 		switch (item.getItemId()) {
 			case R.id.action_write_blog_post:
@@ -193,7 +193,7 @@ public class FeedFragment extends BaseFragment implements
 	}
 
 	@Override
-	public void onBlogPostAdded(BlogPostHeader header, final boolean local) {
+	public void onBlogPostAdded(BlogPostHeader header, boolean local) {
 		feedController.loadBlogPost(header,
 				new UiResultExceptionHandler<BlogPostItem, DbException>(
 						this) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
index d6727098b2523819d0266ef831fc8d916762bbc4..4318958cd4bece6f0896f1f11f87436db311975c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java
@@ -34,7 +34,7 @@ class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
 
 	@Override
 	public void onBindViewHolder(FeedViewHolder ui, int position) {
-		final Feed item = getItemAt(position);
+		Feed item = getItemAt(position);
 		if (item == null) return;
 
 		// Feed Title
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
index bc20c8fe9ca1191376a88c5c69a7fdbe806218cd..3629f9bef02809bfcf9ffc7cf104483bf1d752a9 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
@@ -118,7 +118,7 @@ public class RssFeedImportActivity extends BriarActivity {
 		importFeed(url);
 	}
 
-	private void importFeed(final String url) {
+	private void importFeed(String url) {
 		ioExecutor.execute(() -> {
 			try {
 				feedManager.addFeed(url);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
index b3edc82bdc628a502339e4a589ded40925a1adc2..49dbc997d33a5931552c7212f49e08778fc9a84c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
@@ -103,7 +103,7 @@ public class RssFeedManageActivity extends BriarActivity
 	}
 
 	@Override
-	public void onDeleteClick(final Feed feed) {
+	public void onDeleteClick(Feed feed) {
 		DialogInterface.OnClickListener okListener =
 				(dialog, which) -> deleteFeed(feed);
 		AlertDialog.Builder builder = new AlertDialog.Builder(this,
@@ -118,7 +118,7 @@ public class RssFeedManageActivity extends BriarActivity
 	}
 
 	private void loadFeeds() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		runOnDbThread(() -> {
 			try {
 				displayFeeds(revision, feedManager.getFeeds());
@@ -129,7 +129,7 @@ public class RssFeedManageActivity extends BriarActivity
 		});
 	}
 
-	private void displayFeeds(final int revision, final List<Feed> feeds) {
+	private void displayFeeds(int revision, List<Feed> feeds) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (revision == adapter.getRevision()) {
 				adapter.incrementRevision();
@@ -142,7 +142,7 @@ public class RssFeedManageActivity extends BriarActivity
 		});
 	}
 
-	private void deleteFeed(final Feed feed) {
+	private void deleteFeed(Feed feed) {
 		runOnDbThread(() -> {
 			try {
 				feedManager.removeFeed(feed);
@@ -161,7 +161,7 @@ public class RssFeedManageActivity extends BriarActivity
 		});
 	}
 
-	private void onFeedDeleted(final Feed feed) {
+	private void onFeedDeleted(Feed feed) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			adapter.remove(feed);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
index c5f2eb3c169f2c650fab92cd28a910ed0d1b3348..45ed94f948a6d623e8634189eeb65f521ac86cb4 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
@@ -140,7 +140,7 @@ public class WriteBlogPostActivity extends BriarActivity
 		storePost(body);
 	}
 
-	private void storePost(final String body) {
+	private void storePost(String body) {
 		runOnDbThread(() -> {
 			long now = System.currentTimeMillis();
 			try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
index fb89f85d1be08462ab29a24f38f986bec37f601f..1f577c366936ed72507ff598c44bcc0f3dccfd37 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java
@@ -23,7 +23,7 @@ public abstract class BaseContactListAdapter<I extends ContactItem, VH extends C
 	}
 
 	@Override
-	public void onBindViewHolder(final VH ui, int position) {
+	public void onBindViewHolder(VH ui, int position) {
 		I item = items.get(position);
 		ui.bind(item, listener);
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
index b381e3dfab16848f91cc16dc96a71f93ce679430..a21e9ae1b3a1ee89727f45b06712bd594ada9b73 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactItemViewHolder.java
@@ -37,8 +37,7 @@ public class ContactItemViewHolder<I extends ContactItem>
 		bulb = (ImageView) v.findViewById(R.id.bulbView);
 	}
 
-	protected void bind(final I item,
-			@Nullable final OnContactClickListener<I> listener) {
+	protected void bind(I item, @Nullable OnContactClickListener<I> listener) {
 		Author author = item.getContact().getAuthor();
 		avatar.setImageDrawable(
 				new IdenticonDrawable(author.getId().getBytes()));
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
index 0882f623d05c7ee4bc5d3aa96c3ec77198f842eb..47826355fba0674ace514f842335b6de636e19a5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
@@ -158,7 +158,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case R.id.action_add_contact:
@@ -191,7 +191,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 	}
 
 	private void loadContacts() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		listener.runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -218,8 +218,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		});
 	}
 
-	private void displayContacts(final int revision,
-			final List<ContactListItem> contacts) {
+	private void displayContacts(int revision, List<ContactListItem> contacts) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (revision == adapter.getRevision()) {
 				adapter.incrementRevision();
@@ -282,7 +281,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		}
 	}
 
-	private void updateItem(final ContactId c, final BaseMessageHeader h) {
+	private void updateItem(ContactId c, BaseMessageHeader h) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			int position = adapter.findItemPosition(c);
@@ -295,7 +294,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		});
 	}
 
-	private void removeItem(final ContactId c) {
+	private void removeItem(ContactId c) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			int position = adapter.findItemPosition(c);
@@ -304,7 +303,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
 		});
 	}
 
-	private void setConnected(final ContactId c, final boolean connected) {
+	private void setConnected(ContactId c, boolean connected) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			int position = adapter.findItemPosition(c);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
index 3768c83058584d766db30bcd979c08e05b45c0d6..d0ae82427af1938bb94d7528c7798dd3860937c6 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
@@ -268,7 +268,7 @@ public class ConversationActivity extends BriarActivity
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case android.R.id.home:
@@ -338,7 +338,7 @@ public class ConversationActivity extends BriarActivity
 	}
 
 	private void loadMessages() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -370,10 +370,10 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void displayMessages(final int revision,
-			final Collection<PrivateMessageHeader> headers,
-			final Collection<IntroductionMessage> introductions,
-			final Collection<InvitationMessage> invitations) {
+	private void displayMessages(int revision,
+			Collection<PrivateMessageHeader> headers,
+			Collection<IntroductionMessage> introductions,
+			Collection<InvitationMessage> invitations) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (revision == adapter.getRevision()) {
 				adapter.incrementRevision();
@@ -436,7 +436,7 @@ public class ConversationActivity extends BriarActivity
 		return items;
 	}
 
-	private void loadMessageBody(final MessageId m) {
+	private void loadMessageBody(MessageId m) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -451,7 +451,7 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void displayMessageBody(final MessageId m, final String body) {
+	private void displayMessageBody(MessageId m, String body) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			bodyCache.put(m, body);
 			SparseArray<ConversationItem> messages =
@@ -543,7 +543,7 @@ public class ConversationActivity extends BriarActivity
 		}
 	}
 
-	private void addConversationItem(final ConversationItem item) {
+	private void addConversationItem(ConversationItem item) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			adapter.add(item);
@@ -552,10 +552,10 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void handleIntroductionRequest(final IntroductionRequest m) {
+	private void handleIntroductionRequest(IntroductionRequest m) {
 		getContactNameTask().addListener(new FutureTaskListener<String>() {
 			@Override
-			public void onSuccess(final String contactName) {
+			public void onSuccess(String contactName) {
 				runOnUiThreadUnlessDestroyed(() -> {
 					ConversationItem item = ConversationItem
 							.from(ConversationActivity.this, contactName, m);
@@ -563,17 +563,17 @@ public class ConversationActivity extends BriarActivity
 				});
 			}
 			@Override
-			public void onFailure(final Throwable exception) {
+			public void onFailure(Throwable exception) {
 				runOnUiThreadUnlessDestroyed(
 						() -> handleDbException((DbException) exception));
 			}
 		});
 	}
 
-	private void handleIntroductionResponse(final IntroductionResponse m) {
+	private void handleIntroductionResponse(IntroductionResponse m) {
 		getContactNameTask().addListener(new FutureTaskListener<String>() {
 			@Override
-			public void onSuccess(final String contactName) {
+			public void onSuccess(String contactName) {
 				runOnUiThreadUnlessDestroyed(() -> {
 					ConversationItem item = ConversationItem
 							.from(ConversationActivity.this, contactName, m);
@@ -581,17 +581,17 @@ public class ConversationActivity extends BriarActivity
 				});
 			}
 			@Override
-			public void onFailure(final Throwable exception) {
+			public void onFailure(Throwable exception) {
 				runOnUiThreadUnlessDestroyed(
 						() -> handleDbException((DbException) exception));
 			}
 		});
 	}
 
-	private void handleInvitationRequest(final InvitationRequest m) {
+	private void handleInvitationRequest(InvitationRequest m) {
 		getContactNameTask().addListener(new FutureTaskListener<String>() {
 			@Override
-			public void onSuccess(final String contactName) {
+			public void onSuccess(String contactName) {
 				runOnUiThreadUnlessDestroyed(() -> {
 					ConversationItem item = ConversationItem
 							.from(ConversationActivity.this, contactName, m);
@@ -599,17 +599,17 @@ public class ConversationActivity extends BriarActivity
 				});
 			}
 			@Override
-			public void onFailure(final Throwable exception) {
+			public void onFailure(Throwable exception) {
 				runOnUiThreadUnlessDestroyed(
 						() -> handleDbException((DbException) exception));
 			}
 		});
 	}
 
-	private void handleInvitationResponse(final InvitationResponse m) {
+	private void handleInvitationResponse(InvitationResponse m) {
 		getContactNameTask().addListener(new FutureTaskListener<String>() {
 			@Override
-			public void onSuccess(final String contactName) {
+			public void onSuccess(String contactName) {
 				runOnUiThreadUnlessDestroyed(() -> {
 					ConversationItem item = ConversationItem
 							.from(ConversationActivity.this, contactName, m);
@@ -617,15 +617,15 @@ public class ConversationActivity extends BriarActivity
 				});
 			}
 			@Override
-			public void onFailure(final Throwable exception) {
+			public void onFailure(Throwable exception) {
 				runOnUiThreadUnlessDestroyed(
 						() -> handleDbException((DbException) exception));
 			}
 		});
 	}
 
-	private void markMessages(final Collection<MessageId> messageIds,
-			final boolean sent, final boolean seen) {
+	private void markMessages(Collection<MessageId> messageIds,
+			boolean sent, boolean seen) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			Set<MessageId> messages = new HashSet<>(messageIds);
@@ -659,7 +659,7 @@ public class ConversationActivity extends BriarActivity
 		return item == null ? 0 : item.getTime() + 1;
 	}
 
-	private void loadGroupId(final String body, final long timestamp) {
+	private void loadGroupId(String body, long timestamp) {
 		runOnDbThread(() -> {
 			try {
 				messagingGroupId =
@@ -672,7 +672,7 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void createMessage(final String body, final long timestamp) {
+	private void createMessage(String body, long timestamp) {
 		cryptoExecutor.execute(() -> {
 			try {
 				//noinspection ConstantConditions init in loadGroupId()
@@ -683,7 +683,7 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void storeMessage(final PrivateMessage m, final String body) {
+	private void storeMessage(PrivateMessage m, String body) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -739,7 +739,7 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void enableIntroductionActionIfAvailable(final MenuItem item) {
+	private void enableIntroductionActionIfAvailable(MenuItem item) {
 		runOnDbThread(() -> {
 			try {
 				if (contactManager.getActiveContacts().size() > 1) {
@@ -757,7 +757,7 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void enableIntroductionAction(final MenuItem item) {
+	private void enableIntroductionAction(MenuItem item) {
 		runOnUiThreadUnlessDestroyed(() -> item.setEnabled(true));
 	}
 
@@ -817,7 +817,7 @@ public class ConversationActivity extends BriarActivity
 		if (!item.isRead()) markMessageRead(item.getGroupId(), item.getId());
 	}
 
-	private void markMessageRead(final GroupId g, final MessageId m) {
+	private void markMessageRead(GroupId g, MessageId m) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -833,8 +833,7 @@ public class ConversationActivity extends BriarActivity
 
 	@UiThread
 	@Override
-	public void respondToRequest(final ConversationRequestItem item,
-			final boolean accept) {
+	public void respondToRequest(ConversationRequestItem item, boolean accept) {
 		item.setAnswered(true);
 		int position = adapter.findItemPosition(item);
 		if (position != INVALID_POSITION) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
index c115a20c693492d8e0e65ac88c80726edfe74933..f5718c1dc9c97cc80daf55613d512ac5997278d0 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
@@ -25,10 +25,10 @@ class ConversationRequestViewHolder extends ConversationNoticeInViewHolder {
 	}
 
 	void bind(ConversationItem conversationItem,
-			final ConversationListener listener) {
+			ConversationListener listener) {
 		super.bind(conversationItem);
 
-		final ConversationRequestItem item =
+		ConversationRequestItem item =
 				(ConversationRequestItem) conversationItem;
 
 		if (item.wasAnswered() && item.canBeOpened()) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
index c7c10849d7de9ff3c12b7f0ccf65e0dbf891d8b9..7b3f681e90d1775ea7589907cbcabaec4fc7af2f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java
@@ -117,7 +117,7 @@ public abstract class BaseContactSelectorFragment<I extends SelectableContactIte
 		onSelectionChanged();
 	}
 
-	private void loadContacts(final Collection<ContactId> selection) {
+	private void loadContacts(Collection<ContactId> selection) {
 		getController().loadContacts(groupId, selection,
 				new UiResultExceptionHandler<Collection<I>, DbException>(
 						this) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
index 4cf1a29a7757593809d87ca7b9bb7e496dac02da..a11f3a6fd0b1a431092c6f8f427867be898ff47f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorActivity.java
@@ -25,7 +25,7 @@ public abstract class ContactSelectorActivity
 		extends BriarActivity
 		implements BaseFragmentListener, ContactSelectorListener {
 
-	final static String CONTACTS = "contacts";
+	protected final static String CONTACTS = "contacts";
 
 	// Subclasses may initialise the group ID in different places
 	protected GroupId groupId;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
index 83a3cc28c1d456c1a1efa218483890988162a04d..983918a1ebefc318533ef4119537814ce37a09c7 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorControllerImpl.java
@@ -38,9 +38,8 @@ public abstract class ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void loadContacts(final GroupId g,
-			final Collection<ContactId> selection,
-			final ResultExceptionHandler<Collection<SelectableContactItem>, DbException> handler) {
+	public void loadContacts(GroupId g, Collection<ContactId> selection,
+			ResultExceptionHandler<Collection<SelectableContactItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Collection<SelectableContactItem> contacts = new ArrayList<>();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
index 07908ac8b87662f6bdacbe0c938387e213ddc407..ec6cd389b2542e83acad124b22623969fd292770 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/ContactSelectorFragment.java
@@ -36,7 +36,7 @@ public abstract class ContactSelectorFragment extends
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case R.id.action_contacts_selected:
 				selectedContacts = adapter.getSelectedContactIds();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
index 3d15ff7a2f6bca39d9d81e9ae11ac1ed5485920e..ff010ecac05c76e51fe964a5856020cabf3bb928 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java
@@ -66,7 +66,7 @@ public class BriarControllerImpl implements BriarController {
 	}
 
 	@Override
-	public void signOut(final ResultHandler<Void> eventHandler) {
+	public void signOut(ResultHandler<Void> eventHandler) {
 		new Thread() {
 			@Override
 			public void run() {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
index 468bfd8658e041c59e289c7c02db0378363a4ea7..5899697ef0a49347f8651179b25fa6c7121035b2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/DbControllerImpl.java
@@ -28,7 +28,7 @@ public class DbControllerImpl implements DbController {
 	}
 
 	@Override
-	public void runOnDbThread(final Runnable task) {
+	public void runOnDbThread(Runnable task) {
 		dbExecutor.execute(() -> {
 			try {
 				lifecycleManager.waitForDatabase();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/SharingControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/SharingControllerImpl.java
index b6091a097f96a5741eb00e3df3bc42f83e639ea0..643a073d5b02716452a2487239f6a60901d93677 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/SharingControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/SharingControllerImpl.java
@@ -58,7 +58,7 @@ public class SharingControllerImpl implements SharingController, EventListener {
 		}
 	}
 
-	private void setConnected(final ContactId c) {
+	private void setConnected(ContactId c) {
 		if (listener == null) return;
 		listener.runOnUiThreadUnlessDestroyed(() -> {
 			if (contacts.contains(c)) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
index c3d6ae5471ec982af1b9863861a8fe2003c546f8..20859ad97988d74654c3c241cdda8709564fb346 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiExceptionHandler.java
@@ -19,7 +19,7 @@ public abstract class UiExceptionHandler<E extends Exception>
 	}
 
 	@Override
-	public void onException(final E exception) {
+	public void onException(E exception) {
 		listener.runOnUiThreadUnlessDestroyed(() -> onExceptionUi(exception));
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
index 783713c2e1c3d67fecf348f7744f4e0261608efd..1c9b11b2c104c0b852f4f16249a36c1641f5b7a2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultExceptionHandler.java
@@ -17,7 +17,7 @@ public abstract class UiResultExceptionHandler<R, E extends Exception>
 	}
 
 	@Override
-	public void onResult(final R result) {
+	public void onResult(R result) {
 		listener.runOnUiThreadUnlessDestroyed(() -> onResultUi(result));
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
index 277952c40510e739287d4aba4b6845a78893ea98..5e0081af61fc2f27e8387464b022e5e10756b7d2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/handler/UiResultHandler.java
@@ -13,7 +13,7 @@ public abstract class UiResultHandler<R> implements ResultHandler<R> {
 	}
 
 	@Override
-	public void onResult(final R result) {
+	public void onResult(R result) {
 		listener.runOnUiThreadUnlessDestroyed(() -> onResultUi(result));
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
index 1eea0e84bbef74c2037b73ae3ae7fdd3e7415b94..6a87b3b7120032d6287c796f5ce4c498d10903bd 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java
@@ -120,7 +120,7 @@ public class CreateForumActivity extends BriarActivity {
 		storeForum(nameEntry.getText().toString());
 	}
 
-	private void storeForum(final String name) {
+	private void storeForum(String name) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -136,7 +136,7 @@ public class CreateForumActivity extends BriarActivity {
 		});
 	}
 
-	private void displayForum(final Forum f) {
+	private void displayForum(Forum f) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			Intent i = new Intent(CreateForumActivity.this,
 					ForumActivity.class);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
index 5f4ce44ae0204577ca369be078fcd821631e1129..51e6f3937f47376c6d406993116ee1aa8665c854 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
@@ -106,7 +106,7 @@ public class ForumActivity extends
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case R.id.action_forum_share:
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
index faddfa1c9e907efa2cbeca8dff54d6d051b6d441..5b68f84cb95e6fcc21234625a913bed43d48ad81 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
@@ -120,7 +120,7 @@ class ForumControllerImpl extends
 
 	@Override
 	public void loadSharingContacts(
-			final ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
+			ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Collection<Contact> contacts =
@@ -137,9 +137,9 @@ class ForumControllerImpl extends
 	}
 
 	@Override
-	public void createAndStoreMessage(final String body,
-			@Nullable final ForumItem parentItem,
-			final ResultExceptionHandler<ForumItem, DbException> handler) {
+	public void createAndStoreMessage(String body,
+			@Nullable ForumItem parentItem,
+			ResultExceptionHandler<ForumItem, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor author = identityManager.getLocalAuthor();
@@ -156,9 +156,9 @@ class ForumControllerImpl extends
 		});
 	}
 
-	private void createMessage(final String body, final long timestamp,
-			final @Nullable MessageId parentId, final LocalAuthor author,
-			final ResultExceptionHandler<ForumItem, DbException> handler) {
+	private void createMessage(String body, long timestamp,
+			@Nullable MessageId parentId, LocalAuthor author,
+			ResultExceptionHandler<ForumItem, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			LOG.info("Creating forum post...");
 			ForumPost msg = forumManager.createLocalPost(getGroupId(), body,
@@ -184,17 +184,17 @@ class ForumControllerImpl extends
 	}
 
 	private void onForumPostReceived(ForumPostHeader h, String body) {
-		final ForumItem item = buildItem(h, body);
+		ForumItem item = buildItem(h, body);
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onItemReceived(item));
 	}
 
-	private void onForumInvitationAccepted(final ContactId c) {
+	private void onForumInvitationAccepted(ContactId c) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onInvitationAccepted(c));
 	}
 
-	private void onForumLeft(final ContactId c) {
+	private void onForumLeft(ContactId c) {
 		listener.runOnUiThreadUnlessDestroyed(() -> listener.onForumLeft(c));
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
index 0eecfd509cc676f388ca404824fe9868f60c1aaa..c46833fe2dd5fcd0de9759785b05c4f7afd15421 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java
@@ -38,7 +38,7 @@ class ForumListAdapter
 
 	@Override
 	public void onBindViewHolder(ForumViewHolder ui, int position) {
-		final ForumListItem item = getItemAt(position);
+		ForumListItem item = getItemAt(position);
 		if (item == null) return;
 
 		// Avatar
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
index 89c0645b024ac14a031e8178a8f057fc298046a2..5fcf22ecf352d69c9bcdf1b405cc77332e2602b6 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java
@@ -140,7 +140,7 @@ public class ForumListFragment extends BaseEventFragment implements
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case R.id.action_create_forum:
@@ -154,7 +154,7 @@ public class ForumListFragment extends BaseEventFragment implements
 	}
 
 	private void loadForums() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		listener.runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -178,8 +178,7 @@ public class ForumListFragment extends BaseEventFragment implements
 		});
 	}
 
-	private void displayForums(final int revision,
-			final Collection<ForumListItem> forums) {
+	private void displayForums(int revision, Collection<ForumListItem> forums) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (revision == adapter.getRevision()) {
 				adapter.incrementRevision();
@@ -207,7 +206,7 @@ public class ForumListFragment extends BaseEventFragment implements
 		});
 	}
 
-	private void displayAvailableForums(final int availableCount) {
+	private void displayAvailableForums(int availableCount) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (availableCount == 0) {
 				snackbar.dismiss();
@@ -247,7 +246,7 @@ public class ForumListFragment extends BaseEventFragment implements
 		}
 	}
 
-	private void updateItem(final GroupId g, final ForumPostHeader m) {
+	private void updateItem(GroupId g, ForumPostHeader m) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			int position = adapter.findItemPosition(g);
@@ -259,7 +258,7 @@ public class ForumListFragment extends BaseEventFragment implements
 		});
 	}
 
-	private void removeForum(final GroupId g) {
+	private void removeForum(GroupId g) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			adapter.incrementRevision();
 			int position = adapter.findItemPosition(g);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
index c8857e1cac4c1103096fac4c2ad3733d399919b0..0fa3ee7b6d2fbbc7c113338df30c8e7303306868 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java
@@ -44,7 +44,7 @@ public abstract class BaseFragment extends Fragment
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case android.R.id.home:
 				listener.onBackPressed();
@@ -79,8 +79,8 @@ public abstract class BaseFragment extends Fragment
 
 	@CallSuper
 	@Override
-	public void runOnUiThreadUnlessDestroyed(final Runnable r) {
-		final Activity activity = getActivity();
+	public void runOnUiThreadUnlessDestroyed(Runnable r) {
+		Activity activity = getActivity();
 		if (activity != null) {
 			activity.runOnUiThread(() -> {
 				// Note that we don't have to check if the activity has
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
index 2fa90c0dd74ed95085cd54bde5b561288ba9042b..99ccd1f3bd9ad8fd7f469b844994cc93330da8c2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/ContactChooserFragment.java
@@ -134,7 +134,7 @@ public class ContactChooserFragment extends BaseFragment {
 		});
 	}
 
-	private void displayContacts(final List<ContactListItem> contacts) {
+	private void displayContacts(List<ContactListItem> contacts) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (contacts.isEmpty()) list.showData();
 			else adapter.addAll(contacts);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
index af90a665f29157d5ad5c36231be8f8b32f58fa60..52fcd30cba4a1916c1479c6873742257b8eda3c5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
@@ -118,8 +118,7 @@ public class IntroductionMessageFragment extends BaseFragment
 		return TAG;
 	}
 
-	private void prepareToSetUpViews(final int contactId1,
-			final int contactId2) {
+	private void prepareToSetUpViews(int contactId1, int contactId2) {
 		introductionActivity.runOnDbThread(() -> {
 			try {
 				Contact c1 = contactManager.getContact(
@@ -133,7 +132,7 @@ public class IntroductionMessageFragment extends BaseFragment
 		});
 	}
 
-	private void setUpViews(final Contact c1, final Contact c2) {
+	private void setUpViews(Contact c1, Contact c2) {
 		introductionActivity.runOnUiThreadUnlessDestroyed(() -> {
 			contact1 = c1;
 			contact2 = c2;
@@ -159,7 +158,7 @@ public class IntroductionMessageFragment extends BaseFragment
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case android.R.id.home:
 				introductionActivity.hideSoftKeyboard(ui.message);
@@ -185,8 +184,7 @@ public class IntroductionMessageFragment extends BaseFragment
 		introductionActivity.supportFinishAfterTransition();
 	}
 
-	private void makeIntroduction(final Contact c1, final Contact c2,
-			final String msg) {
+	private void makeIntroduction(Contact c1, Contact c2, String msg) {
 		introductionActivity.runOnDbThread(() -> {
 			// actually make the introduction
 			try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
index 5b17d52b2c77feed65fb94e881b3de08b7a9609b..b3d1b9345c6b7e21f15cc1860bdb791227d13527 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java
@@ -352,7 +352,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	}
 
 	@Override
-	public void surfaceCreated(final SurfaceHolder holder) {
+	public void surfaceCreated(SurfaceHolder holder) {
 		post(() -> {
 			try {
 				surfaceCreatedUi(holder);
@@ -375,8 +375,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	}
 
 	@Override
-	public void surfaceChanged(final SurfaceHolder holder, int format,
-			final int w, final int h) {
+	public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
 		post(() -> {
 			try {
 				surfaceChangedUi(holder, w, h);
@@ -411,7 +410,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	}
 
 	@Override
-	public void surfaceDestroyed(final SurfaceHolder holder) {
+	public void surfaceDestroyed(SurfaceHolder holder) {
 		post(() -> surfaceDestroyedUi(holder));
 	}
 
@@ -427,7 +426,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	}
 
 	@Override
-	public void onAutoFocus(boolean success, final Camera camera) {
+	public void onAutoFocus(boolean success, Camera camera) {
 		LOG.info("Auto focus succeeded: " + success);
 		postDelayed(this::retryAutoFocus, AUTO_FOCUS_RETRY_DELAY);
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
index a87c882614287ab16c50e95684ca02dfbf545a1e..e866662dca5e2d4ed38fe66c773e002b2d0f1551 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java
@@ -99,7 +99,7 @@ public class KeyAgreementActivity extends BriarActivity implements
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case android.R.id.home:
 				onBackPressed();
@@ -204,11 +204,11 @@ public class KeyAgreementActivity extends BriarActivity implements
 		}
 	}
 
-	private void keyAgreementFinished(final KeyAgreementResult result) {
+	private void keyAgreementFinished(KeyAgreementResult result) {
 		runOnUiThreadUnlessDestroyed(() -> startContactExchange(result));
 	}
 
-	private void startContactExchange(final KeyAgreementResult result) {
+	private void startContactExchange(KeyAgreementResult result) {
 		runOnDbThread(() -> {
 			LocalAuthor localAuthor;
 			// Load the local pseudonym
@@ -229,7 +229,7 @@ public class KeyAgreementActivity extends BriarActivity implements
 	}
 
 	@Override
-	public void contactExchangeSucceeded(final Author remoteAuthor) {
+	public void contactExchangeSucceeded(Author remoteAuthor) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			String contactName = remoteAuthor.getName();
 			String format = getString(string.contact_added_toast);
@@ -240,7 +240,7 @@ public class KeyAgreementActivity extends BriarActivity implements
 	}
 
 	@Override
-	public void duplicateContact(final Author remoteAuthor) {
+	public void duplicateContact(Author remoteAuthor) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			String contactName = remoteAuthor.getName();
 			String format = getString(string.contact_already_exists);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
index 43286f6fd5ae737daceeec0f21c4212b4a13aa75..a4099c298dd843a920c872559b462a63b58a8541 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeUtils.java
@@ -30,8 +30,8 @@ class QrCodeUtils {
 		int smallestDimen = Math.min(dm.widthPixels, dm.heightPixels);
 		try {
 			// Generate QR code
-			final BitMatrix encoded = new QRCodeWriter().encode(
-					input, QR_CODE, smallestDimen, smallestDimen);
+			BitMatrix encoded = new QRCodeWriter().encode(input, QR_CODE,
+					smallestDimen, smallestDimen);
 			// Convert QR code to Bitmap
 			int width = encoded.getWidth();
 			int height = encoded.getHeight();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
index 413ffb9452f4109660e764918f3367b94789a461..ae01d66c49b5b0f866fd56b91e9a0bd25009b79d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
@@ -157,8 +157,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 		getActivity().registerReceiver(receiver, filter);
 
 		// Enable BT adapter if it is not already on.
-		final BluetoothAdapter adapter =
-				BluetoothAdapter.getDefaultAdapter();
+		BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
 		if (adapter != null && !adapter.isEnabled()) {
 			waitingForBluetooth = true;
 			eventBus.broadcast(new EnableBluetoothEvent());
@@ -189,8 +188,8 @@ public class ShowQrCodeFragment extends BaseEventFragment
 
 	@UiThread
 	private void startListening() {
-		final KeyAgreementTask oldTask = task;
-		final KeyAgreementTask newTask = keyAgreementTaskFactory.createTask();
+		KeyAgreementTask oldTask = task;
+		KeyAgreementTask newTask = keyAgreementTaskFactory.createTask();
 		task = newTask;
 		ioExecutor.execute(() -> {
 			if (oldTask != null) oldTask.stopListening();
@@ -200,7 +199,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 
 	@UiThread
 	private void stopListening() {
-		final KeyAgreementTask oldTask = task;
+		KeyAgreementTask oldTask = task;
 		ioExecutor.execute(() -> {
 			if (oldTask != null) oldTask.stopListening();
 		});
@@ -257,11 +256,11 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	}
 
 	@UiThread
-	private void generateBitmapQR(final Payload payload) {
+	private void generateBitmapQR(Payload payload) {
 		// Get narrowest screen dimension
 		Context context = getContext();
 		if (context == null) return;
-		final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+		DisplayMetrics dm = context.getResources().getDisplayMetrics();
 		new AsyncTask<Void, Void, Bitmap>() {
 
 			@Override
@@ -286,7 +285,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 		}.execute();
 	}
 
-	private void setQrCode(final Payload localPayload) {
+	private void setQrCode(Payload localPayload) {
 		runOnUiThreadUnlessDestroyed(() -> generateBitmapQR(localPayload));
 	}
 
@@ -311,7 +310,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 		});
 	}
 
-	private void keyAgreementAborted(final boolean remoteAborted) {
+	private void keyAgreementAborted(boolean remoteAborted) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			reset();
 			mainProgressContainer.setVisibility(INVISIBLE);
@@ -325,7 +324,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	}
 
 	@Override
-	public void handleResult(final Result result) {
+	public void handleResult(Result result) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			LOG.info("Got result from decoder");
 			// Ignore results until the KeyAgreementTask is ready
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
index fe3710b011f4e8b5d3b262bcd54fc59694eedfd5..d2c2e54f50e1e4048faa8a184efd0ffd0e2c9dec 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordControllerImpl.java
@@ -47,9 +47,9 @@ public class PasswordControllerImpl extends ConfigControllerImpl
 	}
 
 	@Override
-	public void validatePassword(final String password,
-			final ResultHandler<Boolean> resultHandler) {
-		final byte[] encrypted = getEncryptedKey();
+	public void validatePassword(String password,
+			ResultHandler<Boolean> resultHandler) {
+		byte[] encrypted = getEncryptedKey();
 		cryptoExecutor.execute(() -> {
 			byte[] key = crypto.decryptWithPassword(encrypted, password);
 			if (key == null) {
@@ -62,9 +62,9 @@ public class PasswordControllerImpl extends ConfigControllerImpl
 	}
 
 	@Override
-	public void changePassword(final String password, final String newPassword,
-			final ResultHandler<Boolean> resultHandler) {
-		final byte[] encrypted = getEncryptedKey();
+	public void changePassword(String password, String newPassword,
+			ResultHandler<Boolean> resultHandler) {
+		byte[] encrypted = getEncryptedKey();
 		cryptoExecutor.execute(() -> {
 			byte[] key = crypto.decryptWithPassword(encrypted, password);
 			if (key == null) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
index 33c45d55524de7dd46416951f48910f6895a0215..e0ad7d8c9cb03e2c799b850cb01f3eb23071a3ff 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
@@ -2,7 +2,6 @@ package org.briarproject.briar.android.navdrawer;
 
 import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Bundle;
@@ -283,8 +282,7 @@ public class NavDrawerActivity extends BriarActivity implements
 		if (daysUntilExpiry < 0) signOut();
 
 		// show expiry warning text
-		final ViewGroup
-				expiryWarning = (ViewGroup) findViewById(R.id.expiryWarning);
+		ViewGroup expiryWarning = (ViewGroup) findViewById(R.id.expiryWarning);
 		TextView expiryWarningText =
 				(TextView) expiryWarning.findViewById(R.id.expiryWarningText);
 		// make close button functional
@@ -320,20 +318,16 @@ public class NavDrawerActivity extends BriarActivity implements
 		new AlertDialog.Builder(this, R.style.BriarDialogTheme)
 				.setMessage(R.string.setup_doze_intro)
 				.setPositiveButton(R.string.ok,
-						new DialogInterface.OnClickListener() {
-							@Override
-							public void onClick(DialogInterface dialog,
-									int which) {
-								Intent i = getDozeWhitelistingIntent(
-										NavDrawerActivity.this);
-								startActivityForResult(i,
-										REQUEST_DOZE_WHITELISTING);
-							}
+						(dialog, which) -> {
+							Intent i = getDozeWhitelistingIntent(
+									NavDrawerActivity.this);
+							startActivityForResult(i,
+									REQUEST_DOZE_WHITELISTING);
 						})
 				.show();
 	}
 
-	private void initializeTransports(final LayoutInflater inflater) {
+	private void initializeTransports(LayoutInflater inflater) {
 		transports = new ArrayList<>(3);
 
 		Transport tor = new Transport();
@@ -407,7 +401,7 @@ public class NavDrawerActivity extends BriarActivity implements
 		};
 	}
 
-	private void setTransport(final TransportId id, final boolean enabled) {
+	private void setTransport(TransportId id, boolean enabled) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (transports == null || transportsAdapter == null) return;
 			for (Transport t : transports) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java
index 79691695b30e5865ab31174f7259002dce509e2a..4b7c5a52ab5a88ad488ec219e408e968b29973a2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java
@@ -8,11 +8,11 @@ import org.briarproject.briar.android.controller.handler.ResultHandler;
 @NotNullByDefault
 public interface NavDrawerController extends ActivityLifecycleController {
 
-	enum ExpiryWarning { SHOW, NO, UPDATE };
+	enum ExpiryWarning { SHOW, NO, UPDATE }
 
 	boolean isTransportRunning(TransportId transportId);
 
-	void showExpiryWarning(final ResultHandler<ExpiryWarning> handler);
+	void showExpiryWarning(ResultHandler<ExpiryWarning> handler);
 
 	void expiryWarningDismissed();
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
index 0fc85bb1c8d3b1ec271676628ca2928f32fcdfe8..00a62705cf07933bf973e896bb454381702febe8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java
@@ -96,14 +96,13 @@ public class NavDrawerControllerImpl extends DbControllerImpl
 		}
 	}
 
-	private void transportStateUpdate(final TransportId id,
-			final boolean enabled) {
+	private void transportStateUpdate(TransportId id, boolean enabled) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.stateUpdate(id, enabled));
 	}
 
 	@Override
-	public void showExpiryWarning(final ResultHandler<ExpiryWarning> handler) {
+	public void showExpiryWarning(ResultHandler<ExpiryWarning> handler) {
 		runOnDbThread(() -> {
 			try {
 				Settings settings =
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
index 8c5e503b2a748ccc423faea74be10debd48fad2e..fd77da85dc2762a892bc6a4667ba9e8b6b1a6cb8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
@@ -110,7 +110,7 @@ public class GroupActivity extends
 	}
 
 	@Override
-	protected void onNamedGroupLoaded(final PrivateGroup group) {
+	protected void onNamedGroupLoaded(PrivateGroup group) {
 		setTitle(group.getName());
 		controller.loadLocalAuthor(
 				new UiResultExceptionHandler<LocalAuthor, DbException>(this) {
@@ -144,7 +144,7 @@ public class GroupActivity extends
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case R.id.action_group_member_list:
 				Intent i1 = new Intent(this, GroupMemberListActivity.class);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
index 3d31ee53512047e4337c985e0b57145bf4c97028..911a96da230b60f1743314d2c77ade74a6a36b5b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
@@ -83,13 +83,12 @@ class GroupControllerImpl extends
 			GroupMessageAddedEvent g = (GroupMessageAddedEvent) e;
 			if (!g.isLocal() && g.getGroupId().equals(getGroupId())) {
 				LOG.info("Group message received, adding...");
-				final GroupMessageItem item =
-						buildItem(g.getHeader(), g.getBody());
+				GroupMessageItem item = buildItem(g.getHeader(), g.getBody());
 				listener.runOnUiThreadUnlessDestroyed(
 						() -> listener.onItemReceived(item));
 			}
 		} else if (e instanceof ContactRelationshipRevealedEvent) {
-			final ContactRelationshipRevealedEvent c =
+			ContactRelationshipRevealedEvent c =
 					(ContactRelationshipRevealedEvent) e;
 			if (getGroupId().equals(c.getGroupId())) {
 				listener.runOnUiThreadUnlessDestroyed(() ->
@@ -99,7 +98,7 @@ class GroupControllerImpl extends
 		} else if (e instanceof GroupInvitationResponseReceivedEvent) {
 			GroupInvitationResponseReceivedEvent g =
 					(GroupInvitationResponseReceivedEvent) e;
-			final GroupInvitationResponse r =
+			GroupInvitationResponse r =
 					(GroupInvitationResponse) g.getResponse();
 			if (getGroupId().equals(r.getShareableId()) && r.wasAccepted()) {
 				listener.runOnUiThreadUnlessDestroyed(
@@ -141,7 +140,7 @@ class GroupControllerImpl extends
 
 	@Override
 	public void loadSharingContacts(
-			final ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
+			ResultExceptionHandler<Collection<ContactId>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Collection<GroupMember> members =
@@ -160,9 +159,9 @@ class GroupControllerImpl extends
 	}
 
 	@Override
-	public void createAndStoreMessage(final String body,
-			@Nullable final GroupMessageItem parentItem,
-			final ResultExceptionHandler<GroupMessageItem, DbException> handler) {
+	public void createAndStoreMessage(String body,
+			@Nullable GroupMessageItem parentItem,
+			ResultExceptionHandler<GroupMessageItem, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor author = identityManager.getLocalAuthor();
@@ -183,10 +182,10 @@ class GroupControllerImpl extends
 		});
 	}
 
-	private void createMessage(final String body, final long timestamp,
-			final @Nullable MessageId parentId, final LocalAuthor author,
-			final MessageId previousMsgId,
-			final ResultExceptionHandler<GroupMessageItem, DbException> handler) {
+	private void createMessage(String body, long timestamp,
+			@Nullable MessageId parentId, LocalAuthor author,
+			MessageId previousMsgId,
+			ResultExceptionHandler<GroupMessageItem, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			LOG.info("Creating group message...");
 			GroupMessage msg = groupMessageFactory
@@ -218,7 +217,7 @@ class GroupControllerImpl extends
 
 	@Override
 	public void loadLocalAuthor(
-			final ResultExceptionHandler<LocalAuthor, DbException> handler) {
+			ResultExceptionHandler<LocalAuthor, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor author = identityManager.getLocalAuthor();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
index f61f964038e701d1dc06e3154c7dd57fe2d71ac0..c14d46ed27d4535389cafdc8215c6c8f5903a6df 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/JoinMessageItemViewHolder.java
@@ -32,7 +32,7 @@ class JoinMessageItemViewHolder
 		else bind((JoinMessageItem) item);
 	}
 
-	private void bindForCreator(final JoinMessageItem item) {
+	private void bindForCreator(JoinMessageItem item) {
 		if (item.isInitial()) {
 			textView.setText(R.string.groups_member_created_you);
 		} else {
@@ -42,8 +42,8 @@ class JoinMessageItemViewHolder
 		}
 	}
 
-	private void bind(final JoinMessageItem item) {
-		final Context ctx = getContext();
+	private void bind(JoinMessageItem item) {
+		Context ctx = getContext();
 
 		if (item.isInitial()) {
 			textView.setText(ctx.getString(R.string.groups_member_created,
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
index b25fb0f963c6a2e54dc2261f5df4cab032a7c081..2c9f50531de25b7a28c3b66cf121efe0a250a0d2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
@@ -74,8 +74,8 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void createGroup(final String name,
-			final ResultExceptionHandler<GroupId, DbException> handler) {
+	public void createGroup(String name,
+			ResultExceptionHandler<GroupId, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor author = identityManager.getLocalAuthor();
@@ -87,9 +87,8 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		});
 	}
 
-	private void createGroupAndMessages(final LocalAuthor author,
-			final String name,
-			final ResultExceptionHandler<GroupId, DbException> handler) {
+	private void createGroupAndMessages(LocalAuthor author, String name,
+			ResultExceptionHandler<GroupId, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			LOG.info("Creating group...");
 			PrivateGroup group =
@@ -102,9 +101,8 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		});
 	}
 
-	private void storeGroup(final PrivateGroup group,
-			final GroupMessage joinMsg,
-			final ResultExceptionHandler<GroupId, DbException> handler) {
+	private void storeGroup(PrivateGroup group, GroupMessage joinMsg,
+			ResultExceptionHandler<GroupId, DbException> handler) {
 		runOnDbThread(() -> {
 			LOG.info("Adding group to database...");
 			try {
@@ -123,9 +121,8 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void sendInvitation(final GroupId g,
-			final Collection<ContactId> contactIds, final String message,
-			final ResultExceptionHandler<Void, DbException> handler) {
+	public void sendInvitation(GroupId g, Collection<ContactId> contactIds,
+			String message, ResultExceptionHandler<Void, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor localAuthor = identityManager.getLocalAuthor();
@@ -145,9 +142,9 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		});
 	}
 
-	private void signInvitations(final GroupId g, final LocalAuthor localAuthor,
-			final Collection<Contact> contacts, final String message,
-			final ResultExceptionHandler<Void, DbException> handler) {
+	private void signInvitations(GroupId g, LocalAuthor localAuthor,
+			Collection<Contact> contacts, String message,
+			ResultExceptionHandler<Void, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			long timestamp = clock.currentTimeMillis();
 			List<InvitationContext> contexts = new ArrayList<>();
@@ -161,9 +158,9 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 		});
 	}
 
-	private void sendInvitations(final GroupId g,
-			final Collection<InvitationContext> contexts, final String message,
-			final ResultExceptionHandler<Void, DbException> handler) {
+	private void sendInvitations(GroupId g,
+			Collection<InvitationContext> contexts, String message,
+			ResultExceptionHandler<Void, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				String msg = message.isEmpty() ? null : message;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
index a7aa2a4a871480425c52facb14d2b7d7f15bc1a5..3e8c5a9415385023dc07188a3e93a940ae7d0e59 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationControllerImpl.java
@@ -64,9 +64,8 @@ class GroupInvitationControllerImpl
 	}
 
 	@Override
-	public void respondToInvitation(final GroupInvitationItem item,
-			final boolean accept,
-			final ExceptionHandler<DbException> handler) {
+	public void respondToInvitation(GroupInvitationItem item, boolean accept,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				PrivateGroup g = item.getShareable();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java
index a270de3690ead6d1e5d36d5bf3b9e4c33aeec38f..fae57b85e4a3dc4aa069fcdc7f7b1699daa285e2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationViewHolder.java
@@ -17,8 +17,8 @@ class GroupInvitationViewHolder
 	}
 
 	@Override
-	public void onBind(@Nullable final GroupInvitationItem item,
-			final InvitationClickListener<GroupInvitationItem> listener) {
+	public void onBind(@Nullable GroupInvitationItem item,
+			InvitationClickListener<GroupInvitationItem> listener) {
 		super.onBind(item, listener);
 		if (item == null) return;
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
index 1e85778c812f87a0b5fb35b0894738e97ae3b39d..8824923fb10ca92f6d8fda44804cd0010e0798ba 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
@@ -119,7 +119,7 @@ class GroupListControllerImpl extends DbControllerImpl
 		}
 	}
 
-	private void onGroupMessageAdded(final GroupMessageHeader h) {
+	private void onGroupMessageAdded(GroupMessageHeader h) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onGroupMessageAdded(h));
 	}
@@ -129,22 +129,22 @@ class GroupListControllerImpl extends DbControllerImpl
 				() -> listener.onGroupInvitationReceived());
 	}
 
-	private void onGroupAdded(final GroupId g) {
+	private void onGroupAdded(GroupId g) {
 		listener.runOnUiThreadUnlessDestroyed(() -> listener.onGroupAdded(g));
 	}
 
-	private void onGroupRemoved(final GroupId g) {
+	private void onGroupRemoved(GroupId g) {
 		listener.runOnUiThreadUnlessDestroyed(() -> listener.onGroupRemoved(g));
 	}
 
-	private void onGroupDissolved(final GroupId g) {
+	private void onGroupDissolved(GroupId g) {
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onGroupDissolved(g));
 	}
 
 	@Override
 	public void loadGroups(
-			final ResultExceptionHandler<Collection<GroupItem>, DbException> handler) {
+			ResultExceptionHandler<Collection<GroupItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -173,8 +173,7 @@ class GroupListControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void removeGroup(final GroupId g,
-			final ExceptionHandler<DbException> handler) {
+	public void removeGroup(GroupId g, ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -191,7 +190,7 @@ class GroupListControllerImpl extends DbControllerImpl
 
 	@Override
 	public void loadAvailableGroups(
-			final ResultExceptionHandler<Integer, DbException> handler) {
+			ResultExceptionHandler<Integer, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				handler.onResult(
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
index 9fbed643c539cc9271ee8c7e0927054243704538..fbcce8cf5a9c8818fe4a93ee169e07a65741e269 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java
@@ -113,7 +113,7 @@ public class GroupListFragment extends BaseFragment implements
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case R.id.action_add_group:
 				Intent i = new Intent(getContext(), CreateGroupActivity.class);
@@ -184,7 +184,7 @@ public class GroupListFragment extends BaseFragment implements
 	}
 
 	private void loadGroups() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		controller.loadGroups(
 				new UiResultExceptionHandler<Collection<GroupItem>, DbException>(
 						this) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
index 3fa2d5ab4e9cb40b1a17ee09df42c0345775d241..15219e5859316ad6b2a74cfc659e91178cb4b266 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
@@ -50,8 +50,8 @@ class GroupViewHolder extends RecyclerView.ViewHolder {
 		remove = (Button) v.findViewById(R.id.removeButton);
 	}
 
-	void bindView(final Context ctx, final GroupItem group,
-			final OnGroupRemoveClickListener listener) {
+	void bindView(Context ctx, GroupItem group,
+			OnGroupRemoveClickListener listener) {
 		// Avatar
 		avatar.setText(group.getName().substring(0, 1));
 		avatar.setBackgroundBytes(group.getId().getBytes());
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
index de7776da6dc7b0d312b28f590c675849f32c59d5..e893ecf888db4a0dc48862c0e62ed22e9a9f4156 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java
@@ -38,7 +38,7 @@ public class GroupMemberListActivity extends BriarActivity {
 	}
 
 	@Override
-	public void onCreate(@Nullable final Bundle state) {
+	public void onCreate(@Nullable Bundle state) {
 		super.onCreate(state);
 
 		setContentView(R.layout.activity_sharing_status);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
index 0be3e5d072ac7c983a7fd9ef1bf88137b21a7571..5dcf6c5995d8338a5ee5fa36a88e0c3e3f835223 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListControllerImpl.java
@@ -40,7 +40,7 @@ class GroupMemberListControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void loadMembers(final GroupId groupId, final
+	public void loadMembers(GroupId groupId,
 			ResultExceptionHandler<Collection<MemberListItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
index 5c181f2104b6437c415f217201e557e00b3736c6..11b65fa437c1cd7f736d2729d9d40d2dd3c673f9 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/reveal/RevealContactsControllerImpl.java
@@ -59,9 +59,8 @@ class RevealContactsControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void loadContacts(final GroupId g,
-			final Collection<ContactId> selection,
-			final ResultExceptionHandler<Collection<RevealableContactItem>, DbException> handler) {
+	public void loadContacts(GroupId g, Collection<ContactId> selection,
+			ResultExceptionHandler<Collection<RevealableContactItem>, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				handler.onResult(getItems(g, selection));
@@ -98,7 +97,7 @@ class RevealContactsControllerImpl extends DbControllerImpl
 
 	@Override
 	public void isOnboardingNeeded(
-			final ResultExceptionHandler<Boolean, DbException> handler) {
+			ResultExceptionHandler<Boolean, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Settings settings =
@@ -129,8 +128,8 @@ class RevealContactsControllerImpl extends DbControllerImpl
 	}
 
 	@Override
-	public void reveal(final GroupId g, final Collection<ContactId> contacts,
-			final ExceptionHandler<DbException> handler) {
+	public void reveal(GroupId g, Collection<ContactId> contacts,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			for (ContactId c : contacts) {
 				try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
index dab9165611c103923feb859159adb421e84e64e3..2091e65b612d6936fe9c10875ed3581c0b3513de 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java
@@ -93,7 +93,7 @@ public class DevReportActivity extends BaseCrashReportDialog
 		Toolbar tb = (Toolbar) findViewById(R.id.toolbar);
 		getDelegate().setSupportActionBar(tb);
 
-		final View requestReport = findViewById(R.id.request_report);
+		View requestReport = findViewById(R.id.request_report);
 		userCommentView = (EditText) findViewById(R.id.user_comment);
 		userEmailView = (EditText) findViewById(R.id.user_email);
 		includeDebugReport = (CheckBox) findViewById(R.id.include_debug_report);
@@ -170,7 +170,7 @@ public class DevReportActivity extends BaseCrashReportDialog
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case android.R.id.home:
@@ -243,8 +243,7 @@ public class DevReportActivity extends BaseCrashReportDialog
 			protected CrashReportData doInBackground(Void... args) {
 				File reportFile = (File) getIntent().getSerializableExtra(
 						EXTRA_REPORT_FILE);
-				final CrashReportPersister persister =
-						new CrashReportPersister();
+				CrashReportPersister persister = new CrashReportPersister();
 				try {
 					return persister.load(reportFile);
 				} catch (IOException e) {
@@ -293,8 +292,7 @@ public class DevReportActivity extends BaseCrashReportDialog
 		userEmailView.setEnabled(false);
 		sendReport.setEnabled(false);
 		progress.setVisibility(VISIBLE);
-		final boolean includeReport =
-				!isFeedback() || includeDebugReport.isChecked();
+		boolean includeReport = !isFeedback() || includeDebugReport.isChecked();
 		new AsyncTask<Void, Void, Boolean>() {
 
 			@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
index baa0771e7fceba308a2b0a79e3673b1a5454645e..4c0b80840aa51ee1b54427af08441b4d8f316770 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
@@ -215,8 +215,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		});
 	}
 
-	private void displaySettings(final boolean btSetting,
-			final int torSetting) {
+	private void displaySettings(boolean btSetting, int torSetting) {
 		listener.runOnUiThreadUnlessDestroyed(() -> {
 			enableBluetooth.setValue(Boolean.toString(btSetting));
 			torNetwork.setValue(Integer.toString(torSetting));
@@ -301,7 +300,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		else eventBus.broadcast(new DisableBluetoothEvent());
 	}
 
-	private void storeTorSettings(final int torSetting) {
+	private void storeTorSettings(int torSetting) {
 		listener.runOnDbThread(() -> {
 			try {
 				Settings s = new Settings();
@@ -317,7 +316,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		});
 	}
 
-	private void storeBluetoothSettings(final boolean btSetting) {
+	private void storeBluetoothSettings(boolean btSetting) {
 		listener.runOnDbThread(() -> {
 			try {
 				Settings s = new Settings();
@@ -333,7 +332,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		});
 	}
 
-	private void storeSettings(final Settings settings) {
+	private void storeSettings(Settings settings) {
 		listener.runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
index 67532a44a0ba2f854be1add6a49bd937e8c4b25a..026498b12facc43a1aa3e4612972e2db09ff41ee 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
@@ -64,7 +64,7 @@ public abstract class BaseMessageFragment extends BaseFragment
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
 			case android.R.id.home:
 				if (message.isKeyboardOpen()) message.hideSoftKeyboard();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
index 609c5a0b03ea7815f717506b1410a92a094389d1..6cacc3c343ce489368a1a50cb447e97a7cde7d81 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogInvitationControllerImpl.java
@@ -58,9 +58,8 @@ class BlogInvitationControllerImpl
 	}
 
 	@Override
-	public void respondToInvitation(final SharingInvitationItem item,
-			final boolean accept,
-			final ExceptionHandler<DbException> handler) {
+	public void respondToInvitation(SharingInvitationItem item, boolean accept,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Blog f = (Blog) item.getShareable();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
index f6ce57adcb66147db2eb60453330efa11b422f11..4ae8a08a113bd70d6f5058d469d6917eabc73771 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumInvitationControllerImpl.java
@@ -59,9 +59,8 @@ class ForumInvitationControllerImpl
 	}
 
 	@Override
-	public void respondToInvitation(final SharingInvitationItem item,
-			final boolean accept,
-			final ExceptionHandler<DbException> handler) {
+	public void respondToInvitation(SharingInvitationItem item, boolean accept,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				Forum f = (Forum) item.getShareable();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
index dda2dee6b8fcd49480e1e35cbf58e979cf4114f2..bc755d43a32f383adb3f76968cf88bfea428ea2f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationActivity.java
@@ -85,8 +85,8 @@ public abstract class InvitationActivity<I extends InvitationItem>
 	}
 
 	@Override
-	public void loadInvitations(final boolean clear) {
-		final int revision = adapter.getRevision();
+	public void loadInvitations(boolean clear) {
+		int revision = adapter.getRevision();
 		getController().loadInvitations(clear,
 				new UiResultExceptionHandler<Collection<I>, DbException>(
 						this) {
@@ -104,8 +104,7 @@ public abstract class InvitationActivity<I extends InvitationItem>
 
 	abstract protected InvitationController<I> getController();
 
-	protected void respondToInvitation(final I item,
-			final boolean accept) {
+	protected void respondToInvitation(I item, boolean accept) {
 		getController().respondToInvitation(item, accept,
 				new UiExceptionHandler<DbException>(this) {
 					@Override
@@ -121,8 +120,8 @@ public abstract class InvitationActivity<I extends InvitationItem>
 	@StringRes
 	abstract protected int getDeclineRes();
 
-	protected void displayInvitations(final int revision,
-			final Collection<I> invitations, final boolean clear) {
+	protected void displayInvitations(int revision, Collection<I> invitations,
+			boolean clear) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (invitations.isEmpty()) {
 				LOG.info("No more invitations available, finishing");
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
index 1b3a4fecc64e066e6398469dfc6b95deebdc8228..5db6a1f0ce14c399140ed0fac0945b27e4c31f08 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java
@@ -27,7 +27,7 @@ public abstract class InvitationAdapter<I extends InvitationItem, VH extends Inv
 
 	@Override
 	public void onBindViewHolder(VH ui, int position) {
-		final I item = getItemAt(position);
+		I item = getItemAt(position);
 		if (item == null) return;
 		ui.onBind(item, listener);
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
index b0e7f99787f997a6095ab9ae76c1e94e15eb4e13..ad584b03dab5172ab0623ec97d44b3b3217ff720 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationControllerImpl.java
@@ -91,8 +91,8 @@ public abstract class InvitationControllerImpl<I extends InvitationItem>
 	protected abstract ClientId getShareableClientId();
 
 	@Override
-	public void loadInvitations(final boolean clear,
-			final ResultExceptionHandler<Collection<I>, DbException> handler) {
+	public void loadInvitations(boolean clear,
+			ResultExceptionHandler<Collection<I>, DbException> handler) {
 		runOnDbThread(() -> {
 			Collection<I> invitations = new ArrayList<>();
 			try {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
index 00262f0dbfc30d3628f4d1198dec8c8ac24d0a4c..ef21497ce1c56832185c44791f5f21c18948ec3d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationViewHolder.java
@@ -38,8 +38,7 @@ public class InvitationViewHolder<I extends InvitationItem>
 	}
 
 	@CallSuper
-	public void onBind(@Nullable final I item,
-			final InvitationClickListener<I> listener) {
+	public void onBind(@Nullable I item, InvitationClickListener<I> listener) {
 		if (item == null) return;
 
 		avatar.setText(item.getShareable().getName().substring(0, 1));
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
index 1bd0d8f3b8ecdea3070581915caea3437d093ea2..40bd81d9315bc84bbe2b8ae6e9f9fb9b6512ef0f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
@@ -55,9 +55,8 @@ class ShareBlogControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void share(final GroupId g, final Collection<ContactId> contacts,
-			final String message,
-			final ExceptionHandler<DbException> handler) {
+	public void share(GroupId g, Collection<ContactId> contacts, String message,
+			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				String msg = isNullOrEmpty(message) ? null : message;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
index e8fb5a4be75b41ca500173245849594174516c34..7dd7bdf76c20f1e9d86eed59e7ca9f6c989c2328 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
@@ -55,9 +55,8 @@ class ShareForumControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void share(final GroupId g, final Collection<ContactId> contacts,
-			final String message,
-			final ExceptionHandler<DbException> handler) {
+	public void share(GroupId g, Collection<ContactId> contacts,
+			String message, ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				String msg = isNullOrEmpty(message) ? null : message;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
index 28c03f473ea4ab894d2bb68ce2c6d4d463f1d7bc..6d4eae929244fafcb5e8662d9ecd6a0d5d1d36e8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingInvitationViewHolder.java
@@ -5,6 +5,7 @@ import android.view.View;
 import org.briarproject.bramble.api.contact.Contact;
 import org.briarproject.bramble.util.StringUtils;
 import org.briarproject.briar.R;
+import org.briarproject.briar.android.sharing.InvitationAdapter.InvitationClickListener;
 import org.briarproject.briar.api.sharing.SharingInvitationItem;
 
 import java.util.ArrayList;
@@ -20,8 +21,8 @@ class SharingInvitationViewHolder
 	}
 
 	@Override
-	public void onBind(@Nullable final SharingInvitationItem item,
-			final InvitationAdapter.InvitationClickListener<SharingInvitationItem> listener) {
+	public void onBind(@Nullable SharingInvitationItem item,
+			InvitationClickListener<SharingInvitationItem> listener) {
 		super.onBind(item, listener);
 		if (item == null) return;
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
index 1b62d59220264ad0d794afa29822c45c10476fee..efe97420574cf88f27ca2359e53a28202b183a96 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java
@@ -78,7 +78,7 @@ abstract class SharingStatusActivity extends BriarActivity {
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(final MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) {
 		// Handle presses on the action bar items
 		switch (item.getItemId()) {
 			case android.R.id.home:
@@ -115,7 +115,7 @@ abstract class SharingStatusActivity extends BriarActivity {
 		});
 	}
 
-	private void displaySharedWith(final List<ContactItem> contacts) {
+	private void displaySharedWith(List<ContactItem> contacts) {
 		runOnUiThreadUnlessDestroyed(() -> {
 			if (contacts.isEmpty()) list.showData();
 			else adapter.addAll(contacts);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
index 6f99a54cdfc85842ae0d0b14a1d1e5bf4da93fe0..aac9621a2dd2e17ab23f540c5c46f94694c40bed 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/BaseThreadItemViewHolder.java
@@ -40,7 +40,7 @@ public abstract class BaseThreadItemViewHolder<I extends ThreadItem>
 	}
 
 	@CallSuper
-	public void bind(final I item, final ThreadItemListener<I> listener) {
+	public void bind(I item, ThreadItemListener<I> listener) {
 		textView.setText(StringUtils.trim(item.getText()));
 
 		author.setAuthor(item.getAuthor());
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
index 49140f571cd0bd66aca37749d293b73f07e32490..4cf1f630a25308d0fead31832031847bf352cee3 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java
@@ -140,8 +140,8 @@ public class ThreadItemAdapter<I extends ThreadItem>
 	 *            because then the view port is unknown.
 	 */
 	public UnreadCount getUnreadCount() {
-		final int positionTop = layoutManager.findFirstVisibleItemPosition();
-		final int positionBottom = layoutManager.findLastVisibleItemPosition();
+		int positionTop = layoutManager.findFirstVisibleItemPosition();
+		int positionBottom = layoutManager.findLastVisibleItemPosition();
 		if (positionTop == NO_POSITION && positionBottom == NO_POSITION)
 			return new UnreadCount(0, 0);
 
@@ -161,7 +161,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
 	 * Returns the position of the first unread item below the current viewport
 	 */
 	int getVisibleUnreadPosBottom() {
-		final int positionBottom = layoutManager.findLastVisibleItemPosition();
+		int positionBottom = layoutManager.findLastVisibleItemPosition();
 		if (positionBottom == NO_POSITION) return NO_POSITION;
 		for (int i = positionBottom + 1; i < items.size(); i++) {
 			if (!items.get(i).isRead()) return i;
@@ -173,7 +173,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
 	 * Returns the position of the first unread item above the current viewport
 	 */
 	int getVisibleUnreadPosTop() {
-		final int positionTop = layoutManager.findFirstVisibleItemPosition();
+		int positionTop = layoutManager.findFirstVisibleItemPosition();
 		int position = NO_POSITION;
 		for (int i = 0; i < items.size(); i++) {
 			if (i < positionTop && !items.get(i).isRead()) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
index 525f26fc2d20d58ed234b3a1f4240dc08365d138..2e5d62ac5867ac1e68bcfaf1c45451fe5480220b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
@@ -171,7 +171,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 	protected abstract void onNamedGroupLoaded(G groupItem);
 
 	protected void loadItems() {
-		final int revision = adapter.getRevision();
+		int revision = adapter.getRevision();
 		getController().loadItems(
 				new UiResultExceptionHandler<ThreadItemList<I>, DbException>(
 						this) {
@@ -198,7 +198,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 				});
 	}
 
-	private void displayItems(final ThreadItemList<I> items) {
+	private void displayItems(ThreadItemList<I> items) {
 		adapter.setItems(items);
 		MessageId messageId = items.getFirstVisibleItemId();
 		if (messageId != null)
@@ -281,7 +281,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 	}
 
 	@Override
-	public void onReplyClick(final I item) {
+	public void onReplyClick(I item) {
 		replyId = item.getId();
 		updateTextInput();
 		if (textInput.isKeyboardOpen()) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
index d58a536284cf567bca443619ac8a1be22347fec6..11929640ed5008a11431051ca25584536221bd6b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
@@ -99,7 +99,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 
 	@Override
 	public void onActivityDestroy() {
-		final MessageId messageId = listener.getFirstVisibleMessageId();
+		MessageId messageId = listener.getFirstVisibleMessageId();
 		if (messageId != null) {
 			dbExecutor.execute(() -> {
 				try {
@@ -127,7 +127,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 
 	@Override
 	public void loadNamedGroup(
-			final ResultExceptionHandler<G, DbException> handler) {
+			ResultExceptionHandler<G, DbException> handler) {
 		checkGroupId();
 		runOnDbThread(() -> {
 			try {
@@ -150,7 +150,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 
 	@Override
 	public void loadItems(
-			final ResultExceptionHandler<ThreadItemList<I>, DbException> handler) {
+			ResultExceptionHandler<ThreadItemList<I>, DbException> handler) {
 		checkGroupId();
 		runOnDbThread(() -> {
 			try {
@@ -194,7 +194,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 	}
 
 	@Override
-	public void markItemsRead(final Collection<I> items) {
+	public void markItemsRead(Collection<I> items) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -213,8 +213,8 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 	@DatabaseExecutor
 	protected abstract void markRead(MessageId id) throws DbException;
 
-	protected void storePost(final M msg, final String body,
-			final ResultExceptionHandler<I, DbException> resultHandler) {
+	protected void storePost(M msg, String body,
+			ResultExceptionHandler<I, DbException> resultHandler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
@@ -235,7 +235,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 	protected abstract H addLocalMessage(M message) throws DbException;
 
 	@Override
-	public void deleteNamedGroup(final ExceptionHandler<DbException> handler) {
+	public void deleteNamedGroup(ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				long now = System.currentTimeMillis();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
index 08a2dcb8aeb75532c3ef397b7a759f615e239e73..dbab681c588445f6953b63a6a34a0687c29e2a3c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadPostViewHolder.java
@@ -37,7 +37,7 @@ public class ThreadPostViewHolder<I extends ThreadItem>
 	}
 
 	@Override
-	public void bind(final I item, final ThreadItemListener<I> listener) {
+	public void bind(I item, ThreadItemListener<I> listener) {
 		super.bind(item, listener);
 
 		for (int i = 0; i < lvls.length; i++) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
index b94420a95926d5f5028a1fe1a32aaa7cf38e2b44..04172d7b021fb0dca767f7fe1d086520ccf32684 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
@@ -115,7 +115,7 @@ public class UiUtils {
 		for (URLSpan span : spans) {
 			int start = ssb.getSpanStart(span);
 			int end = ssb.getSpanEnd(span);
-			final String url = span.getURL();
+			String url = span.getURL();
 			ssb.removeSpan(span);
 			ClickableSpan cSpan = new ClickableSpan() {
 				@Override
@@ -140,8 +140,7 @@ public class UiUtils {
 		return "bulb" + c.getInt();
 	}
 
-	public static OnClickListener getGoToSettingsListener(
-			final Context context) {
+	public static OnClickListener getGoToSettingsListener(Context context) {
 		return (dialog, which) -> {
 			Intent i = new Intent();
 			i.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
index 7f3cec52643aa430eb822c32491b9db901be1128..075daecfc857fd32b9d096d66473f9291b1931f1 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/widget/LinkDialogFragment.java
@@ -57,7 +57,7 @@ public class LinkDialogFragment extends DialogFragment {
 		List activities = packageManager.queryIntentActivities(i,
 				PackageManager.MATCH_DEFAULT_ONLY);
 		boolean choice = activities.size() > 1;
-		final Intent intent = choice ? Intent.createChooser(i,
+		Intent intent = choice ? Intent.createChooser(i,
 				getString(R.string.link_warning_open_link)) : i;
 
 		Button openButton = (Button) v.findViewById(R.id.openButton);
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
index c3e6050c59d59f364364d56efeb8c329c79cfe9f..213bf2a6ea5413f73a4552a60b6126ce74d51466 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
@@ -65,7 +65,7 @@ public class KeyboardAwareLinearLayout extends LinearLayout {
 			@Nullable AttributeSet attrs, int defStyle) {
 		super(context, attrs, defStyle);
 		rotation = getDeviceRotation();
-		final int statusBarRes = getResources()
+		int statusBarRes = getResources()
 				.getIdentifier("status_bar_height", "dimen", "android");
 		minKeyboardSize =
 				getResources().getDimensionPixelSize(R.dimen.min_keyboard_size);
@@ -199,7 +199,7 @@ public class KeyboardAwareLinearLayout extends LinearLayout {
 		prefs.edit().putInt("keyboard_height_portrait", height).apply();
 	}
 
-	public void postOnKeyboardClose(final Runnable runnable) {
+	public void postOnKeyboardClose(Runnable runnable) {
 		if (keyboardOpen) {
 			addOnKeyboardHiddenListener(new OnKeyboardHiddenListener() {
 				@Override
@@ -213,7 +213,7 @@ public class KeyboardAwareLinearLayout extends LinearLayout {
 		}
 	}
 
-	public void postOnKeyboardOpen(final Runnable runnable) {
+	public void postOnKeyboardOpen(Runnable runnable) {
 		if (!keyboardOpen) {
 			addOnKeyboardShownListener(new OnKeyboardShownListener() {
 				@Override
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
index 8061b80819e0f3c0fdec76d3b154ebe58a7ae6ec..43a1340e78889ef09fd2dac50e01e1b00c410538 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
@@ -56,7 +56,7 @@ public class EmojiDrawer extends LinearLayout {
 	}
 
 	private void initView() {
-		final View v = LayoutInflater.from(getContext())
+		View v = LayoutInflater.from(getContext())
 				.inflate(R.layout.emoji_drawer, this, true);
 		initializeResources(v);
 		initializePageModels();
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
index 980e29cda61860a46676fcc175922638466b28fe..6e325a9ad3774709d66ebc36b672be3297869289 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
@@ -33,8 +33,8 @@ public class EmojiEditText extends AppCompatEditText {
 	}
 
 	public void insertEmoji(String emoji) {
-		final int start = getSelectionStart();
-		final int end = getSelectionEnd();
+		int start = getSelectionStart();
+		int end = getSelectionEnd();
 
 		getText().replace(Math.min(start, end), Math.max(start, end), emoji);
 		setSelection(start + emoji.length());
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
index 12c9e74b31182bc709920f49d07c5c66d62143a2..4b186e634f056e38ebf864c356d4992db0fe8b45 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
@@ -33,7 +33,7 @@ public class EmojiPageView extends FrameLayout {
 	public EmojiPageView(Context context, @Nullable AttributeSet attrs,
 			int defStyleAttr) {
 		super(context, attrs, defStyleAttr);
-		final View view = LayoutInflater.from(getContext())
+		View view = LayoutInflater.from(getContext())
 				.inflate(R.layout.emoji_grid_layout, this, true);
 		grid = (GridView) view.findViewById(R.id.emoji);
 		grid.setColumnWidth(getResources()
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
index f6dfa241d4bee57e6b4701a15d6dfd807614eeaf..9b6068565bb4ef3da6da72740b849e8db0e74182 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
@@ -135,10 +135,10 @@ public class EmojiProvider {
 			return null;
 		}
 
-		final EmojiDrawable drawable = new EmojiDrawable(drawInfo, decodeScale);
+		EmojiDrawable drawable = new EmojiDrawable(drawInfo, decodeScale);
 		drawInfo.page.get().addListener(new FutureTaskListener<Bitmap>() {
 			@Override
-			public void onSuccess(final Bitmap result) {
+			public void onSuccess(Bitmap result) {
 				androidExecutor.runOnUiThread(() -> drawable.setBitmap(result));
 			}
 
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
index d409204ab0b3e8b317f98817040eded91a99024c..56d72e3a813e9961b2bea7efe70b100196aa7128 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java
@@ -109,7 +109,7 @@ public class RecentEmojiPageModel implements EmojiPageModel {
 		return result;
 	}
 
-	private void save(final String serialized) {
+	private void save(String serialized) {
 		dbExecutor.execute(() -> {
 			Settings settings = new Settings();
 			settings.put(EMOJI_LRU_PREFERENCE, serialized);
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
index f7fd464448099839da12a14c0acfaf8342474add..3d8303f07d7762f4fcb4bcbed61b0406e50cfb72 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/util/ListenableFutureTask.java
@@ -41,11 +41,11 @@ public class ListenableFutureTask<V> extends FutureTask<V> {
 		this.identifier = identifier;
 	}
 
-	public ListenableFutureTask(final V result) {
+	public ListenableFutureTask(V result) {
 		this(result, null);
 	}
 
-	private ListenableFutureTask(final V result, @Nullable Object identifier) {
+	private ListenableFutureTask(V result, @Nullable Object identifier) {
 		super(() -> result);
 		this.identifier = identifier;
 		this.run();
diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java b/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
index 0bc0ed00f95d93721f923863bc475303fb086f01..204bedaa4b6988538aade23621986b053440bd87 100644
--- a/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
+++ b/briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
@@ -40,14 +40,14 @@ public class BitmapUtil {
 	private static <T> Bitmap createScaledBitmapInto(Context context, T model,
 			int width, int height)
 			throws BitmapDecodingException {
-		final Bitmap rough = Downsampler.AT_LEAST
+		Bitmap rough = Downsampler.AT_LEAST
 				.decode(getInputStreamForModel(context, model),
 						Glide.get(context).getBitmapPool(),
 						width, height, DecodeFormat.PREFER_RGB_565);
 
-		final Resource<Bitmap> resource = BitmapResource
+		Resource<Bitmap> resource = BitmapResource
 				.obtain(rough, Glide.get(context).getBitmapPool());
-		final Resource<Bitmap> result =
+		Resource<Bitmap> result =
 				new FitCenter(context).transform(resource, width, height);
 
 		if (result == null) {
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
index 2b707d9f182e81f98cc3f01115c054479fc0f3ff..a9b8660813a247413c3e8f8a6e9b2186cb428382 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
@@ -25,21 +25,19 @@ public interface IntroductionManager extends ConversationClient {
 	 * Sends two initial introduction messages.
 	 */
 	void makeIntroduction(Contact c1, Contact c2, @Nullable String msg,
-			final long timestamp) throws DbException, FormatException;
+			long timestamp) throws DbException, FormatException;
 
 	/**
 	 * Accepts an introduction.
 	 */
-	void acceptIntroduction(final ContactId contactId,
-			final SessionId sessionId, final long timestamp)
-			throws DbException, FormatException;
+	void acceptIntroduction(ContactId contactId, SessionId sessionId,
+			long timestamp) throws DbException, FormatException;
 
 	/**
 	 * Declines an introduction.
 	 */
-	void declineIntroduction(final ContactId contactId,
-			final SessionId sessionId, final long timestamp)
-			throws DbException, FormatException;
+	void declineIntroduction(ContactId contactId, SessionId sessionId,
+			long timestamp) throws DbException, FormatException;
 
 	/**
 	 * Returns all introduction messages for the given contact.
diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
index 19f78a6b514cfc513a47db3d25bdc5b6a05894ef..23a7c24bf5402647f63b4a53cfccaa5019d8c7b2 100644
--- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
@@ -127,9 +127,8 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 	}
 
 	@Override
-	public ForumPost createLocalPost(final GroupId groupId, final String body,
-			final long timestamp, final @Nullable MessageId parentId,
-			final LocalAuthor author) {
+	public ForumPost createLocalPost(GroupId groupId, String body,
+			long timestamp, @Nullable MessageId parentId, LocalAuthor author) {
 		ForumPost p;
 		try {
 			p = forumPostFactory.createPost(groupId, timestamp, parentId,
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
index f2d30f80ed745730d396671511fa0e6a18650928..053c0760581769477c57cc5c107192a16a9142e2 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
@@ -272,7 +272,7 @@ class IntroductionManagerImpl extends ConversationClientImpl
 
 	@Override
 	public void makeIntroduction(Contact c1, Contact c2, @Nullable String msg,
-			final long timestamp) throws DbException, FormatException {
+			long timestamp) throws DbException, FormatException {
 
 		Transaction txn = db.startTransaction(false);
 		try {
@@ -288,9 +288,8 @@ class IntroductionManagerImpl extends ConversationClientImpl
 	}
 
 	@Override
-	public void acceptIntroduction(final ContactId contactId,
-			final SessionId sessionId, final long timestamp)
-			throws DbException, FormatException {
+	public void acceptIntroduction(ContactId contactId, SessionId sessionId,
+			long timestamp) throws DbException, FormatException {
 
 		Transaction txn = db.startTransaction(false);
 		try {
@@ -308,9 +307,8 @@ class IntroductionManagerImpl extends ConversationClientImpl
 	}
 
 	@Override
-	public void declineIntroduction(final ContactId contactId,
-			final SessionId sessionId, final long timestamp)
-			throws DbException, FormatException {
+	public void declineIntroduction(ContactId contactId, SessionId sessionId,
+			long timestamp) throws DbException, FormatException {
 
 		Transaction txn = db.startTransaction(false);
 		try {
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
index f34f37a8eca8878b56a6df7daa1f288fd1713193..49a50a219fb752fa1f347a14f9856ac969e19cc3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
@@ -111,7 +111,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testCreateLocalState() throws DbException {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(identityManager).getLocalAuthor(txn);
@@ -127,9 +127,9 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testRemovingContact() throws DbException {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
-		final ContactId contactId = new ContactId(0);
+		ContactId contactId = new ContactId(0);
 		Contact contact = new Contact(contactId, blog2.getAuthor(),
 				blog1.getAuthor().getId(), true, true);
 
@@ -149,9 +149,9 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testRemovingContactAfterRemovingBlog() throws DbException {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
-		final ContactId contactId = new ContactId(0);
+		ContactId contactId = new ContactId(0);
 		Contact contact = new Contact(contactId, blog2.getAuthor(),
 				blog1.getAuthor().getId(), true, true);
 
@@ -168,7 +168,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testIncomingMessage() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		BdfList body = BdfList.of("body");
 		BdfDictionary meta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, POST.getInt()),
@@ -207,7 +207,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testIncomingRssMessage() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		BdfList body = BdfList.of("body");
 		BdfDictionary meta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, POST.getInt()),
@@ -241,7 +241,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testRemoveBlog() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -259,9 +259,9 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalPost() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
-		final BlogPost post = new BlogPost(message, null, localAuthor1);
-		final BdfDictionary meta = BdfDictionary.of(
+		Transaction txn = new Transaction(null, false);
+		BlogPost post = new BlogPost(message, null, localAuthor1);
+		BdfDictionary meta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, POST.getInt()),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_AUTHOR, authorDict1),
@@ -305,9 +305,9 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalRssPost() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
-		final BlogPost post = new BlogPost(rssMessage, null, rssLocalAuthor);
-		final BdfDictionary meta = BdfDictionary.of(
+		Transaction txn = new Transaction(null, false);
+		BlogPost post = new BlogPost(rssMessage, null, rssLocalAuthor);
+		BdfDictionary meta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, POST.getInt()),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_AUTHOR, rssAuthorDict),
@@ -350,10 +350,10 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalCommentToLocalPost() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		// The post was originally posted to blog 1, then reblogged to the
 		// same blog (commenting on own post)
-		final BdfDictionary postMeta = BdfDictionary.of(
+		BdfDictionary postMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, POST.getInt()),
 				new BdfEntry(KEY_RSS_FEED, false),
 				new BdfEntry(KEY_ORIGINAL_MSG_ID, messageId),
@@ -361,10 +361,10 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		final MessageId commentId = new MessageId(getRandomId());
-		final Message commentMsg = new Message(commentId, blog1.getId(),
+		MessageId commentId = new MessageId(getRandomId());
+		Message commentMsg = new Message(commentId, blog1.getId(),
 				timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary commentMeta = BdfDictionary.of(
+		BdfDictionary commentMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, COMMENT.getInt()),
 				new BdfEntry(KEY_COMMENT, comment),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
@@ -436,14 +436,14 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalCommentToRemotePost() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		// The post was originally posted to blog 1, then reblogged to
 		// blog 2 with a comment
-		final BdfList originalPostBody = BdfList.of("originalPostBody");
-		final MessageId wrappedPostId = new MessageId(getRandomId());
-		final Message wrappedPostMsg = new Message(wrappedPostId, blog2.getId(),
+		BdfList originalPostBody = BdfList.of("originalPostBody");
+		MessageId wrappedPostId = new MessageId(getRandomId());
+		Message wrappedPostMsg = new Message(wrappedPostId, blog2.getId(),
 				timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary wrappedPostMeta = BdfDictionary.of(
+		BdfDictionary wrappedPostMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, WRAPPED_POST.getInt()),
 				new BdfEntry(KEY_RSS_FEED, false),
 				new BdfEntry(KEY_ORIGINAL_MSG_ID, messageId),
@@ -451,10 +451,10 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		final MessageId commentId = new MessageId(getRandomId());
-		final Message commentMsg = new Message(commentId, blog2.getId(),
+		MessageId commentId = new MessageId(getRandomId());
+		Message commentMsg = new Message(commentId, blog2.getId(),
 				timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary commentMeta = BdfDictionary.of(
+		BdfDictionary commentMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, COMMENT.getInt()),
 				new BdfEntry(KEY_COMMENT, comment),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
@@ -539,14 +539,14 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalCommentToRemoteRssPost() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		// The post was originally posted to the RSS blog, then reblogged to
 		// blog 1 with a comment
-		final BdfList originalPostBody = BdfList.of("originalPostBody");
-		final MessageId wrappedPostId = new MessageId(getRandomId());
-		final Message wrappedPostMsg = new Message(wrappedPostId, blog1.getId(),
+		BdfList originalPostBody = BdfList.of("originalPostBody");
+		MessageId wrappedPostId = new MessageId(getRandomId());
+		Message wrappedPostMsg = new Message(wrappedPostId, blog1.getId(),
 				timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary wrappedPostMeta = BdfDictionary.of(
+		BdfDictionary wrappedPostMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, WRAPPED_POST.getInt()),
 				new BdfEntry(KEY_RSS_FEED, true),
 				new BdfEntry(KEY_ORIGINAL_MSG_ID, rssMessageId),
@@ -554,10 +554,10 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		final MessageId commentId = new MessageId(getRandomId());
-		final Message commentMsg = new Message(commentId, blog1.getId(),
+		MessageId commentId = new MessageId(getRandomId());
+		Message commentMsg = new Message(commentId, blog1.getId(),
 				timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary commentMeta = BdfDictionary.of(
+		BdfDictionary commentMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, COMMENT.getInt()),
 				new BdfEntry(KEY_COMMENT, comment),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
@@ -640,18 +640,18 @@ public class BlogManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAddLocalCommentToRebloggedRemoteRssPost() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		// The post was originally posted to the RSS blog, then reblogged to
 		// blog 1 with a comment
-		final MessageId wrappedPostId = new MessageId(getRandomId());
-		final BdfList wrappedPostBody = BdfList.of("wrappedPostBody");
-		final MessageId originalCommentId = new MessageId(getRandomId());
-		final BdfList originalCommentBody = BdfList.of("originalCommentBody");
+		MessageId wrappedPostId = new MessageId(getRandomId());
+		BdfList wrappedPostBody = BdfList.of("wrappedPostBody");
+		MessageId originalCommentId = new MessageId(getRandomId());
+		BdfList originalCommentBody = BdfList.of("originalCommentBody");
 		// The post and comment were reblogged to blog 2 with another comment
-		final MessageId rewrappedPostId = new MessageId(getRandomId());
-		final Message rewrappedPostMsg = new Message(rewrappedPostId,
+		MessageId rewrappedPostId = new MessageId(getRandomId());
+		Message rewrappedPostMsg = new Message(rewrappedPostId,
 				blog2.getId(), timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary rewrappedPostMeta = BdfDictionary.of(
+		BdfDictionary rewrappedPostMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, WRAPPED_POST.getInt()),
 				new BdfEntry(KEY_RSS_FEED, true),
 				new BdfEntry(KEY_ORIGINAL_MSG_ID, messageId),
@@ -659,10 +659,10 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		final MessageId wrappedCommentId = new MessageId(getRandomId());
-		final Message wrappedCommentMsg = new Message(wrappedCommentId,
+		MessageId wrappedCommentId = new MessageId(getRandomId());
+		Message wrappedCommentMsg = new Message(wrappedCommentId,
 				blog2.getId(), timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary wrappedCommentMeta = BdfDictionary.of(
+		BdfDictionary wrappedCommentMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, WRAPPED_COMMENT.getInt()),
 				new BdfEntry(KEY_COMMENT, comment),
 				new BdfEntry(KEY_PARENT_MSG_ID, rewrappedPostId),
@@ -671,11 +671,11 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		final String localComment = getRandomString(MAX_BLOG_COMMENT_LENGTH);
-		final MessageId localCommentId = new MessageId(getRandomId());
-		final Message localCommentMsg = new Message(localCommentId,
+		String localComment = getRandomString(MAX_BLOG_COMMENT_LENGTH);
+		MessageId localCommentId = new MessageId(getRandomId());
+		Message localCommentMsg = new Message(localCommentId,
 				blog2.getId(), timestamp, getRandomBytes(MAX_MESSAGE_LENGTH));
-		final BdfDictionary localCommentMeta = BdfDictionary.of(
+		BdfDictionary localCommentMeta = BdfDictionary.of(
 				new BdfEntry(KEY_TYPE, COMMENT.getInt()),
 				new BdfEntry(KEY_COMMENT, localComment),
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
@@ -796,7 +796,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 	@Test
 	public void testBlogCanBeRemoved() throws Exception {
 		// check that own personal blogs can not be removed
-		final Transaction txn = new Transaction(null, true);
+		Transaction txn = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn));
@@ -809,7 +809,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 		context.assertIsSatisfied();
 
 		// check that blogs of contacts can be removed
-		final Transaction txn2 = new Transaction(null, true);
+		Transaction txn2 = new Transaction(null, true);
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(true);
 			will(returnValue(txn2));
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 867db3df9e229ffab0b01f03bbde9cffa5ad510e..a089eb0e06e61af209ae4d22d27d83a7ac650c58 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
@@ -126,7 +126,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogPost() throws Exception {
 		// check that blog0 has no posts
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		Collection<BlogPostHeader> headers0 =
 				blogManager0.getPostHeaders(blog0.getId());
 		assertEquals(0, headers0.size());
@@ -164,7 +164,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogPostInWrongBlog() throws Exception {
 		// add a post to blog1
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog1.getId(), clock.currentTimeMillis(), null,
 						author0, body);
@@ -203,7 +203,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogComment() throws Exception {
 		// add a post to blog0
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
 						author0, body);
@@ -248,7 +248,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogCommentOnOwnPost() throws Exception {
 		// add a post to blog0
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
 						author0, body);
@@ -284,7 +284,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testCommentOnComment() throws Exception {
 		// add a post to blog0
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
 						author0, body);
@@ -372,7 +372,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testCommentOnOwnComment() throws Exception {
 		// add a post to blog0
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
 						author0, body);
@@ -417,7 +417,7 @@ public class BlogManagerIntegrationTest
 		assertTrue(rssBlog.isRssFeed());
 
 		// add a feed post to rssBlog
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(rssBlog.getId(), clock.currentTimeMillis(),
 						null, author0, body);
@@ -436,7 +436,7 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testFeedReblog() throws Exception {
 		// add a feed post to rssBlog
-		final String body = getRandomString(42);
+		String body = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(rssBlog.getId(), clock.currentTimeMillis(),
 						null, author0, body);
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
index 923bd4c4a5394840641c167eb9b1cde50c556e06..988e3d48b932b19f8aa14ac7e9f17902e1531b64 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
@@ -111,12 +111,12 @@ public class BlogPostValidatorTest extends BriarTestCase {
 
 	private void testValidateProperBlogPost(Blog b, boolean rssFeed)
 			throws IOException, GeneralSecurityException {
-		final byte[] sigBytes = TestUtils.getRandomBytes(42);
+		byte[] sigBytes = TestUtils.getRandomBytes(42);
 		BdfList m = BdfList.of(POST.getInt(), body, sigBytes);
 
 		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), body);
 		expectCrypto(b, SIGNING_LABEL_POST, signed, sigBytes);
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
 
 		assertEquals(authorDict, result.getDictionary(KEY_AUTHOR));
@@ -150,14 +150,14 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		String comment = "This is a blog comment";
 		MessageId pOriginalId = new MessageId(TestUtils.getRandomId());
 		MessageId currentId = new MessageId(TestUtils.getRandomId());
-		final byte[] sigBytes = TestUtils.getRandomBytes(42);
+		byte[] sigBytes = TestUtils.getRandomBytes(42);
 		BdfList m = BdfList.of(COMMENT.getInt(), comment, pOriginalId,
 				currentId, sigBytes);
 
 		BdfList signed = BdfList.of(blog.getId(), message.getTimestamp(),
 				comment, pOriginalId, currentId);
 		expectCrypto(blog, SIGNING_LABEL_COMMENT, signed, sigBytes);
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
 
 		assertEquals(comment, result.getString(KEY_COMMENT));
@@ -175,14 +175,14 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		// comment, parent_original_id, signature, parent_current_id
 		MessageId originalId = new MessageId(TestUtils.getRandomId());
 		MessageId currentId = new MessageId(TestUtils.getRandomId());
-		final byte[] sigBytes = TestUtils.getRandomBytes(42);
+		byte[] sigBytes = TestUtils.getRandomBytes(42);
 		BdfList m = BdfList.of(COMMENT.getInt(), null, originalId, currentId,
 				sigBytes);
 
 		BdfList signed = BdfList.of(blog.getId(), message.getTimestamp(), null,
 				originalId, currentId);
 		expectCrypto(blog, SIGNING_LABEL_COMMENT, signed, sigBytes);
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
 
 		assertFalse(result.containsKey(KEY_COMMENT));
@@ -201,18 +201,18 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		testValidateProperWrappedPost(rssBlog, true);
 	}
 
-	private void testValidateProperWrappedPost(final Blog b, boolean rssFeed)
+	private void testValidateProperWrappedPost(Blog b, boolean rssFeed)
 			throws IOException, GeneralSecurityException {
 		// group descriptor, timestamp, content, signature
-		final byte[] sigBytes = TestUtils.getRandomBytes(42);
+		byte[] sigBytes = TestUtils.getRandomBytes(42);
 		BdfList m = BdfList.of(WRAPPED_POST.getInt(), descriptor,
 				message.getTimestamp(), body, sigBytes);
 
 		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), body);
 		expectCrypto(b, SIGNING_LABEL_POST, signed, sigBytes);
 
-		final BdfList originalList = BdfList.of(POST.getInt(), body, sigBytes);
-		final byte[] originalBody = TestUtils.getRandomBytes(42);
+		BdfList originalList = BdfList.of(POST.getInt(), body, sigBytes);
+		byte[] originalBody = TestUtils.getRandomBytes(42);
 
 		context.checking(new Expectations() {{
 			oneOf(groupFactory).createGroup(clientId, descriptor);
@@ -227,7 +227,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 			will(returnValue(message));
 		}});
 
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
 
 		assertEquals(authorDict, result.getDictionary(KEY_AUTHOR));
@@ -243,7 +243,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		String comment = "This is another comment";
 		MessageId originalId = new MessageId(TestUtils.getRandomId());
 		MessageId oldId = new MessageId(TestUtils.getRandomId());
-		final byte[] sigBytes = TestUtils.getRandomBytes(42);
+		byte[] sigBytes = TestUtils.getRandomBytes(42);
 		MessageId currentId = new MessageId(TestUtils.getRandomId());
 		BdfList m = BdfList.of(WRAPPED_COMMENT.getInt(), descriptor,
 				message.getTimestamp(), comment, originalId, oldId, sigBytes,
@@ -253,9 +253,9 @@ public class BlogPostValidatorTest extends BriarTestCase {
 				comment, originalId, oldId);
 		expectCrypto(blog, SIGNING_LABEL_COMMENT, signed, sigBytes);
 
-		final BdfList originalList = BdfList.of(COMMENT.getInt(), comment,
+		BdfList originalList = BdfList.of(COMMENT.getInt(), comment,
 				originalId, oldId, sigBytes);
-		final byte[] originalBody = TestUtils.getRandomBytes(42);
+		byte[] originalBody = TestUtils.getRandomBytes(42);
 
 		context.checking(new Expectations() {{
 			oneOf(groupFactory).createGroup(clientId, descriptor);
@@ -268,7 +268,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 			will(returnValue(message));
 		}});
 
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
 
 		assertEquals(comment, result.getString(KEY_COMMENT));
@@ -279,8 +279,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		context.assertIsSatisfied();
 	}
 
-	private void expectCrypto(final Blog b, final String label,
-			final BdfList signed, final byte[] sig)
+	private void expectCrypto(Blog b, String label, BdfList signed, byte[] sig)
 			throws IOException, GeneralSecurityException {
 		context.checking(new Expectations() {{
 			oneOf(blogFactory).parseBlog(group);
diff --git a/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
index 7555a8a6bc296605341ed640d1d1af309f0e32e8..5c540c13b16dc4ddc9950378f2ec9663f80d9bb9 100644
--- a/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/client/MessageQueueManagerImplTest.java
@@ -54,19 +54,19 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	@Test
 	public void testSendingMessages() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 
-		final Transaction txn = new Transaction(null, false);
-		final byte[] body = new byte[123];
-		final Metadata groupMetadata = new Metadata();
-		final Metadata messageMetadata = new Metadata();
-		final Metadata groupMetadata1 = new Metadata();
-		final byte[] queueState = new byte[123];
+		Transaction txn = new Transaction(null, false);
+		byte[] body = new byte[123];
+		Metadata groupMetadata = new Metadata();
+		Metadata messageMetadata = new Metadata();
+		Metadata groupMetadata1 = new Metadata();
+		byte[] queueState = new byte[123];
 		groupMetadata1.put(QUEUE_STATE_KEY, queueState);
 
 		context.checking(new Expectations() {{
@@ -123,21 +123,20 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	@Test
 	public void testValidatorRejectsShortMessage() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 
-		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
-		final QueueMessageValidator queueMessageValidator =
+		AtomicReference<MessageValidator> captured = new AtomicReference<>();
+		QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message is too short to be a valid queue message
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH - 1];
-		final Message message = new Message(messageId, groupId, timestamp, raw);
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH - 1];
+		Message message = new Message(messageId, groupId, timestamp, raw);
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
@@ -167,23 +166,22 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	@Test
 	public void testValidatorRejectsNegativeQueuePosition() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 
-		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
-		final QueueMessageValidator queueMessageValidator =
+		AtomicReference<MessageValidator> captured = new AtomicReference<>();
+		QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
 		// The message has a negative queue position
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
 		for (int i = 0; i < 8; i++)
 			raw[MESSAGE_HEADER_LENGTH + i] = (byte) 0xFF;
-		final Message message = new Message(messageId, groupId, timestamp, raw);
+		Message message = new Message(messageId, groupId, timestamp, raw);
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
@@ -213,24 +211,23 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	@Test
 	public void testValidatorDelegatesValidMessage() throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
 
-		final AtomicReference<MessageValidator> captured =
-				new AtomicReference<>();
-		final QueueMessageValidator queueMessageValidator =
+		AtomicReference<MessageValidator> captured = new AtomicReference<>();
+		QueueMessageValidator queueMessageValidator =
 				context.mock(QueueMessageValidator.class);
-		final Metadata metadata = new Metadata();
-		final MessageContext messageContext =
+		Metadata metadata = new Metadata();
+		MessageContext messageContext =
 				new MessageContext(metadata);
 		// The message is valid, with a queue position of zero
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
-		final Message message = new Message(messageId, groupId, timestamp, raw);
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		Message message = new Message(messageId, groupId, timestamp, raw);
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerMessageValidator(with(clientId),
@@ -261,25 +258,24 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	public void testIncomingMessageHookDeletesDuplicateMessage()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
-		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
-		final IncomingQueueMessageHook incomingQueueMessageHook =
+		AtomicReference<IncomingMessageHook> captured = new AtomicReference<>();
+		IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
-		final Transaction txn = new Transaction(null, false);
-		final Metadata groupMetadata = new Metadata();
-		final byte[] queueState = new byte[123];
+		Transaction txn = new Transaction(null, false);
+		Metadata groupMetadata = new Metadata();
+		byte[] queueState = new byte[123];
 		groupMetadata.put(QUEUE_STATE_KEY, queueState);
 		// The message has queue position 0
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
-		final Message message = new Message(messageId, groupId, timestamp, raw);
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		Message message = new Message(messageId, groupId, timestamp, raw);
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
@@ -313,27 +309,26 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	public void testIncomingMessageHookAddsOutOfOrderMessageToPendingList()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
-		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
-		final IncomingQueueMessageHook incomingQueueMessageHook =
+		AtomicReference<IncomingMessageHook> captured = new AtomicReference<>();
+		IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
-		final Transaction txn = new Transaction(null, false);
-		final Metadata groupMetadata = new Metadata();
-		final byte[] queueState = new byte[123];
+		Transaction txn = new Transaction(null, false);
+		Metadata groupMetadata = new Metadata();
+		byte[] queueState = new byte[123];
 		groupMetadata.put(QUEUE_STATE_KEY, queueState);
 		// The message has queue position 1
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
 		ByteUtils.writeUint64(1L, raw, MESSAGE_HEADER_LENGTH);
-		final Message message = new Message(messageId, groupId, timestamp, raw);
-		final BdfList pending = BdfList.of(BdfList.of(1L, messageId));
+		Message message = new Message(messageId, groupId, timestamp, raw);
+		BdfList pending = BdfList.of(BdfList.of(1L, messageId));
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
@@ -369,26 +364,25 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	public void testIncomingMessageHookDelegatesInOrderMessage()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
-		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
-		final IncomingQueueMessageHook incomingQueueMessageHook =
+		AtomicReference<IncomingMessageHook> captured = new AtomicReference<>();
+		IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
-		final Transaction txn = new Transaction(null, false);
-		final Metadata groupMetadata = new Metadata();
-		final byte[] queueState = new byte[123];
+		Transaction txn = new Transaction(null, false);
+		Metadata groupMetadata = new Metadata();
+		byte[] queueState = new byte[123];
 		groupMetadata.put(QUEUE_STATE_KEY, queueState);
 		// The message has queue position 0
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
-		final Message message = new Message(messageId, groupId, timestamp, raw);
-		final Metadata messageMetadata = new Metadata();
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		Message message = new Message(messageId, groupId, timestamp, raw);
+		Metadata messageMetadata = new Metadata();
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
@@ -427,33 +421,32 @@ public class MessageQueueManagerImplTest extends BriarTestCase {
 	public void testIncomingMessageHookRetrievesPendingMessage()
 			throws Exception {
 		Mockery context = new Mockery();
-		final DatabaseComponent db = context.mock(DatabaseComponent.class);
-		final ClientHelper clientHelper = context.mock(ClientHelper.class);
-		final QueueMessageFactory queueMessageFactory =
+		DatabaseComponent db = context.mock(DatabaseComponent.class);
+		ClientHelper clientHelper = context.mock(ClientHelper.class);
+		QueueMessageFactory queueMessageFactory =
 				context.mock(QueueMessageFactory.class);
-		final ValidationManager validationManager =
+		ValidationManager validationManager =
 				context.mock(ValidationManager.class);
-		final AtomicReference<IncomingMessageHook> captured =
-				new AtomicReference<>();
-		final IncomingQueueMessageHook incomingQueueMessageHook =
+		AtomicReference<IncomingMessageHook> captured = new AtomicReference<>();
+		IncomingQueueMessageHook incomingQueueMessageHook =
 				context.mock(IncomingQueueMessageHook.class);
 
-		final Transaction txn = new Transaction(null, false);
-		final Metadata groupMetadata = new Metadata();
-		final byte[] queueState = new byte[123];
+		Transaction txn = new Transaction(null, false);
+		Metadata groupMetadata = new Metadata();
+		byte[] queueState = new byte[123];
 		groupMetadata.put(QUEUE_STATE_KEY, queueState);
 		// The message has queue position 0
-		final MessageId messageId = new MessageId(TestUtils.getRandomId());
-		final byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
-		final Message message = new Message(messageId, groupId, timestamp, raw);
-		final Metadata messageMetadata = new Metadata();
+		MessageId messageId = new MessageId(TestUtils.getRandomId());
+		byte[] raw = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		Message message = new Message(messageId, groupId, timestamp, raw);
+		Metadata messageMetadata = new Metadata();
 		// Queue position 1 is pending
-		final MessageId messageId1 = new MessageId(TestUtils.getRandomId());
-		final byte[] raw1 = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
-		final QueueMessage message1 = new QueueMessage(messageId1, groupId,
+		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
+		byte[] raw1 = new byte[QUEUE_MESSAGE_HEADER_LENGTH];
+		QueueMessage message1 = new QueueMessage(messageId1, groupId,
 				timestamp, 1L, raw1);
-		final Metadata messageMetadata1 = new Metadata();
-		final BdfList pending = BdfList.of(BdfList.of(1L, messageId1));
+		Metadata messageMetadata1 = new Metadata();
+		BdfList pending = BdfList.of(BdfList.of(1L, messageId1));
 
 		context.checking(new Expectations() {{
 			oneOf(validationManager).registerIncomingMessageHook(with(clientId),
diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
index 4017aa5d525380df95a48c999b4c0f732448abd9..e8e914dc88924ec6af7936ac70af442dcf88c5ac 100644
--- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
@@ -89,7 +89,7 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testFetchFeedIoException() throws Exception {
-		final BdfDictionary feedDict= new BdfDictionary();
+		BdfDictionary feedDict= new BdfDictionary();
 		BdfList feedList = BdfList.of(feedDict);
 
 		expectGetFeeds(feedList);
@@ -104,17 +104,16 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testPostFeedEntriesEmptyDate() throws Exception {
-		final Transaction txn = new Transaction(null, false);
+		Transaction txn = new Transaction(null, false);
 		List<SyndEntry> entries = new ArrayList<>();
 		entries.add(new SyndEntryImpl());
-		final SyndEntry entry = new SyndEntryImpl();
+		SyndEntry entry = new SyndEntryImpl();
 		entry.setUpdatedDate(new Date());
 		entries.add(entry);
-		final String body =
-				"<p> (" + entry.getUpdatedDate().toString() + ")</p>";
+		String body = "<p> (" + entry.getUpdatedDate().toString() + ")</p>";
 		Message msg = new Message(new MessageId(getRandomId()), blogGroupId, 0,
 				getRandomBytes(42));
-		final BlogPost post = new BlogPost(msg, null, localAuthor);
+		BlogPost post = new BlogPost(msg, null, localAuthor);
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -139,9 +138,9 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void expectGetFeeds(final BdfList feedList) throws Exception {
-		final Transaction txn = new Transaction(null, true);
-		final BdfDictionary feedsDict =
+	private void expectGetFeeds(BdfList feedList) throws Exception {
+		Transaction txn = new Transaction(null, true);
+		BdfDictionary feedsDict =
 				BdfDictionary.of(new BdfEntry(KEY_FEEDS, feedList));
 		expectGetLocalGroup();
 		context.checking(new Expectations() {{
@@ -158,8 +157,8 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void expectStoreFeed(final BdfList feedList) throws Exception {
-		final BdfDictionary feedDict =
+	private void expectStoreFeed(BdfList feedList) throws Exception {
+		BdfDictionary feedDict =
 				BdfDictionary.of(new BdfEntry(KEY_FEEDS, feedList));
 		expectGetLocalGroup();
 		context.checking(new Expectations() {{
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 30567fdf225431c37ef54d27fc1908c2d2e7c9e1..d53af17304866bd6444963bd1830982ff6e96049 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
@@ -81,10 +81,10 @@ public class ForumManagerTest
 	@Test
 	public void testForumPost() throws Exception {
 		assertEquals(1, forumManager0.getForums().size());
-		final long ms1 = clock.currentTimeMillis() - 1000L;
-		final String body1 = "some forum text";
-		final long ms2 = clock.currentTimeMillis();
-		final String body2 = "some other forum text";
+		long ms1 = clock.currentTimeMillis() - 1000L;
+		String body1 = "some forum text";
+		long ms2 = clock.currentTimeMillis();
+		String body2 = "some other forum text";
 		ForumPost post1 =
 				createForumPost(forum0.getGroup().getId(), null, body1, ms1);
 		assertEquals(ms1, post1.getMessage().getTimestamp());
@@ -109,7 +109,7 @@ public class ForumManagerTest
 				forumManager0.getPostHeaders(forum0.getGroup().getId());
 		assertEquals(2, headers.size());
 		for (ForumPostHeader h : headers) {
-			final String hBody = forumManager0.getPostBody(h.getId());
+			String hBody = forumManager0.getPostBody(h.getId());
 
 			boolean isPost1 = h.getId().equals(post1.getMessage().getId());
 			boolean isPost2 = h.getId().equals(post2.getMessage().getId());
diff --git a/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
index 2051635da42cca6a13c15678475d449ba6648b6f..51e29b23a02a4e83811607b1b71f2d8a0d4de09f 100644
--- a/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
@@ -166,12 +166,12 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 
 	@Test
 	public void testAcceptsMinLengthAuthorName() throws Exception {
-		final String shortAuthorName = StringUtils.getRandomString(1);
+		String shortAuthorName = StringUtils.getRandomString(1);
 		BdfList shortNameAuthorList =
 				BdfList.of(shortAuthorName, authorPublicKey);
-		final Author shortNameAuthor =
+		Author shortNameAuthor =
 				new Author(authorId, shortAuthorName, authorPublicKey);
-		final BdfList signedWithShortNameAuthor = BdfList.of(groupId, timestamp,
+		BdfList signedWithShortNameAuthor = BdfList.of(groupId, timestamp,
 				parentId.getBytes(), shortNameAuthorList, content);
 
 		context.checking(new Expectations() {{
@@ -259,7 +259,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 	@Test
 	public void testAcceptsMinLengthContent() throws Exception {
 		String shortContent = "";
-		final BdfList signedWithShortContent = BdfList.of(groupId, timestamp,
+		BdfList signedWithShortContent = BdfList.of(groupId, timestamp,
 				parentId.getBytes(), authorList, shortContent);
 
 		context.checking(new Expectations() {{
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
index 30b58d5871f52003a751d926d442cc23c60e40b4..0453530c9a42833d23958ddfd22b91b4cd12fb86 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroduceeManagerTest.java
@@ -174,7 +174,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 	public void testIncomingRequestMessage()
 			throws DbException, FormatException {
 
-		final BdfDictionary msg = new BdfDictionary();
+		BdfDictionary msg = new BdfDictionary();
 		msg.put(TYPE, TYPE_REQUEST);
 		msg.put(GROUP_ID, introductionGroup1.getId());
 		msg.put(SESSION_ID, sessionId);
@@ -183,7 +183,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 		msg.put(NAME, introducee2.getAuthor().getName());
 		msg.put(PUBLIC_KEY, introducee2.getAuthor().getPublicKey());
 
-		final BdfDictionary state =
+		BdfDictionary state =
 				initializeSessionState(txn, introductionGroup1.getId(), msg);
 
 		context.checking(new Expectations() {{
@@ -201,7 +201,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 	public void testIncomingResponseMessage()
 			throws DbException, FormatException {
 
-		final BdfDictionary msg = new BdfDictionary();
+		BdfDictionary msg = new BdfDictionary();
 		msg.put(TYPE, TYPE_RESPONSE);
 		msg.put(GROUP_ID, introductionGroup1.getId());
 		msg.put(SESSION_ID, sessionId);
@@ -210,7 +210,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 		msg.put(NAME, introducee2.getAuthor().getName());
 		msg.put(PUBLIC_KEY, introducee2.getAuthor().getPublicKey());
 
-		final BdfDictionary state =
+		BdfDictionary state =
 				initializeSessionState(txn, introductionGroup1.getId(), msg);
 		state.put(STATE, IntroduceeProtocolState.AWAIT_RESPONSES.ordinal());
 
@@ -236,7 +236,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 			throws DbException, FormatException, GeneralSecurityException {
 
 		// TODO MR !237 should use its new default initialization method here
-		final BdfDictionary msg = new BdfDictionary();
+		BdfDictionary msg = new BdfDictionary();
 		msg.put(TYPE, TYPE_RESPONSE);
 		msg.put(GROUP_ID, introductionGroup1.getId());
 		msg.put(SESSION_ID, sessionId);
@@ -244,19 +244,19 @@ public class IntroduceeManagerTest extends BriarTestCase {
 		msg.put(MESSAGE_TIME, time);
 		msg.put(NAME, introducee2.getAuthor().getName());
 		msg.put(PUBLIC_KEY, introducee2.getAuthor().getPublicKey());
-		final BdfDictionary state =
+		BdfDictionary state =
 				initializeSessionState(txn, introductionGroup1.getId(), msg);
 
 		// prepare state for incoming ACK
 		state.put(STATE, IntroduceeProtocolState.AWAIT_ACK.ordinal());
 		state.put(ADDED_CONTACT_ID, 2);
-		final byte[] nonce = TestUtils.getRandomBytes(42);
+		byte[] nonce = TestUtils.getRandomBytes(42);
 		state.put(NONCE, nonce);
 		state.put(PUBLIC_KEY, introducee2.getAuthor().getPublicKey());
 
 		// create incoming ACK message
-		final byte[] mac = TestUtils.getRandomBytes(MAC_LENGTH);
-		final byte[] sig = TestUtils.getRandomBytes(MAX_SIGNATURE_LENGTH);
+		byte[] mac = TestUtils.getRandomBytes(MAC_LENGTH);
+		byte[] sig = TestUtils.getRandomBytes(MAX_SIGNATURE_LENGTH);
 		BdfDictionary ack = BdfDictionary.of(
 				new BdfEntry(TYPE, TYPE_ACK),
 				new BdfEntry(SESSION_ID, sessionId),
@@ -286,9 +286,9 @@ public class IntroduceeManagerTest extends BriarTestCase {
 	public void testSignatureVerification()
 			throws FormatException, DbException, GeneralSecurityException {
 
-		final byte[] publicKeyBytes = introducee2.getAuthor().getPublicKey();
-		final byte[] nonce = TestUtils.getRandomBytes(MAC_LENGTH);
-		final byte[] sig = TestUtils.getRandomBytes(MAC_LENGTH);
+		byte[] publicKeyBytes = introducee2.getAuthor().getPublicKey();
+		byte[] nonce = TestUtils.getRandomBytes(MAC_LENGTH);
+		byte[] sig = TestUtils.getRandomBytes(MAC_LENGTH);
 
 		BdfDictionary state = new BdfDictionary();
 		state.put(PUBLIC_KEY, publicKeyBytes);
@@ -308,12 +308,12 @@ public class IntroduceeManagerTest extends BriarTestCase {
 	public void testMacVerification()
 			throws FormatException, DbException, GeneralSecurityException {
 
-		final byte[] publicKeyBytes = introducee2.getAuthor().getPublicKey();
-		final BdfDictionary tp = BdfDictionary.of(new BdfEntry("fake", "fake"));
-		final byte[] ePublicKeyBytes =
+		byte[] publicKeyBytes = introducee2.getAuthor().getPublicKey();
+		BdfDictionary tp = BdfDictionary.of(new BdfEntry("fake", "fake"));
+		byte[] ePublicKeyBytes =
 				TestUtils.getRandomBytes(MAX_PUBLIC_KEY_LENGTH);
-		final byte[] mac = TestUtils.getRandomBytes(MAC_LENGTH);
-		final SecretKey macKey = TestUtils.getSecretKey();
+		byte[] mac = TestUtils.getRandomBytes(MAC_LENGTH);
+		SecretKey macKey = TestUtils.getSecretKey();
 
 		// move state to where it would be after an ACK arrived
 		BdfDictionary state = new BdfDictionary();
@@ -324,7 +324,7 @@ public class IntroduceeManagerTest extends BriarTestCase {
 		state.put(MAC, mac);
 		state.put(MAC_KEY, macKey.getBytes());
 
-		final byte[] signBytes = TestUtils.getRandomBytes(42);
+		byte[] signBytes = TestUtils.getRandomBytes(42);
 		context.checking(new Expectations() {{
 			oneOf(clientHelper).toByteArray(
 					BdfList.of(publicKeyBytes, ePublicKeyBytes, tp, time));
@@ -356,17 +356,17 @@ public class IntroduceeManagerTest extends BriarTestCase {
 		context.assertIsSatisfied();
 	}
 
-	private BdfDictionary initializeSessionState(final Transaction txn,
-			final GroupId groupId, final BdfDictionary msg)
+	private BdfDictionary initializeSessionState(Transaction txn,
+			GroupId groupId, BdfDictionary msg)
 			throws DbException, FormatException {
 
-		final SecureRandom secureRandom = context.mock(SecureRandom.class);
-		final Bytes salt = new Bytes(new byte[64]);
-		final BdfDictionary groupMetadata = BdfDictionary.of(
+		SecureRandom secureRandom = context.mock(SecureRandom.class);
+		Bytes salt = new Bytes(new byte[64]);
+		BdfDictionary groupMetadata = BdfDictionary.of(
 				new BdfEntry(CONTACT, introducee1.getId().getInt())
 		);
-		final boolean contactExists = false;
-		final BdfDictionary state = new BdfDictionary();
+		boolean contactExists = false;
+		BdfDictionary state = new BdfDictionary();
 		state.put(STORAGE_ID, localStateMessage.getId());
 		state.put(STATE, AWAIT_REQUEST.getValue());
 		state.put(ROLE, ROLE_INTRODUCEE);
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
index 1eb26692f53b1b6d2f4e88e0c9e3d202048522ac..93b584ae7cf8b8867b7b697e82d316df7f4973ee 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroducerManagerTest.java
@@ -108,14 +108,14 @@ public class IntroducerManagerTest extends BriarTestCase {
 
 	@Test
 	public void testMakeIntroduction() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
-		final long time = 42L;
+		Transaction txn = new Transaction(null, false);
+		long time = 42L;
 		context.setImposteriser(ClassImposteriser.INSTANCE);
-		final SecureRandom secureRandom = context.mock(SecureRandom.class);
-		final Bytes salt = new Bytes(new byte[64]);
-		final Message msg = new Message(new MessageId(TestUtils.getRandomId()),
+		SecureRandom secureRandom = context.mock(SecureRandom.class);
+		Bytes salt = new Bytes(new byte[64]);
+		Message msg = new Message(new MessageId(TestUtils.getRandomId()),
 				localGroup0.getId(), time, TestUtils.getRandomBytes(64));
-		final BdfDictionary state = new BdfDictionary();
+		BdfDictionary state = new BdfDictionary();
 		state.put(SESSION_ID, msg.getId());
 		state.put(STORAGE_ID, msg.getId());
 		state.put(STATE, PREPARE_REQUESTS.getValue());
@@ -128,25 +128,25 @@ public class IntroducerManagerTest extends BriarTestCase {
 		state.put(CONTACT_ID_2, introducee2.getId().getInt());
 		state.put(AUTHOR_ID_1, introducee1.getAuthor().getId());
 		state.put(AUTHOR_ID_2, introducee2.getAuthor().getId());
-		final BdfDictionary state2 = (BdfDictionary) state.clone();
+		BdfDictionary state2 = (BdfDictionary) state.clone();
 		state2.put(STATE, AWAIT_RESPONSES.getValue());
 
-		final BdfDictionary msg1 = new BdfDictionary();
+		BdfDictionary msg1 = new BdfDictionary();
 		msg1.put(TYPE, TYPE_REQUEST);
 		msg1.put(SESSION_ID, state.getRaw(SESSION_ID));
 		msg1.put(GROUP_ID, state.getRaw(GROUP_ID_1));
 		msg1.put(NAME, state.getString(CONTACT_2));
 		msg1.put(PUBLIC_KEY, introducee2.getAuthor().getPublicKey());
-		final BdfDictionary msg1send = (BdfDictionary) msg1.clone();
+		BdfDictionary msg1send = (BdfDictionary) msg1.clone();
 		msg1send.put(MESSAGE_TIME, time);
 
-		final BdfDictionary msg2 = new BdfDictionary();
+		BdfDictionary msg2 = new BdfDictionary();
 		msg2.put(TYPE, TYPE_REQUEST);
 		msg2.put(SESSION_ID, state.getRaw(SESSION_ID));
 		msg2.put(GROUP_ID, state.getRaw(GROUP_ID_2));
 		msg2.put(NAME, state.getString(CONTACT_1));
 		msg2.put(PUBLIC_KEY, introducee1.getAuthor().getPublicKey());
-		final BdfDictionary msg2send = (BdfDictionary) msg2.clone();
+		BdfDictionary msg2send = (BdfDictionary) msg2.clone();
 		msg2send.put(MESSAGE_TIME, time);
 
 		context.checking(new Expectations() {{
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
index 019787882828f9565f86e0d5bead355ebee02959..7d06c94d0f7471bd8051341af406e82a9cd11ac3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionManagerImplTest.java
@@ -146,7 +146,7 @@ public class IntroductionManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testAcceptIntroduction() throws DbException, FormatException {
-		final BdfDictionary state = BdfDictionary.of(
+		BdfDictionary state = BdfDictionary.of(
 				new BdfEntry(GROUP_ID_1, introductionGroup1.getId()),
 				new BdfEntry(GROUP_ID_2, introductionGroup2.getId())
 		);
@@ -177,7 +177,7 @@ public class IntroductionManagerImplTest extends BriarTestCase {
 
 	@Test
 	public void testDeclineIntroduction() throws DbException, FormatException {
-		final BdfDictionary state = BdfDictionary.of(
+		BdfDictionary state = BdfDictionary.of(
 				new BdfEntry(GROUP_ID_1, introductionGroup1.getId()),
 				new BdfEntry(GROUP_ID_2, introductionGroup2.getId())
 		);
@@ -210,8 +210,8 @@ public class IntroductionManagerImplTest extends BriarTestCase {
 	public void testGetIntroductionMessages()
 			throws DbException, FormatException {
 
-		final Map<MessageId, BdfDictionary> metadata = Collections.emptyMap();
-		final Collection<MessageStatus> statuses = Collections.emptyList();
+		Map<MessageId, BdfDictionary> metadata = Collections.emptyMap();
+		Collection<MessageStatus> statuses = Collections.emptyList();
 		txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
@@ -240,10 +240,10 @@ public class IntroductionManagerImplTest extends BriarTestCase {
 	public void testIncomingRequestMessage()
 			throws DbException, FormatException {
 
-		final BdfDictionary msg = new BdfDictionary();
+		BdfDictionary msg = new BdfDictionary();
 		msg.put(TYPE, TYPE_REQUEST);
 
-		final BdfDictionary state = new BdfDictionary();
+		BdfDictionary state = new BdfDictionary();
 		txn = new Transaction(null, false);
 
 		context.checking(new Expectations() {{
@@ -267,12 +267,12 @@ public class IntroductionManagerImplTest extends BriarTestCase {
 	public void testIncomingResponseMessage()
 			throws DbException, FormatException {
 
-		final BdfDictionary msg = BdfDictionary.of(
+		BdfDictionary msg = BdfDictionary.of(
 				new BdfEntry(TYPE, TYPE_RESPONSE),
 				new BdfEntry(SESSION_ID, sessionId)
 		);
 
-		final BdfDictionary state = new BdfDictionary();
+		BdfDictionary state = new BdfDictionary();
 		state.put(ROLE, ROLE_INTRODUCER);
 		state.put(GROUP_ID_1, introductionGroup1.getId());
 		state.put(GROUP_ID_2, introductionGroup2.getId());
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
index 5c3af3a9efedc6ff0d9cd34f223434cc263ea0a3..b37f975f267b216547e0159a2c2d50b86f41fac9 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
@@ -83,17 +83,17 @@ public class IntroductionValidatorTest extends BriarTestCase {
 
 	@Test
 	public void testValidateProperIntroductionRequest() throws IOException {
-		final byte[] sessionId = TestUtils.getRandomId();
-		final String name = StringUtils.getRandomString(MAX_AUTHOR_NAME_LENGTH);
-		final byte[] publicKey =
+		byte[] sessionId = TestUtils.getRandomId();
+		String name = StringUtils.getRandomString(MAX_AUTHOR_NAME_LENGTH);
+		byte[] publicKey =
 				TestUtils.getRandomBytes(MAX_PUBLIC_KEY_LENGTH);
-		final String text =
+		String text =
 				StringUtils.getRandomString(MAX_INTRODUCTION_MESSAGE_LENGTH);
 
 		BdfList body = BdfList.of(TYPE_REQUEST, sessionId,
 				name, publicKey, text);
 
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, body)
 						.getDictionary();
 
@@ -192,7 +192,7 @@ public class IntroductionValidatorTest extends BriarTestCase {
 				msg.getBoolean(ACCEPT), msg.getLong(TIME),
 				msg.getRaw(E_PUBLIC_KEY), msg.getDictionary(TRANSPORT));
 
-		final BdfDictionary result =
+		BdfDictionary result =
 				validator.validateMessage(message, group, body).getDictionary();
 
 		assertEquals(Long.valueOf(TYPE_RESPONSE), result.getLong(TYPE));
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
index 71079dbadbd6e2e689bc248b79919844270505f2..ed47f104e03283435240829144574876f0402128 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageSenderTest.java
@@ -58,26 +58,26 @@ public class MessageSenderTest extends BriarTestCase {
 
 	@Test
 	public void testSendMessage() throws DbException, FormatException {
-		final Transaction txn = new Transaction(null, false);
-		final Group privateGroup =
+		Transaction txn = new Transaction(null, false);
+		Group privateGroup =
 				new Group(new GroupId(TestUtils.getRandomId()),
 						new ClientId(StringUtils.getRandomString(5)),
 						new byte[0]);
-		final SessionId sessionId = new SessionId(TestUtils.getRandomId());
+		SessionId sessionId = new SessionId(TestUtils.getRandomId());
 		byte[] mac = TestUtils.getRandomBytes(42);
 		byte[] sig = TestUtils.getRandomBytes(MAX_SIGNATURE_LENGTH);
-		final long time = 42L;
-		final BdfDictionary msg = BdfDictionary.of(
+		long time = 42L;
+		BdfDictionary msg = BdfDictionary.of(
 				new BdfEntry(TYPE, TYPE_ACK),
 				new BdfEntry(GROUP_ID, privateGroup.getId()),
 				new BdfEntry(SESSION_ID, sessionId),
 				new BdfEntry(MAC, mac),
 				new BdfEntry(SIGNATURE, sig)
 		);
-		final BdfList bodyList =
+		BdfList bodyList =
 				BdfList.of(TYPE_ACK, sessionId.getBytes(), mac, sig);
-		final byte[] body = TestUtils.getRandomBytes(8);
-		final Metadata metadata = new Metadata();
+		byte[] body = TestUtils.getRandomBytes(8);
+		Metadata metadata = new Metadata();
 
 		context.checking(new Expectations() {{
 			oneOf(clientHelper).toByteArray(bodyList);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
index 324aa8d18c0932b9f3afe3b6b23d9a599fa6ea53..03ea9b1ba1b144f46578581358788bc737013bc7 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
@@ -330,7 +330,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 				.getBoolean(KEY_INITIAL_JOIN_MSG));
 	}
 
-	private void expectCreateAuthor(final Author member) {
+	private void expectCreateAuthor(Author member) {
 		context.checking(new Expectations() {{
 			oneOf(authorFactory).createAuthor(member.getName(),
 					member.getPublicKey());
@@ -345,10 +345,9 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 		}});
 	}
 
-	private void expectJoinMessage(final Author member, final BdfList invite,
-			final boolean creatorSigValid, final boolean memberSigValid)
-			throws Exception {
-		final BdfList signed = BdfList.of(group.getId(), message.getTimestamp(),
+	private void expectJoinMessage(Author member, BdfList invite,
+			boolean creatorSigValid, boolean memberSigValid) throws Exception {
+		BdfList signed = BdfList.of(group.getId(), message.getTimestamp(),
 				JOIN.getInt(), member.getName(), member.getPublicKey(), invite);
 		expectCreateAuthor(member);
 		expectParsePrivateGroup();
@@ -610,9 +609,9 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 				messageContext.getDictionary().containsKey(KEY_PARENT_MSG_ID));
 	}
 
-	private void expectPostMessage(final Author member,
-			final MessageId parentId, final boolean sigValid) throws Exception {
-		final BdfList signed = BdfList.of(group.getId(), message.getTimestamp(),
+	private void expectPostMessage(Author member, MessageId parentId,
+			boolean sigValid) throws Exception {
+		BdfList signed = BdfList.of(group.getId(), message.getTimestamp(),
 				POST.getInt(), member.getName(), member.getPublicKey(),
 				parentId == null ? null : parentId.getBytes(),
 				previousMsgId.getBytes(), postContent);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
index aafa34f116d5bc0a2c9a704695324ef2377fa080..b1c3fba815a45835bfda6bfd0397adf76362c1eb 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
@@ -112,14 +112,14 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		assertEquals(inviteTimestamp, s.getInviteTimestamp());
 	}
 
-	protected void expectGetLocalTimestamp(final long time) {
+	protected void expectGetLocalTimestamp(long time) {
 		context.checking(new Expectations() {{
 			oneOf(clock).currentTimeMillis();
 			will(returnValue(time));
 		}});
 	}
 
-	protected void expectSendInviteMessage(final String msg)
+	protected void expectSendInviteMessage(String msg)
 			throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder)
@@ -131,7 +131,7 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		expectSendMessage(INVITE, true);
 	}
 
-	protected void expectSendJoinMessage(final JoinMessage m, boolean visible)
+	protected void expectSendJoinMessage(JoinMessage m, boolean visible)
 			throws Exception {
 		expectGetLocalTimestamp(messageTimestamp);
 		context.checking(new Expectations() {{
@@ -165,8 +165,8 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		expectSendMessage(ABORT, false);
 	}
 
-	private void expectSendMessage(final MessageType type,
-			final boolean visible) throws Exception {
+	private void expectSendMessage(MessageType type, boolean visible)
+			throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder).encodeMetadata(type, privateGroupId,
 					message.getTimestamp(), true, true, visible, false, false);
@@ -175,7 +175,7 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		}});
 	}
 
-	protected void expectSetPrivateGroupVisibility(final Group.Visibility v)
+	protected void expectSetPrivateGroupVisibility(Group.Visibility v)
 			throws Exception {
 		expectGetContactId();
 		context.checking(new Expectations() {{
@@ -184,7 +184,7 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 	}
 
 	protected void expectGetContactId() throws Exception {
-		final BdfDictionary groupMeta = BdfDictionary
+		BdfDictionary groupMeta = BdfDictionary
 				.of(new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt()));
 		context.checking(new Expectations() {{
 			oneOf(clientHelper)
@@ -211,10 +211,9 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		}});
 	}
 
-	protected void expectMarkMessageVisibleInUi(final MessageId m,
-			final boolean visible)
+	protected void expectMarkMessageVisibleInUi(MessageId m, boolean visible)
 			throws Exception {
-		final BdfDictionary d = new BdfDictionary();
+		BdfDictionary d = new BdfDictionary();
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder).setVisibleInUi(d, visible);
 			oneOf(clientHelper).mergeMessageMetadata(txn, m, d);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
index d116e018d05572872bb2bc82af768728f585144f..22e64a9f98378e79d0ee242d9f24dbcca51474e3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
@@ -66,7 +66,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 		assertSessionConstantsUnchanged(session, newSession);
 	}
 
-	private void expectOnLocalInvite(final String msg) throws Exception {
+	private void expectOnLocalInvite(String msg) throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(db).getGroup(txn, privateGroupId);
 			will(returnValue(privateGroupGroup));
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
index edceda6769bffb8d4368336ee55729bb40192c64..50167d6e27636a48e1b005bb1809e536e3ccf994 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
@@ -159,8 +159,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		groupInvitationManager.createLocalState(txn);
 	}
 
-	private void expectAddingContact(final Contact c,
-			final boolean contactExists) throws Exception {
+	private void expectAddingContact(Contact c, boolean contactExists)
+			throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, c);
 			will(returnValue(contactGroup));
@@ -169,7 +169,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		}});
 		if (contactExists) return;
 
-		final BdfDictionary meta = BdfDictionary
+		BdfDictionary meta = BdfDictionary
 				.of(new BdfEntry(GROUP_KEY_CONTACT_ID, c.getId().getInt()));
 		context.checking(new Expectations() {{
 			oneOf(db).addGroup(txn, contactGroup);
@@ -186,8 +186,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		expectAddingMember(privateGroup.getId(), c);
 	}
 
-	private void expectAddingMember(final GroupId g, final Contact c)
-			throws Exception {
+	private void expectAddingMember(GroupId g, Contact c) throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, c);
 			will(returnValue(contactGroup));
@@ -214,8 +213,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void expectStoreSession(final Session session,
-			final MessageId storageId) throws Exception {
+	private void expectStoreSession(Session session, MessageId storageId)
+			throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(sessionEncoder).encodeSession(session);
 			will(returnValue(meta));
@@ -223,10 +222,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void expectGetSession(final Map<MessageId, BdfDictionary> results,
-			final SessionId sessionId, final GroupId contactGroupId)
-			throws Exception {
-		final BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
+	private void expectGetSession(Map<MessageId, BdfDictionary> results,
+			SessionId sessionId, GroupId contactGroupId) throws Exception {
+		BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
 		context.checking(new Expectations() {{
 			oneOf(sessionParser).getSessionQuery(sessionId);
 			will(returnValue(query));
@@ -327,9 +325,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		expectIncomingMessageWithSession(role, type, bdfSession);
 	}
 
-	private void expectIncomingMessageWithSession(final Role role,
-			final MessageType type, final BdfDictionary bdfSession)
-			throws Exception {
+	private void expectIncomingMessageWithSession(Role role, MessageType type,
+			BdfDictionary bdfSession) throws Exception {
 		expectParseMessageMetadata();
 		expectGetSession(oneResult, sessionId, contactGroup.getId());
 		Session session = expectHandleMessage(role, messageMetadata, bdfSession,
@@ -339,7 +336,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Nullable
 	private Session expectHandleFirstMessage(Role role,
-			final MessageMetadata messageMetadata, final MessageType type)
+			MessageMetadata messageMetadata, MessageType type)
 			throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(messageMetadata).getPrivateGroupId();
@@ -367,9 +364,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 	}
 
 	@Nullable
-	private Session expectHandleMessage(final Role role,
-			final MessageMetadata messageMetadata, final BdfDictionary state,
-			final MessageType type) throws Exception {
+	private Session expectHandleMessage(Role role,
+			MessageMetadata messageMetadata, BdfDictionary state,
+			MessageType type) throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(messageMetadata).getMessageType();
 			will(returnValue(type));
@@ -405,11 +402,10 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		}
 	}
 
-	private <S extends Session> void expectIndividualMessage(
-			final MessageType type, final ProtocolEngine<S> engine,
-			final S session) throws Exception {
+	private <S extends Session> void expectIndividualMessage(MessageType type,
+			ProtocolEngine<S> engine, S session) throws Exception {
 		if (type == INVITE) {
-			final InviteMessage msg = context.mock(InviteMessage.class);
+			InviteMessage msg = context.mock(InviteMessage.class);
 			context.checking(new Expectations() {{
 				oneOf(messageParser).parseInviteMessage(message, body);
 				will(returnValue(msg));
@@ -418,7 +414,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 				will(returnValue(session));
 			}});
 		} else if (type == JOIN) {
-			final JoinMessage msg = context.mock(JoinMessage.class);
+			JoinMessage msg = context.mock(JoinMessage.class);
 			context.checking(new Expectations() {{
 				oneOf(messageParser).parseJoinMessage(message, body);
 				will(returnValue(msg));
@@ -427,7 +423,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 				will(returnValue(session));
 			}});
 		} else if (type == LEAVE) {
-			final LeaveMessage msg = context.mock(LeaveMessage.class);
+			LeaveMessage msg = context.mock(LeaveMessage.class);
 			context.checking(new Expectations() {{
 				oneOf(messageParser).parseLeaveMessage(message, body);
 				will(returnValue(msg));
@@ -436,7 +432,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 				will(returnValue(session));
 			}});
 		} else if (type == ABORT) {
-			final AbortMessage msg = context.mock(AbortMessage.class);
+			AbortMessage msg = context.mock(AbortMessage.class);
 			context.checking(new Expectations() {{
 				oneOf(messageParser).parseAbortMessage(message, body);
 				will(returnValue(msg));
@@ -451,9 +447,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testSendFirstInvitation() throws Exception {
-		final String msg = "Invitation text for first invitation";
-		final long time = 42L;
-		final byte[] signature = getRandomBytes(42);
+		String msg = "Invitation text for first invitation";
+		long time = 42L;
+		byte[] signature = getRandomBytes(42);
 
 		expectGetSession(noResults, sessionId, contactGroup.getId());
 		context.checking(new Expectations() {{
@@ -482,9 +478,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testSendSubsequentInvitation() throws Exception {
-		final String msg = "Invitation text for subsequent invitation";
-		final long time = 43L;
-		final byte[] signature = getRandomBytes(43);
+		String msg = "Invitation text for subsequent invitation";
+		long time = 43L;
+		byte[] signature = getRandomBytes(43);
 
 		expectGetSession(oneResult, sessionId, contactGroup.getId());
 		context.checking(new Expectations() {{
@@ -513,7 +509,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test(expected = IllegalArgumentException.class)
 	public void testRespondToInvitationWithoutSession() throws Exception {
-		final SessionId sessionId = new SessionId(getRandomId());
+		SessionId sessionId = new SessionId(getRandomId());
 
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -563,8 +559,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		groupInvitationManager.respondToInvitation(contactId, pg, false);
 	}
 
-	private void expectRespondToInvitation(final SessionId sessionId,
-			final boolean accept) throws Exception {
+	private void expectRespondToInvitation(SessionId sessionId, boolean accept)
+			throws Exception {
 		expectGetSession(oneResult, sessionId, contactGroup.getId());
 		context.checking(new Expectations() {{
 			oneOf(db).startTransaction(false);
@@ -628,24 +624,24 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testGetInvitationMessages() throws Exception {
-		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<>();
+		BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
+		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
+		BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
+		Map<MessageId, BdfDictionary> results = new HashMap<>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
-		final long time1 = 1L, time2 = 2L;
-		final MessageMetadata messageMetadata1 =
+		long time1 = 1L, time2 = 2L;
+		MessageMetadata messageMetadata1 =
 				new MessageMetadata(INVITE, privateGroup.getId(), time1, true,
 						true, true, false, true);
-		final MessageMetadata messageMetadata2 =
+		MessageMetadata messageMetadata2 =
 				new MessageMetadata(JOIN, privateGroup.getId(), time2, true,
 						true, true, true, false);
-		final InviteMessage invite =
+		InviteMessage invite =
 				new InviteMessage(message.getId(), contactGroup.getId(),
 						privateGroup.getId(), time1, "name", author,
 						new byte[0], null, new byte[0]);
-		final PrivateGroup pg =
+		PrivateGroup pg =
 				new PrivateGroup(privateGroup, invite.getGroupName(),
 						invite.getCreator(), invite.getSalt());
 
@@ -701,28 +697,27 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testGetInvitations() throws Exception {
-		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<>();
+		BdfDictionary query = BdfDictionary.of(new BdfEntry("q", "u"));
+		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
+		BdfDictionary meta2 = BdfDictionary.of(new BdfEntry("m2", "e"));
+		Map<MessageId, BdfDictionary> results = new HashMap<>();
 		results.put(message.getId(), meta);
 		results.put(messageId2, meta2);
-		final Message message2 = new Message(messageId2, contactGroup.getId(),
+		Message message2 = new Message(messageId2, contactGroup.getId(),
 				0L, getRandomBytes(MESSAGE_HEADER_LENGTH + 1));
 		long time1 = 1L, time2 = 2L;
-		final String groupName = getRandomString(MAX_GROUP_NAME_LENGTH);
-		final byte[] salt = getRandomBytes(GROUP_SALT_LENGTH);
-		final InviteMessage inviteMessage1 =
+		String groupName = getRandomString(MAX_GROUP_NAME_LENGTH);
+		byte[] salt = getRandomBytes(GROUP_SALT_LENGTH);
+		InviteMessage inviteMessage1 =
 				new InviteMessage(message.getId(), contactGroup.getId(),
 						privateGroup.getId(), time1, groupName, author, salt,
 						null, getRandomBytes(5));
-		final InviteMessage inviteMessage2 =
-				new InviteMessage(message.getId(), contactGroup.getId(),
+		InviteMessage inviteMessage2 =
+				new InviteMessage(message2.getId(), contactGroup.getId(),
 						privateGroup.getId(), time2, groupName, author, salt,
 						null, getRandomBytes(5));
-		final PrivateGroup pg = new PrivateGroup(privateGroup, groupName,
+		PrivateGroup pg = new PrivateGroup(privateGroup, groupName,
 				author, salt);
-		final BdfList body2 = BdfList.of("body2");
 
 		context.checking(new Expectations() {{
 			oneOf(messageParser).getInvitesAvailableToAnswerQuery();
@@ -794,7 +789,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 				.isInvitationAllowed(contact, privateGroup.getId()));
 	}
 
-	private void expectIsInvitationAllowed(final CreatorState state)
+	private void expectIsInvitationAllowed(CreatorState state)
 			throws Exception {
 		expectGetSession(oneResult, sessionId, contactGroup.getId());
 		context.checking(new Expectations() {{
@@ -824,23 +819,23 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testRemovingGroupEndsSessions() throws Exception {
-		final Contact contact2 = new Contact(new ContactId(2), author,
+		Contact contact2 = new Contact(new ContactId(2), author,
 				author.getId(), true, true);
-		final Contact contact3 = new Contact(new ContactId(3), author,
+		Contact contact3 = new Contact(new ContactId(3), author,
 				author.getId(), true, true);
-		final Collection<Contact> contacts =
+		Collection<Contact> contacts =
 				Arrays.asList(contact, contact2, contact3);
 
-		final Group contactGroup2 = new Group(new GroupId(getRandomId()),
+		Group contactGroup2 = new Group(new GroupId(getRandomId()),
 				CLIENT_ID, getRandomBytes(5));
-		final Group contactGroup3 = new Group(new GroupId(getRandomId()),
+		Group contactGroup3 = new Group(new GroupId(getRandomId()),
 				CLIENT_ID, getRandomBytes(5));
 
-		final MessageId storageId2 = new MessageId(getRandomId());
-		final MessageId storageId3 = new MessageId(getRandomId());
-		final BdfDictionary bdfSession2 =
+		MessageId storageId2 = new MessageId(getRandomId());
+		MessageId storageId3 = new MessageId(getRandomId());
+		BdfDictionary bdfSession2 =
 				BdfDictionary.of(new BdfEntry("f2", "o"));
-		final BdfDictionary bdfSession3 =
+		BdfDictionary bdfSession3 =
 				BdfDictionary.of(new BdfEntry("f3", "o"));
 
 		expectGetSession(oneResult, sessionId, contactGroup.getId());
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
index 1a4377e40aa4e37f19434e6e3f7c1f7762fd1d51..136f34075cd6cb8086d8d8994d8bd9594797c9ab 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
@@ -295,8 +295,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 		assertEquals(meta, messageContext.getDictionary());
 	}
 
-	private void expectInviteMessage(final boolean exception) throws Exception {
-		final BdfList signed = BdfList.of(message.getTimestamp(),
+	private void expectInviteMessage(boolean exception) throws Exception {
+		BdfList signed = BdfList.of(message.getTimestamp(),
 				message.getGroupId(), privateGroup.getId());
 		context.checking(new Expectations() {{
 			oneOf(authorFactory).createAuthor(creatorName, creatorKey);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
index 1165c7ceeba4805a5cfb5cf14978b226b67ae985..f2eb56a256200c6d49c7d265d17562c281bf9741 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
@@ -127,13 +127,13 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 
 	@Test
 	public void testOnJoinActionFromInvited() throws Exception {
-		final JoinMessage properJoinMessage =
+		JoinMessage properJoinMessage =
 				new JoinMessage(messageId, contactGroupId, privateGroupId,
 						messageTimestamp, lastRemoteMessageId);
-		final long timestamp = 0L;
-		final GroupMessage joinGroupMessage =
+		long timestamp = 0L;
+		GroupMessage joinGroupMessage =
 				new GroupMessage(message, null, localAuthor);
-		final BdfDictionary meta = new BdfDictionary();
+		BdfDictionary meta = new BdfDictionary();
 
 		expectMarkMessageAvailableToAnswer(lastRemoteMessageId, false);
 		context.checking(new Expectations() {{
@@ -327,7 +327,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 		Author notCreator =
 				new Author(new AuthorId(getRandomId()), "Not Creator",
 						getRandomBytes(5));
-		final Contact notCreatorContact =
+		Contact notCreatorContact =
 				new Contact(contactId, notCreator, localAuthor.getId(), true,
 						true);
 
@@ -346,7 +346,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 	@Test
 	public void testOnInviteMessageFromStart() throws Exception {
 		InviteeSession session = getDefaultSession(START);
-		final InviteMessage properInviteMessage =
+		InviteMessage properInviteMessage =
 				new InviteMessage(new MessageId(getRandomId()), contactGroupId,
 						privateGroupId, session.getInviteTimestamp() + 1,
 						privateGroup.getName(), privateGroup.getCreator(),
@@ -717,9 +717,9 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 
 	// helper methods
 
-	private void expectMarkMessageAvailableToAnswer(final MessageId id,
-			final boolean available) throws Exception {
-		final BdfDictionary meta = new BdfDictionary();
+	private void expectMarkMessageAvailableToAnswer(MessageId id,
+			boolean available) throws Exception {
+		BdfDictionary meta = new BdfDictionary();
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder)
 					.setAvailableToAnswer(meta, available);
@@ -748,9 +748,9 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 	}
 
 	private void expectMarkInvitesUnavailableToAnswer() throws Exception {
-		final BdfDictionary query = BdfDictionary.of(new BdfEntry("query", ""));
-		final BdfDictionary meta = BdfDictionary.of(new BdfEntry("meta", ""));
-		final Map<MessageId, BdfDictionary> invites =
+		BdfDictionary query = BdfDictionary.of(new BdfEntry("query", ""));
+		BdfDictionary meta = BdfDictionary.of(new BdfEntry("meta", ""));
+		Map<MessageId, BdfDictionary> invites =
 				Collections.singletonMap(lastRemoteMessageId, meta);
 		context.checking(new Expectations() {{
 			oneOf(messageParser)
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
index fb3ebb49a71e89b40eb126a51ebe83bb20190f5c..d5d53168fa57a672bcdd48e187b08b9bbb6065df 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
@@ -660,7 +660,7 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
 
 	// helper methods
 
-	private void expectRelationshipRevealed(final boolean byContact)
+	private void expectRelationshipRevealed(boolean byContact)
 			throws Exception {
 		expectGetContactId();
 		context.checking(new Expectations() {{
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java
index ccad207b6d041f58e4cca92d5a71ffd99a727593..a7c76401723561a33efdd7dec370bfbcf5b697a9 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java
@@ -134,20 +134,20 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase {
 		testRemovingBlog(sessions);
 	}
 
-	private void testAddingContact(final Map<MessageId, BdfDictionary> sessions)
+	private void testAddingContact(Map<MessageId, BdfDictionary> sessions)
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final LocalAuthor localAuthor =
+		Transaction txn = new Transaction(null, false);
+		LocalAuthor localAuthor =
 				new LocalAuthor(localAuthorId, "Local Author",
 						getRandomBytes(MAX_PUBLIC_KEY_LENGTH),
 						getRandomBytes(MAX_PUBLIC_KEY_LENGTH),
 						System.currentTimeMillis());
-		final BdfDictionary meta = BdfDictionary
+		BdfDictionary meta = BdfDictionary
 				.of(new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt()));
-		final Group localBlogGroup =
+		Group localBlogGroup =
 				new Group(new GroupId(getRandomId()), BlogManager.CLIENT_ID,
 						getRandomBytes(42));
-		final Blog localBlog = new Blog(localBlogGroup, localAuthor, false);
+		Blog localBlog = new Blog(localBlogGroup, localAuthor, false);
 
 		context.checking(new Expectations() {{
 			oneOf(db).getContacts(txn);
@@ -174,14 +174,14 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase {
 		blogSharingManager.createLocalState(txn);
 	}
 
-	private void expectPreShareShareable(final Transaction txn,
-			final Contact contact, final Blog blog,
-			final Map<MessageId, BdfDictionary> sessions) throws Exception {
-		final Group contactGroup =
+	private void expectPreShareShareable(Transaction txn, Contact contact,
+			Blog blog, Map<MessageId, BdfDictionary> sessions)
+			throws Exception {
+		Group contactGroup =
 				new Group(new GroupId(getRandomId()), CLIENT_ID,
 						getRandomBytes(42));
-		final BdfDictionary sessionDict = new BdfDictionary();
-		final Message message =
+		BdfDictionary sessionDict = new BdfDictionary();
+		Message message =
 				new Message(new MessageId(getRandomId()), contactGroup.getId(),
 						42L, getRandomBytes(1337));
 		context.checking(new Expectations() {{
@@ -211,11 +211,11 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase {
 		}});
 	}
 
-	private void testRemovingBlog(final Map<MessageId, BdfDictionary> sessions)
+	private void testRemovingBlog(Map<MessageId, BdfDictionary> sessions)
 			throws Exception {
-		final Transaction txn = new Transaction(null, false);
-		final BdfDictionary sessionDict = new BdfDictionary();
-		final Session session = new Session(contactGroup.getId(), blog.getId());
+		Transaction txn = new Transaction(null, false);
+		BdfDictionary sessionDict = new BdfDictionary();
+		Session session = new Session(contactGroup.getId(), blog.getId());
 
 		context.checking(new Expectations() {{
 			oneOf(db).getContacts(txn);
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
index a660dd9acb33a776dad792a361acfb06ff16688f..c363f4330ea5d05b99c9efe983854822d021c654 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
@@ -175,7 +175,7 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 						invalidContent));
 	}
 
-	private void expectCreateBlog(final String name, final byte[] key) {
+	private void expectCreateBlog(String name, byte[] key) {
 		context.checking(new Expectations() {{
 			oneOf(authorFactory).createAuthor(name, key);
 			will(returnValue(author));
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
index 8ede843f15e1c72ab100709ca541dfb0430439cd..34599f4663a2ba4139f8266c104d177125891e7b 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
@@ -165,7 +165,7 @@ public class ForumSharingValidatorTest extends SharingValidatorTest {
 						invalidContent));
 	}
 
-	private void expectCreateForum(final String name) {
+	private void expectCreateForum(String name) {
 		context.checking(new Expectations() {{
 			oneOf(forumFactory).createForum(name, salt);
 			will(returnValue(forum));
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/SharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingValidatorTest.java
index f0c87e9d7319bcefa84432c4675c1a8990576456..20a9b95e7433e7fb7b065aeabb1ad2fdb7d355a7 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/SharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/SharingValidatorTest.java
@@ -143,7 +143,7 @@ public abstract class SharingValidatorTest extends ValidatorTestCase {
 				BdfList.of(ABORT.getValue(), groupId, previousMsgId, 123));
 	}
 
-	protected void expectEncodeMetadata(final MessageType type) {
+	protected void expectEncodeMetadata(MessageType type) {
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder)
 					.encodeMetadata(type, groupId, timestamp, false, false,