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 fe13a7106e05ac6be41362ca57a38631927b2f12..a9dab6370f0221813067a8410be81a650bf0c577 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
@@ -1,7 +1,9 @@
 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;
 
@@ -42,6 +44,7 @@ public class AndroidUtils {
 	public static String getBluetoothAddress(Context ctx,
 			BluetoothAdapter adapter) {
 		// Return the adapter's address if it's valid and not fake
+		@SuppressLint("HardwareIds")
 		String address = adapter.getAddress();
 		if (isValidBluetoothAddress(address)) return address;
 		// Return the address from settings if it's valid and not fake
@@ -96,14 +99,25 @@ public class AndroidUtils {
 		}
 	}
 
-	public static void deleteAppData(Context ctx) {
+	@SuppressLint("ApplySharedPref")
+	public static void deleteAppData(Context ctx, SharedPreferences... clear) {
+		// Clear and commit shared preferences
+		for (SharedPreferences prefs : clear) {
+			boolean cleared = prefs.edit().clear().commit();
+			if (LOG.isLoggable(INFO)) {
+				if (cleared) LOG.info("Cleared shared preferences");
+				else LOG.info("Could not clear shared preferences");
+			}
+		}
+		// Delete files, except lib and shared_prefs directories
 		File dataDir = new File(ctx.getApplicationInfo().dataDir);
 		if (LOG.isLoggable(INFO))
 			LOG.info("Deleting app data from " + dataDir.getAbsolutePath());
 		File[] children = dataDir.listFiles();
 		if (children != null) {
 			for (File child : children) {
-				if (!child.getName().equals("lib")) {
+				String name = child.getName();
+				if (!name.equals("lib") && !name.equals("shared_prefs")) {
 					if (LOG.isLoggable(INFO))
 						LOG.info("Deleting " + child.getAbsolutePath());
 					IoUtils.deleteFileOrDir(child);
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 5b0f7b46dd99aea829044970b2e8beb74b544007..b1a4168129798e5a9a4c5f48200f5842b444ab74 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,7 +1,9 @@
 package org.briarproject.briar.android.controller;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.support.v7.preference.PreferenceManager;
 
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
@@ -42,20 +44,18 @@ public class ConfigControllerImpl implements ConfigController {
 	}
 
 	@Override
+	@SuppressLint("ApplySharedPref")
 	public void storeEncryptedDatabaseKey(String hex) {
 		LOG.info("Storing database key in preferences");
-		SharedPreferences.Editor editor = briarPrefs.edit();
-		editor.putString(PREF_DB_KEY, hex);
-		editor.apply();
+		briarPrefs.edit().putString(PREF_DB_KEY, hex).commit();
 	}
 
 	@Override
 	public void deleteAccount(Context ctx) {
 		LOG.info("Deleting account");
-		SharedPreferences.Editor editor = briarPrefs.edit();
-		editor.clear();
-		editor.apply();
-		AndroidUtils.deleteAppData(ctx);
+		SharedPreferences defaultPrefs =
+				PreferenceManager.getDefaultSharedPreferences(ctx);
+		AndroidUtils.deleteAppData(ctx, briarPrefs, defaultPrefs);
 		AndroidUtils.logDataDirContents(ctx);
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
index 5e74be6b29dddac85dd76d522a30003986a8cb6b..d2dff6a28e35e88ed559dcb283831fb1788f0d0d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupActivity.java
@@ -38,6 +38,8 @@ public class SetupActivity extends BaseActivity
 		setContentView(R.layout.activity_fragment_container);
 
 		if (state == null) {
+			if (setupController.accountExists())
+				throw new AssertionError();
 			showInitialFragment(AuthorNameFragment.newInstance());
 		} else {
 			authorName = state.getString(STATE_KEY_AUTHOR_NAME);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java
index 7d130b26a2b4bd34d04e3e4cf1ca9990f2080ded..39215189787e6593f6d26deba61c57102a5f27c5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupController.java
@@ -3,7 +3,7 @@ package org.briarproject.briar.android.login;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 
 @NotNullByDefault
-public interface SetupController {
+public interface SetupController extends PasswordController {
 
 	void setSetupActivity(SetupActivity setupActivity);
 
@@ -13,8 +13,6 @@ public interface SetupController {
 
 	void setPassword(String password);
 
-	float estimatePasswordStrength(String password);
-
 	/**
 	 * This should be called after the author name has been set.
 	 */
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 9fee37d7091dbc8192633b20d96c55dc14bfdde4..9807c09c39f5811a37fe3d699a51bb7fc904bb6d 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
@@ -54,7 +54,8 @@ public class PasswordControllerImplTest extends BrambleMockTestCase {
 			oneOf(briarPrefs).edit();
 			will(returnValue(editor));
 			oneOf(editor).putString("key", newEncryptedHex);
-			oneOf(editor).apply();
+			will(returnValue(editor));
+			oneOf(editor).commit();
 		}});
 
 		PasswordControllerImpl p = new PasswordControllerImpl(briarPrefs,
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 b7052410262d32be6060cfeab951d4ab29fc729b..1aa79e74f80fbda9a087384781e45fd9f2e50a2b 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
@@ -81,7 +81,8 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 			oneOf(briarPrefs).edit();
 			will(returnValue(editor));
 			oneOf(editor).putString("key", encryptedHex);
-			oneOf(editor).apply();
+			will(returnValue(editor));
+			oneOf(editor).commit();
 		}});
 
 		SetupControllerImpl s = new SetupControllerImpl(briarPrefs,