diff --git a/.idea/runConfigurations/All_tests.xml b/.idea/runConfigurations/All_tests.xml
index 1882b817b1c49ce97019e5a1b6499a1d154e88c2..71857d973c843a84de15b6a8e9addfed60b743b4 100644
--- a/.idea/runConfigurations/All_tests.xml
+++ b/.idea/runConfigurations/All_tests.xml
@@ -21,6 +21,7 @@
     <method>
       <option name="RunConfigurationTask" enabled="true" run_configuration_name="All tests in bramble-api" run_configuration_type="AndroidJUnit" />
       <option name="RunConfigurationTask" enabled="true" run_configuration_name="All tests in bramble-core" run_configuration_type="AndroidJUnit" />
+      <option name="RunConfigurationTask" enabled="true" run_configuration_name="All tests in bramble-android" run_configuration_type="AndroidJUnit" />
       <option name="RunConfigurationTask" enabled="true" run_configuration_name="All tests in bramble-j2se" run_configuration_type="AndroidJUnit" />
       <option name="RunConfigurationTask" enabled="true" run_configuration_name="All tests in briar-core" run_configuration_type="AndroidJUnit" />
     </method>
diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle
index fe202931dc6b0d6792dd8cd161139653d9bdc3ce..a07147eb29acff68dfca64641733dd887712da7b 100644
--- a/bramble-android/build.gradle
+++ b/bramble-android/build.gradle
@@ -34,6 +34,14 @@ dependencies {
 
 	compileOnly 'javax.annotation:jsr250-api:1.0'
 
+	testImplementation project(path: ':bramble-api', configuration: 'testOutput')
+	testImplementation 'junit:junit:4.12'
+	testImplementation "org.jmock:jmock:2.8.2"
+	testImplementation "org.jmock:jmock-junit4:2.8.2"
+	testImplementation "org.jmock:jmock-legacy:2.8.2"
+	testImplementation "org.hamcrest:hamcrest-library:1.3"
+	testImplementation "org.hamcrest:hamcrest-core:1.3"
+
 	androidTestImplementation project(path: ':bramble-api', configuration: 'testOutput')
 	androidTestImplementation project(path: ':bramble-core', configuration: 'testOutput')
 	androidTestImplementation 'com.android.support.test:runner:1.0.2'
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java
index cb563508ae415e569d9fe81e5c225842b83f24ca..d2e2979b6a8dc67df616b4b04e59b7366f83a2a5 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java
@@ -2,6 +2,7 @@ package org.briarproject.bramble;
 
 import android.app.Application;
 
+import org.briarproject.bramble.account.AndroidAccountModule;
 import org.briarproject.bramble.plugin.tor.CircumventionProvider;
 import org.briarproject.bramble.plugin.tor.CircumventionProviderImpl;
 import org.briarproject.bramble.system.AndroidSystemModule;
@@ -12,6 +13,7 @@ import dagger.Module;
 import dagger.Provides;
 
 @Module(includes = {
+		AndroidAccountModule.class,
 		AndroidSystemModule.class
 })
 public class BrambleAndroidModule {
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fcaff509165f150c1af0437af3241bdcd10217e
--- /dev/null
+++ b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java
@@ -0,0 +1,96 @@
+package org.briarproject.bramble.account;
+
+import android.app.Application;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import org.briarproject.bramble.api.account.AccountManager;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.util.IoUtils;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+class AndroidAccountManager extends AccountManagerImpl
+		implements AccountManager {
+
+	private static final Logger LOG =
+			Logger.getLogger(AndroidAccountManager.class.getName());
+
+	private static final String PREF_DB_KEY = "key";
+
+	private final SharedPreferences briarPrefs;
+	private final Context appContext;
+
+	@Inject
+	AndroidAccountManager(DatabaseConfig databaseConfig,
+			SharedPreferences briarPrefs, Application app) {
+		super(databaseConfig);
+		this.briarPrefs = briarPrefs;
+		appContext = app.getApplicationContext();
+	}
+
+	@Override
+	@Nullable
+	public String getEncryptedDatabaseKey() {
+		String key = getDatabaseKeyFromPreferences();
+		if (key == null) key = super.getEncryptedDatabaseKey();
+		else migrateDatabaseKeyToFile(key);
+		return key;
+	}
+
+	@Nullable
+	private String getDatabaseKeyFromPreferences() {
+		String key = briarPrefs.getString(PREF_DB_KEY, null);
+		if (key == null) LOG.info("No database key in preferences");
+		else LOG.info("Found database key in preferences");
+		return key;
+	}
+
+	private void migrateDatabaseKeyToFile(String key) {
+		if (storeEncryptedDatabaseKey(key)) {
+			if (briarPrefs.edit().remove(PREF_DB_KEY).commit())
+				LOG.info("Database key migrated to file");
+			else LOG.warning("Database key not removed from preferences");
+		} else {
+			LOG.warning("Database key not migrated to file");
+		}
+	}
+
+	@Override
+	public void deleteAccount() {
+		super.deleteAccount();
+		SharedPreferences defaultPrefs =
+				PreferenceManager.getDefaultSharedPreferences(appContext);
+		deleteAppData(briarPrefs, defaultPrefs);
+	}
+
+	private void deleteAppData(SharedPreferences... clear) {
+		// Clear and commit shared preferences
+		for (SharedPreferences prefs : clear) {
+			if (!prefs.edit().clear().commit())
+				LOG.warning("Could not clear shared preferences");
+		}
+		// Delete files, except lib and shared_prefs directories
+		File dataDir = new File(appContext.getApplicationInfo().dataDir);
+		File[] children = dataDir.listFiles();
+		if (children == null) {
+			LOG.warning("Could not list files in app data dir");
+		} else {
+			for (File child : children) {
+				String name = child.getName();
+				if (!name.equals("lib") && !name.equals("shared_prefs")) {
+					IoUtils.deleteFileOrDir(child);
+				}
+			}
+		}
+		// Recreate the cache dir as some OpenGL drivers expect it to exist
+		if (!new File(dataDir, "cache").mkdir())
+			LOG.warning("Could not recreate cache dir");
+	}
+
+}
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountModule.java b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e74ef9ea8b52e33d332b2816e950eb724fa3456
--- /dev/null
+++ b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountModule.java
@@ -0,0 +1,18 @@
+package org.briarproject.bramble.account;
+
+import org.briarproject.bramble.api.account.AccountManager;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class AndroidAccountModule {
+
+	@Provides
+	@Singleton
+	AccountManager provideAccountManager(AndroidAccountManager accountManager) {
+		return accountManager;
+	}
+}
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java
index 9f9dd972d078b36d284c8b1fbfd7c1bfe56f8e15..5c0d073bd2da5b182026b7c3e069420a736dbda8 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java
@@ -3,7 +3,6 @@ package org.briarproject.bramble.util;
 import android.annotation.SuppressLint;
 import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.os.Build;
 import android.provider.Settings;
 
@@ -58,30 +57,6 @@ public class AndroidUtils {
 				&& !address.equals(FAKE_BLUETOOTH_ADDRESS);
 	}
 
-	public static void deleteAppData(Context ctx, SharedPreferences... clear) {
-		// Clear and commit shared preferences
-		for (SharedPreferences prefs : clear) {
-			if (!prefs.edit().clear().commit())
-				LOG.warning("Could not clear shared preferences");
-		}
-		// Delete files, except lib and shared_prefs directories
-		File dataDir = new File(ctx.getApplicationInfo().dataDir);
-		File[] children = dataDir.listFiles();
-		if (children == null) {
-			LOG.warning("Could not list files in app data dir");
-		} else {
-			for (File child : children) {
-				String name = child.getName();
-				if (!name.equals("lib") && !name.equals("shared_prefs")) {
-					IoUtils.deleteFileOrDir(child);
-				}
-			}
-		}
-		// Recreate the cache dir as some OpenGL drivers expect it to exist
-		if (!new File(dataDir, "cache").mkdir())
-			LOG.warning("Could not recreate cache dir");
-	}
-
 	public static File getReportDir(Context ctx) {
 		return ctx.getDir(STORED_REPORTS, MODE_PRIVATE);
 	}
diff --git a/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java b/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e529b698beb88bb1d86cfb561951356b9bff623
--- /dev/null
+++ b/bramble-android/src/test/java/org/briarproject/bramble/account/AndroidAccountManagerTest.java
@@ -0,0 +1,84 @@
+package org.briarproject.bramble.account;
+
+import android.app.Application;
+import android.content.SharedPreferences;
+
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.test.BrambleMockTestCase;
+import org.jmock.Expectations;
+import org.jmock.lib.legacy.ClassImposteriser;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.File;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory;
+import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
+import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
+import static org.briarproject.bramble.util.StringUtils.toHexString;
+
+public class AndroidAccountManagerTest extends BrambleMockTestCase {
+
+	private final SharedPreferences prefs =
+			context.mock(SharedPreferences.class);
+	private final DatabaseConfig databaseConfig =
+			context.mock(DatabaseConfig.class);
+	private final SharedPreferences.Editor
+			editor = context.mock(SharedPreferences.Editor.class);
+	private final Application app;
+
+	private final String encryptedKeyHex = toHexString(getRandomBytes(123));
+	private final File testDir = getTestDirectory();
+	private final File keyDir = new File(testDir, "key");
+	private final File keyFile = new File(keyDir, "db.key");
+	private final File keyBackupFile = new File(keyDir, "db.key.bak");
+
+	private AndroidAccountManager accountManager;
+
+	public AndroidAccountManagerTest() {
+		context.setImposteriser(ClassImposteriser.INSTANCE);
+		app = context.mock(Application.class);
+	}
+
+	@Before
+	public void setUp() {
+		context.checking(new Expectations() {{
+			allowing(databaseConfig).getDatabaseKeyDirectory();
+			will(returnValue(keyDir));
+			allowing(app).getApplicationContext();
+			will(returnValue(app));
+		}});
+		accountManager = new AndroidAccountManager(databaseConfig, prefs, app);
+	}
+
+	@Test
+	public void testDbKeyIsMigratedFromPreferencesToFile() {
+		context.checking(new Expectations() {{
+			oneOf(prefs).getString("key", null);
+			will(returnValue(encryptedKeyHex));
+			oneOf(prefs).edit();
+			will(returnValue(editor));
+			oneOf(editor).remove("key");
+			will(returnValue(editor));
+			oneOf(editor).commit();
+			will(returnValue(true));
+		}});
+
+		assertFalse(keyFile.exists());
+		assertFalse(keyBackupFile.exists());
+
+		assertEquals(encryptedKeyHex, accountManager.getEncryptedDatabaseKey());
+
+		assertTrue(keyFile.exists());
+		assertTrue(keyBackupFile.exists());
+	}
+
+	@After
+	public void tearDown() {
+		deleteTestDirectory(testDir);
+	}
+}
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
index e1efc91dc8480589a98744ad96ccc647842c0112..d0a39f21600f2be9f851f25ca429d93e4a1f4a9e 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java
@@ -19,4 +19,8 @@ public interface AccountManager {
 	String getEncryptedDatabaseKey();
 
 	boolean storeEncryptedDatabaseKey(String hex);
+
+	boolean accountExists();
+
+	void deleteAccount();
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
index d817c6d57e7e39dd4455a3f2050ec8f41a73ce67..07bc14eea22b5f93e68734cacd3bf778a9912148 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
@@ -1,6 +1,5 @@
 package org.briarproject.bramble;
 
-import org.briarproject.bramble.account.AccountModule;
 import org.briarproject.bramble.client.ClientModule;
 import org.briarproject.bramble.contact.ContactModule;
 import org.briarproject.bramble.crypto.CryptoExecutorModule;
@@ -27,7 +26,6 @@ import org.briarproject.bramble.versioning.VersioningModule;
 import dagger.Module;
 
 @Module(includes = {
-		AccountModule.class,
 		ClientModule.class,
 		ContactModule.class,
 		CryptoModule.class,
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
index cbc813d712728f70d5e165b14e0145ccf80ca0bc..17bfa3c88e0b0fb34096c12e72dd82e5f2021dbf 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java
@@ -5,6 +5,7 @@ import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
 import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.util.IoUtils;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -137,4 +138,17 @@ class AccountManagerImpl implements AccountManager {
 		out.flush();
 		out.close();
 	}
+
+	@Override
+	public boolean accountExists() {
+		return getEncryptedDatabaseKey() != null
+				&& databaseConfig.getDatabaseDirectory().isDirectory();
+	}
+
+	@Override
+	public void deleteAccount() {
+		LOG.info("Deleting account");
+		IoUtils.deleteFileOrDir(databaseConfig.getDatabaseKeyDirectory());
+		IoUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
+	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
index e19452a9ce134d3baedbfe0c8478726ee90da922..decc39a035ad4c2e16a5bb1671a8784538a74c21 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigController.java
@@ -1,7 +1,5 @@
 package org.briarproject.briar.android.controller;
 
-import android.content.Context;
-
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 
 import javax.annotation.Nullable;
@@ -14,7 +12,7 @@ public interface ConfigController {
 
 	boolean storeEncryptedDatabaseKey(String hex);
 
-	void deleteAccount(Context ctx);
+	void deleteAccount();
 
 	boolean accountExists();
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
index 671b6cb6a7f0057a5eca72abf122290fa91959d6..bd76c558c6ba4439c787ed7f00f5afd3b6ccce1c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/ConfigControllerImpl.java
@@ -1,64 +1,32 @@
 package org.briarproject.briar.android.controller;
 
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.support.v7.preference.PreferenceManager;
+import android.util.Log;
 
 import org.briarproject.bramble.api.account.AccountManager;
-import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
-import org.briarproject.bramble.util.AndroidUtils;
-
-import java.util.logging.Logger;
 
 import javax.annotation.Nullable;
 import javax.inject.Inject;
 
+// TODO: Remove this class, which just delegates to AccountManager
+
 @NotNullByDefault
 public class ConfigControllerImpl implements ConfigController {
 
-	private static final Logger LOG =
-			Logger.getLogger(ConfigControllerImpl.class.getName());
-
-	private static final String PREF_DB_KEY = "key";
-
-	private final SharedPreferences briarPrefs;
 	protected final AccountManager accountManager;
-	protected final DatabaseConfig databaseConfig;
 
 	@Inject
-	public ConfigControllerImpl(SharedPreferences briarPrefs,
-			AccountManager accountManager, DatabaseConfig databaseConfig) {
-		this.briarPrefs = briarPrefs;
+	public ConfigControllerImpl(AccountManager accountManager) {
+		// TODO: Remove
+		Log.i(getClass().getName(), "Using account manager "
+				+ accountManager.getClass().getName());
 		this.accountManager = accountManager;
-		this.databaseConfig = databaseConfig;
 	}
 
 	@Override
 	@Nullable
 	public String getEncryptedDatabaseKey() {
-		String key = getDatabaseKeyFromPreferences();
-		if (key == null) key = accountManager.getEncryptedDatabaseKey();
-		else migrateDatabaseKeyToFile(key);
-		return key;
-	}
-
-	@Nullable
-	private String getDatabaseKeyFromPreferences() {
-		String key = briarPrefs.getString(PREF_DB_KEY, null);
-		if (key == null) LOG.info("No database key in preferences");
-		else LOG.info("Found database key in preferences");
-		return key;
-	}
-
-	private void migrateDatabaseKeyToFile(String key) {
-		if (accountManager.storeEncryptedDatabaseKey(key)) {
-			if (briarPrefs.edit().remove(PREF_DB_KEY).commit())
-				LOG.info("Database key migrated to file");
-			else LOG.warning("Database key not removed from preferences");
-		} else {
-			LOG.warning("Database key not migrated to file");
-		}
+		return accountManager.getEncryptedDatabaseKey();
 	}
 
 	@Override
@@ -67,17 +35,13 @@ public class ConfigControllerImpl implements ConfigController {
 	}
 
 	@Override
-	public void deleteAccount(Context ctx) {
-		LOG.info("Deleting account");
-		SharedPreferences defaultPrefs =
-				PreferenceManager.getDefaultSharedPreferences(ctx);
-		AndroidUtils.deleteAppData(ctx, briarPrefs, defaultPrefs);
+	public void deleteAccount() {
+		accountManager.deleteAccount();
 	}
 
 	@Override
 	public boolean accountExists() {
-		return getEncryptedDatabaseKey() != null &&
-				databaseConfig.getDatabaseDirectory().isDirectory();
+		return accountManager.hasDatabaseKey();
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
index 5504132b427d48ed6ab423c72a72d528239950eb..6de30bf7fc34e2798a0c31443a574dd3e362d116 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java
@@ -105,7 +105,7 @@ public class PasswordActivity extends BaseActivity {
 	}
 
 	private void deleteAccount() {
-		passwordController.deleteAccount(this);
+		passwordController.deleteAccount();
 		Localizer.reinitialize();
 		UiUtils.setTheme(this, getString(R.string.pref_theme_light_value));
 		setResult(RESULT_CANCELED);
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 5a3cd5b8de72427e9a169ae6fd83ef285a89427f..23f47945051d6542c116e1f84fff0710cd48ea7f 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
@@ -1,13 +1,10 @@
 package org.briarproject.briar.android.login;
 
-import android.content.SharedPreferences;
-
 import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.CryptoExecutor;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.briarproject.bramble.api.crypto.SecretKey;
-import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.util.StringUtils;
 import org.briarproject.briar.android.controller.ConfigControllerImpl;
@@ -33,11 +30,10 @@ public class PasswordControllerImpl extends ConfigControllerImpl
 	private final PasswordStrengthEstimator strengthEstimator;
 
 	@Inject
-	PasswordControllerImpl(SharedPreferences briarPrefs,
-			AccountManager accountManager, DatabaseConfig databaseConfig,
+	PasswordControllerImpl(AccountManager accountManager,
 			@CryptoExecutor Executor cryptoExecutor, CryptoComponent crypto,
 			PasswordStrengthEstimator strengthEstimator) {
-		super(briarPrefs, accountManager, databaseConfig);
+		super(accountManager);
 		this.cryptoExecutor = cryptoExecutor;
 		this.crypto = crypto;
 		this.strengthEstimator = strengthEstimator;
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
index a2395d894900ec0e6437a3d5813ad268460f4ec0..c4ce4ae2c964f37466ed1a09a5faac6c123c74c2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupControllerImpl.java
@@ -1,6 +1,5 @@
 package org.briarproject.briar.android.login;
 
-import android.content.SharedPreferences;
 import android.support.annotation.Nullable;
 
 import org.briarproject.bramble.api.account.AccountManager;
@@ -8,7 +7,6 @@ import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.CryptoExecutor;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.briarproject.bramble.api.crypto.SecretKey;
-import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.identity.IdentityManager;
 import org.briarproject.bramble.api.identity.LocalAuthor;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
@@ -33,13 +31,11 @@ public class SetupControllerImpl extends PasswordControllerImpl
 	private volatile SetupActivity setupActivity;
 
 	@Inject
-	SetupControllerImpl(SharedPreferences briarPrefs,
-			AccountManager accountManager, DatabaseConfig databaseConfig,
+	SetupControllerImpl(AccountManager accountManager,
 			@CryptoExecutor Executor cryptoExecutor, CryptoComponent crypto,
 			PasswordStrengthEstimator strengthEstimator,
 			IdentityManager identityManager) {
-		super(briarPrefs, accountManager, databaseConfig, cryptoExecutor,
-				crypto, strengthEstimator);
+		super(accountManager, cryptoExecutor, crypto, strengthEstimator);
 		this.identityManager = identityManager;
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
index dd122e1498b958338de9931e462e13f8e90e1d48..fb2cd920ff2b874bb8db4798ef0e6732eebb59ef 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java
@@ -94,7 +94,7 @@ public class PanicResponderActivity extends BriarActivity {
 
 	private void deleteAllData() {
 		androidExecutor.runOnBackgroundThread(() -> {
-			configController.deleteAccount(PanicResponderActivity.this);
+			configController.deleteAccount();
 			// TODO somehow delete/shred the database more thoroughly
 			PanicResponder.deleteAllAppData(PanicResponderActivity.this);
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
index d207508a40775081f98e990540caccf91d9e9906..8f3dd28828ca4330a2b69a1c34c3b879fa4a9613 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java
@@ -69,7 +69,7 @@ public class SplashScreenActivity extends BaseActivity {
 				startActivity(new Intent(this, OpenDatabaseActivity.class));
 			} else {
 				LOG.info("Account does not exist");
-				configController.deleteAccount(this);
+				configController.deleteAccount();
 				startActivity(new Intent(this, SetupActivity.class));
 			}
 		}
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java
deleted file mode 100644
index 06f1165ab96a045b71a6f27c3809c7c68eb5a1c2..0000000000000000000000000000000000000000
--- a/briar-android/src/test/java/org/briarproject/briar/android/controller/ConfigControllerImplTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.briarproject.briar.android.controller;
-
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-
-import org.briarproject.bramble.api.account.AccountManager;
-import org.briarproject.bramble.api.db.DatabaseConfig;
-import org.briarproject.bramble.test.BrambleMockTestCase;
-import org.jmock.Expectations;
-import org.junit.Test;
-
-import static junit.framework.Assert.assertEquals;
-import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
-import static org.briarproject.bramble.util.StringUtils.toHexString;
-
-public class ConfigControllerImplTest extends BrambleMockTestCase {
-
-	private final SharedPreferences prefs =
-			context.mock(SharedPreferences.class);
-	private final AccountManager accountManager =
-			context.mock(AccountManager.class);
-	private final DatabaseConfig databaseConfig =
-			context.mock(DatabaseConfig.class);
-	private final Editor editor = context.mock(Editor.class);
-
-	private final String encryptedKeyHex = toHexString(getRandomBytes(123));
-
-	@Test
-	public void testDbKeyIsMigratedFromPreferencesToFile() {
-		context.checking(new Expectations() {{
-			oneOf(prefs).getString("key", null);
-			will(returnValue(encryptedKeyHex));
-			oneOf(accountManager).storeEncryptedDatabaseKey(encryptedKeyHex);
-			will(returnValue(true));
-			oneOf(prefs).edit();
-			will(returnValue(editor));
-			oneOf(editor).remove("key");
-			will(returnValue(editor));
-			oneOf(editor).commit();
-			will(returnValue(true));
-		}});
-
-		ConfigControllerImpl c = new ConfigControllerImpl(prefs, accountManager,
-				databaseConfig);
-
-		assertEquals(encryptedKeyHex, c.getEncryptedDatabaseKey());
-	}
-
-}
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
index 9c64083cdabc5701cd20f106f43df8e520e35b50..3c55a199c34eec83663962fdf06f174b57317c77 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordControllerImplTest.java
@@ -1,11 +1,8 @@
 package org.briarproject.briar.android.login;
 
-import android.content.SharedPreferences;
-
 import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.test.BrambleMockTestCase;
 import org.briarproject.bramble.test.ImmediateExecutor;
 import org.jmock.Expectations;
@@ -22,12 +19,8 @@ import static org.briarproject.bramble.util.StringUtils.toHexString;
 
 public class PasswordControllerImplTest extends BrambleMockTestCase {
 
-	private final SharedPreferences briarPrefs =
-			context.mock(SharedPreferences.class);
 	private final AccountManager accountManager =
 			context.mock(AccountManager.class);
-	private final DatabaseConfig databaseConfig =
-			context.mock(DatabaseConfig.class);
 	private final CryptoComponent crypto = context.mock(CryptoComponent.class);
 	private final PasswordStrengthEstimator estimator =
 			context.mock(PasswordStrengthEstimator.class);
@@ -46,8 +39,6 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 	public void testChangePasswordReturnsTrue() {
 		context.checking(new Expectations() {{
 			// Look up the encrypted DB key
-			oneOf(briarPrefs).getString("key", null);
-			will(returnValue(null));
 			oneOf(accountManager).getEncryptedDatabaseKey();
 			will(returnValue(oldEncryptedKeyHex));
 			// Decrypt and re-encrypt the key
@@ -60,9 +51,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 			will(returnValue(true));
 		}});
 
-		PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs,
-				accountManager, databaseConfig, cryptoExecutor, crypto,
-				estimator);
+		PasswordControllerImpl p = new PasswordControllerImpl(accountManager,
+				cryptoExecutor, crypto, estimator);
 
 		AtomicBoolean capturedResult = new AtomicBoolean(false);
 		p.changePassword(oldPassword, newPassword, capturedResult::set);
@@ -73,8 +63,6 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 	public void testChangePasswordReturnsFalseIfOldPasswordIsWrong() {
 		context.checking(new Expectations() {{
 			// Look up the encrypted DB key
-			oneOf(briarPrefs).getString("key", null);
-			will(returnValue(null));
 			oneOf(accountManager).getEncryptedDatabaseKey();
 			will(returnValue(oldEncryptedKeyHex));
 			// Try to decrypt the key - the password is wrong
@@ -82,9 +70,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 			will(returnValue(null));
 		}});
 
-		PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs,
-				accountManager, databaseConfig, cryptoExecutor, crypto,
-				estimator);
+		PasswordControllerImpl p = new PasswordControllerImpl(accountManager,
+				cryptoExecutor, crypto, estimator);
 
 		AtomicBoolean capturedResult = new AtomicBoolean(true);
 		p.changePassword(oldPassword, newPassword, capturedResult::set);
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
index 4671bb1c4741797511d4c02a8b4f0ededadc91f5..98d342389561f8b35357a1e7ca649d74cbc4dccc 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupControllerImplTest.java
@@ -1,12 +1,9 @@
 package org.briarproject.briar.android.login;
 
-import android.content.SharedPreferences;
-
 import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
 import org.briarproject.bramble.api.crypto.SecretKey;
-import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.identity.IdentityManager;
 import org.briarproject.bramble.api.identity.LocalAuthor;
 import org.briarproject.bramble.test.BrambleMockTestCase;
@@ -28,12 +25,8 @@ import static org.briarproject.bramble.util.StringUtils.toHexString;
 
 public class SetupControllerImplTest extends BrambleMockTestCase {
 
-	private final SharedPreferences briarPrefs =
-			context.mock(SharedPreferences.class);
 	private final AccountManager accountManager =
 			context.mock(AccountManager.class);
-	private final DatabaseConfig databaseConfig =
-			context.mock(DatabaseConfig.class);
 	private final CryptoComponent crypto = context.mock(CryptoComponent.class);
 	private final PasswordStrengthEstimator estimator =
 			context.mock(PasswordStrengthEstimator.class);
@@ -84,9 +77,8 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 			oneOf(accountManager).setDatabaseKey(key);
 		}});
 
-		SetupControllerImpl s = new SetupControllerImpl(briarPrefs,
-				accountManager, databaseConfig, cryptoExecutor, crypto,
-				estimator, identityManager);
+		SetupControllerImpl s = new SetupControllerImpl(accountManager,
+				cryptoExecutor, crypto, estimator, identityManager);
 		s.setSetupActivity(setupActivity);
 
 		AtomicBoolean called = new AtomicBoolean(false);