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 15edba9c49be5d825c2944d19422d30264b20700..fe13a7106e05ac6be41362ca57a38631927b2f12 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
@@ -6,15 +6,22 @@ import android.os.Build;
 import android.provider.Settings;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Scanner;
+import java.util.logging.Logger;
 
 import static android.content.Context.MODE_PRIVATE;
+import static java.util.logging.Level.INFO;
 
 public class AndroidUtils {
 
+	private static final Logger LOG =
+			Logger.getLogger(AndroidUtils.class.getName());
+
 	// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
 	private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";
 
@@ -51,17 +58,66 @@ public class AndroidUtils {
 				&& !address.equals(FAKE_BLUETOOTH_ADDRESS);
 	}
 
+	public static void logDataDirContents(Context ctx) {
+		if (LOG.isLoggable(INFO)) {
+			LOG.info("Contents of data directory:");
+			logFileOrDir(new File(ctx.getApplicationInfo().dataDir));
+		}
+	}
+
+	private static void logFileOrDir(File f) {
+		LOG.info(f.getAbsolutePath() + " " + f.length());
+		if (f.isDirectory()) {
+			File[] children = f.listFiles();
+			if (children == null) {
+				LOG.info("Could not list files in " + f.getAbsolutePath());
+			} else {
+				for (File child : children) logFileOrDir(child);
+			}
+		}
+	}
+
+	public static File getSharedPrefsFile(Context ctx, String name) {
+		File dataDir = new File(ctx.getApplicationInfo().dataDir);
+		File prefsDir = new File(dataDir, "shared_prefs");
+		return new File(prefsDir, name + ".xml");
+	}
+
+	public static void logFileContents(File f) {
+		if (LOG.isLoggable(INFO)) {
+			LOG.info("Contents of " + f.getAbsolutePath() + ":");
+			try {
+				Scanner s = new Scanner(f);
+				while (s.hasNextLine()) LOG.info(s.nextLine());
+				s.close();
+			} catch (FileNotFoundException e) {
+				LOG.info(f.getAbsolutePath() + " not found");
+			}
+		}
+	}
+
 	public static void deleteAppData(Context ctx) {
 		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"))
+				if (!child.getName().equals("lib")) {
+					if (LOG.isLoggable(INFO))
+						LOG.info("Deleting " + child.getAbsolutePath());
 					IoUtils.deleteFileOrDir(child);
+				}
 			}
+		} else if (LOG.isLoggable(INFO)) {
+			LOG.info("Could not list files in " + dataDir.getAbsolutePath());
 		}
 		// Recreate the cache dir as some OpenGL drivers expect it to exist
-		new File(dataDir, "cache").mkdir();
+		boolean recreated = new File(dataDir, "cache").mkdir();
+		if (LOG.isLoggable(INFO)) {
+			if (recreated) LOG.info("Recreated cache dir");
+			else LOG.info("Could not recreate cache dir");
+		}
 	}
 
 	public static File getReportDir(Context ctx) {
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
index 13b05d84ca7774d3a1173c34fba7d72bb2215ab1..0d4b3d8e0fc931f322a0a1f23f09478587641e02 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
@@ -9,25 +9,37 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
+import java.util.logging.Logger;
 
 import javax.annotation.Nullable;
 
+import static java.util.logging.Level.INFO;
+
 @NotNullByDefault
 public class IoUtils {
 
+	private static final Logger LOG = Logger.getLogger(IoUtils.class.getName());
+
 	public static void deleteFileOrDir(File f) {
 		if (f.isFile()) {
-			f.delete();
+			delete(f);
 		} else if (f.isDirectory()) {
 			File[] children = f.listFiles();
 			if (children != null)
 				for (File child : children) deleteFileOrDir(child);
-			f.delete();
+			delete(f);
+		}
+	}
+
+	private static void delete(File f) {
+		boolean deleted = f.delete();
+		if (LOG.isLoggable(INFO)) {
+			if (deleted) LOG.info("Deleted " + f.getAbsolutePath());
+			else LOG.info("Could not delete " + f.getAbsolutePath());
 		}
 	}
 
-	public static void copyAndClose(InputStream in, OutputStream out)
-			throws IOException {
+	public static void copyAndClose(InputStream in, OutputStream out) {
 		byte[] buf = new byte[4096];
 		try {
 			while (true) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidDatabaseConfig.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidDatabaseConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..2fe5df11ae0ae6273bcf28b2be1fbeb3089ddd28
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidDatabaseConfig.java
@@ -0,0 +1,94 @@
+package org.briarproject.briar.android;
+
+import org.briarproject.bramble.api.crypto.SecretKey;
+import org.briarproject.bramble.api.db.DatabaseConfig;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+
+import static java.util.logging.Level.INFO;
+
+@NotNullByDefault
+class AndroidDatabaseConfig implements DatabaseConfig {
+
+	private static final Logger LOG =
+			Logger.getLogger(AndroidDatabaseConfig.class.getName());
+
+	private final File dir;
+
+	@Nullable
+	private volatile SecretKey key = null;
+	@Nullable
+	private volatile String nickname = null;
+
+	AndroidDatabaseConfig(File dir) {
+		this.dir = dir;
+	}
+
+	@Override
+	public boolean databaseExists() {
+		// FIXME should not run on UiThread #620
+		if (!dir.isDirectory()) {
+			if (LOG.isLoggable(INFO))
+				LOG.info(dir.getAbsolutePath() + " is not a directory");
+			return false;
+		}
+		File[] files = dir.listFiles();
+		if (LOG.isLoggable(INFO)) {
+			if (files == null) {
+				LOG.info("Could not list files in " + dir.getAbsolutePath());
+			} else {
+				LOG.info("Files in " + dir.getAbsolutePath() + ":");
+				for (File f : files) LOG.info(f.getName());
+			}
+			LOG.info("Database exists: " + (files != null && files.length > 0));
+		}
+		return files != null && files.length > 0;
+	}
+
+	@Override
+	public File getDatabaseDirectory() {
+		File dir = this.dir;
+		if (LOG.isLoggable(INFO))
+			LOG.info("Database directory: " + dir.getAbsolutePath());
+		return dir;
+	}
+
+	@Override
+	public void setEncryptionKey(SecretKey key) {
+		LOG.info("Setting database key");
+		this.key = key;
+	}
+
+	@Override
+	public void setLocalAuthorName(String nickname) {
+		LOG.info("Setting local author name");
+		this.nickname = nickname;
+	}
+
+	@Override
+	@Nullable
+	public String getLocalAuthorName() {
+		String nickname = this.nickname;
+		if (LOG.isLoggable(INFO))
+			LOG.info("Local author name has been set: " + (nickname != null));
+		return nickname;
+	}
+
+	@Override
+	@Nullable
+	public SecretKey getEncryptionKey() {
+		SecretKey key = this.key;
+		if (LOG.isLoggable(INFO))
+			LOG.info("Database key has been set: " + (key != null));
+		return key;
+	}
+
+	@Override
+	public long getMaxSize() {
+		return Long.MAX_VALUE;
+	}
+}
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 67af25ac69474c763f47a3ec09f3d483afec0feb..4060305a63ad08722b82debd065408a91b82ab81 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
@@ -5,7 +5,6 @@ import android.content.SharedPreferences;
 
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PublicKey;
-import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
@@ -23,7 +22,6 @@ import org.briarproject.briar.api.android.ScreenFilterMonitor;
 import java.io.File;
 import java.security.GeneralSecurityException;
 
-import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
@@ -87,51 +85,7 @@ public class AppModule {
 		File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE);
 		@MethodsNotNullByDefault
 		@ParametersNotNullByDefault
-		DatabaseConfig databaseConfig = new DatabaseConfig() {
-
-			private volatile SecretKey key;
-			private volatile String nickname;
-
-			@Override
-			public boolean databaseExists() {
-				// FIXME should not run on UiThread #620
-				if (!dir.isDirectory()) return false;
-				File[] files = dir.listFiles();
-				return files != null && files.length > 0;
-			}
-
-			@Override
-			public File getDatabaseDirectory() {
-				return dir;
-			}
-
-			@Override
-			public void setEncryptionKey(SecretKey key) {
-				this.key = key;
-			}
-
-			@Override
-			public void setLocalAuthorName(String nickname) {
-				this.nickname = nickname;
-			}
-
-			@Override
-			@Nullable
-			public String getLocalAuthorName() {
-				return nickname;
-			}
-
-			@Override
-			@Nullable
-			public SecretKey getEncryptionKey() {
-				return key;
-			}
-
-			@Override
-			public long getMaxSize() {
-				return Long.MAX_VALUE;
-			}
-		};
+		DatabaseConfig databaseConfig = new AndroidDatabaseConfig(dir);
 		return databaseConfig;
 	}
 
@@ -204,4 +158,5 @@ public class AppModule {
 		lifecycleManager.registerService(dozeWatchdog);
 		return dozeWatchdog;
 	}
+
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/ScreenFilterMonitorImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/ScreenFilterMonitorImpl.java
index fa9122c451fad394af99141c7b3716951b5897cd..ebc14bde54334bcb34103f92fd5bc3315c64e663 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/ScreenFilterMonitorImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/ScreenFilterMonitorImpl.java
@@ -14,7 +14,6 @@ import android.content.pm.Signature;
 import android.support.annotation.UiThread;
 
 import org.briarproject.bramble.api.lifecycle.Service;
-import org.briarproject.bramble.api.lifecycle.ServiceException;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.system.AndroidExecutor;
 import org.briarproject.bramble.util.StringUtils;
@@ -196,7 +195,7 @@ class ScreenFilterMonitorImpl implements ScreenFilterMonitor, Service {
 	}
 
 	@Override
-	public void startService() throws ServiceException {
+	public void startService() {
 		if (used.getAndSet(true)) throw new IllegalStateException();
 		androidExecutor.runOnUiThread(() -> {
 			IntentFilter filter = new IntentFilter();
@@ -212,7 +211,7 @@ class ScreenFilterMonitorImpl implements ScreenFilterMonitor, Service {
 	}
 
 	@Override
-	public void stopService() throws ServiceException {
+	public void stopService() {
 		androidExecutor.runOnUiThread(() -> {
 			if (receiver != null) app.unregisterReceiver(receiver);
 		});
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 3c19794441e0d0b3e335b824de0530c13587e810..5b0f7b46dd99aea829044970b2e8beb74b544007 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
@@ -7,12 +7,19 @@ 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;
 
+import static java.util.logging.Level.INFO;
+
 @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;
@@ -23,17 +30,20 @@ public class ConfigControllerImpl implements ConfigController {
 			DatabaseConfig databaseConfig) {
 		this.briarPrefs = briarPrefs;
 		this.databaseConfig = databaseConfig;
-
 	}
 
 	@Override
 	@Nullable
 	public String getEncryptedDatabaseKey() {
-		return briarPrefs.getString(PREF_DB_KEY, null);
+		String key = briarPrefs.getString(PREF_DB_KEY, null);
+		if (LOG.isLoggable(INFO))
+			LOG.info("Got database key from preferences: " + (key != null));
+		return key;
 	}
 
 	@Override
 	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();
@@ -41,21 +51,27 @@ public class ConfigControllerImpl implements ConfigController {
 
 	@Override
 	public void deleteAccount(Context ctx) {
+		LOG.info("Deleting account");
 		SharedPreferences.Editor editor = briarPrefs.edit();
 		editor.clear();
 		editor.apply();
 		AndroidUtils.deleteAppData(ctx);
+		AndroidUtils.logDataDirContents(ctx);
 	}
 
 	@Override
 	public boolean accountExists() {
 		String hex = getEncryptedDatabaseKey();
-		return hex != null && databaseConfig.databaseExists();
+		boolean exists = hex != null && databaseConfig.databaseExists();
+		if (LOG.isLoggable(INFO)) LOG.info("Account exists: " + exists);
+		return exists;
 	}
 
 	@Override
 	public boolean accountSignedIn() {
-		return databaseConfig.getEncryptionKey() != null;
+		boolean signedIn = databaseConfig.getEncryptionKey() != null;
+		if (LOG.isLoggable(INFO)) LOG.info("Signed in: " + signedIn);
+		return signedIn;
 	}
 
 }
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 a491aee7a7c14db7c8edd1b1d548acc6e2b4a1a7..97814637bf7db30f53c646e93ffa4810b14b912f 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
@@ -9,10 +9,12 @@ 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.AndroidUtils;
 import org.briarproject.briar.android.controller.handler.ResultHandler;
 import org.briarproject.briar.android.controller.handler.UiResultHandler;
 
 import java.util.concurrent.Executor;
+import java.util.logging.Logger;
 
 import javax.inject.Inject;
 
@@ -20,8 +22,11 @@ import javax.inject.Inject;
 public class SetupControllerImpl extends PasswordControllerImpl
 		implements SetupController {
 
+	private static final Logger LOG =
+			Logger.getLogger(SetupControllerImpl.class.getName());
+
 	@Nullable
-	private SetupActivity setupActivity;
+	private volatile SetupActivity setupActivity;
 
 	@Inject
 	SetupControllerImpl(SharedPreferences briarPrefs,
@@ -39,6 +44,7 @@ public class SetupControllerImpl extends PasswordControllerImpl
 
 	@Override
 	public boolean needToShowDozeFragment() {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		return DozeView.needsToBeShown(setupActivity) ||
 				HuaweiView.needsToBeShown(setupActivity);
@@ -46,31 +52,35 @@ public class SetupControllerImpl extends PasswordControllerImpl
 
 	@Override
 	public void setAuthorName(String authorName) {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		setupActivity.setAuthorName(authorName);
 	}
 
 	@Override
 	public void setPassword(String password) {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		setupActivity.setPassword(password);
 	}
 
 	@Override
 	public void showPasswordFragment() {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		setupActivity.showPasswordFragment();
 	}
 
 	@Override
 	public void showDozeFragment() {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		setupActivity.showDozeFragment();
 	}
 
 	@Override
 	public void createAccount() {
-		if (setupActivity == null) throw new IllegalStateException();
+		SetupActivity setupActivity = this.setupActivity;
 		UiResultHandler<Void> resultHandler =
 				new UiResultHandler<Void>(setupActivity) {
 					@Override
@@ -85,17 +95,22 @@ public class SetupControllerImpl extends PasswordControllerImpl
 
 	// Package access for testing
 	void createAccount(ResultHandler<Void> resultHandler) {
+		SetupActivity setupActivity = this.setupActivity;
 		if (setupActivity == null) throw new IllegalStateException();
 		String authorName = setupActivity.getAuthorName();
 		if (authorName == null) throw new IllegalStateException();
 		String password = setupActivity.getPassword();
 		if (password == null) throw new IllegalStateException();
 		cryptoExecutor.execute(() -> {
+			LOG.info("Creating account");
+			AndroidUtils.logDataDirContents(setupActivity);
 			databaseConfig.setLocalAuthorName(authorName);
 			SecretKey key = crypto.generateSecretKey();
 			databaseConfig.setEncryptionKey(key);
 			String hex = encryptDatabaseKey(key, password);
 			storeEncryptedDatabaseKey(hex);
+			LOG.info("Created account");
+			AndroidUtils.logDataDirContents(setupActivity);
 			resultHandler.onResult(null);
 		});
 	}
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 f21f460aa17bcc17d27da0a3db4f9c9b6627f6b2..fecce62510914bed28d2eaea44a74044f979b9d5 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
@@ -8,6 +8,7 @@ import android.support.v7.preference.PreferenceManager;
 import android.transition.Fade;
 
 import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.bramble.util.AndroidUtils;
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.activity.ActivityComponent;
 import org.briarproject.briar.android.activity.BaseActivity;
@@ -44,9 +45,11 @@ public class SplashScreenActivity extends BaseActivity {
 		setContentView(R.layout.splash);
 
 		if (configController.accountSignedIn()) {
+			LOG.info("Already signed in, not showing splash screen");
 			startActivity(new Intent(this, OpenDatabaseActivity.class));
 			finish();
 		} else {
+			LOG.info("Showing splash screen");
 			new Handler().postDelayed(() -> {
 				startNextActivity();
 				supportFinishAfterTransition();
@@ -64,9 +67,12 @@ public class SplashScreenActivity extends BaseActivity {
 			LOG.info("Expired");
 			startActivity(new Intent(this, ExpiredActivity.class));
 		} else {
+			AndroidUtils.logDataDirContents(this);
 			if (configController.accountExists()) {
+				LOG.info("Account exists");
 				startActivity(new Intent(this, OpenDatabaseActivity.class));
 			} else {
+				LOG.info("Account does not exist");
 				configController.deleteAccount(this);
 				startActivity(new Intent(this, SetupActivity.class));
 			}
@@ -74,8 +80,10 @@ public class SplashScreenActivity extends BaseActivity {
 	}
 
 	private void setPreferencesDefaults() {
-		androidExecutor.runOnBackgroundThread(() ->
-				PreferenceManager.setDefaultValues(SplashScreenActivity.this,
-						R.xml.panic_preferences, false));
+		androidExecutor.runOnBackgroundThread(() -> {
+ 			PreferenceManager.setDefaultValues(SplashScreenActivity.this,
+					R.xml.panic_preferences, false);
+			LOG.info("Finished setting panic preference defaults");
+		});
 	}
 }
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 6fe3f42c8910704e76144b0e73e0e4ff8969a4b5..b7052410262d32be6060cfeab951d4ab29fc729b 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,6 +1,7 @@
 package org.briarproject.briar.android.login;
 
 import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
 
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PasswordStrengthEstimator;
@@ -8,10 +9,13 @@ import org.briarproject.bramble.api.crypto.SecretKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
 import org.briarproject.bramble.test.BrambleMockTestCase;
 import org.briarproject.bramble.test.ImmediateExecutor;
+import org.briarproject.bramble.test.TestUtils;
 import org.jmock.Expectations;
 import org.jmock.lib.legacy.ClassImposteriser;
+import org.junit.After;
 import org.junit.Test;
 
+import java.io.File;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -40,6 +44,7 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 	private final String encryptedHex = "010203";
 	private final byte[] encryptedBytes = new byte[] {1, 2, 3};
 	private final SecretKey key = getSecretKey();
+	private final File testDir = TestUtils.getTestDirectory();
 
 	public SetupControllerImplTest() {
 		context.setImposteriser(ClassImposteriser.INSTANCE);
@@ -50,6 +55,11 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 	@SuppressWarnings("ResultOfMethodCallIgnored")
 	public void testCreateAccount() {
 		context.checking(new Expectations() {{
+			// Allow the contents of the data directory to be logged
+			allowing(setupActivity).getApplicationInfo();
+			will(returnValue(new ApplicationInfo() {{
+				dataDir = testDir.getAbsolutePath();
+			}}));
 			// Set the author name and password
 			oneOf(setupActivity).setAuthorName(authorName);
 			oneOf(setupActivity).setPassword(password);
@@ -84,4 +94,9 @@ public class SetupControllerImplTest extends BrambleMockTestCase {
 		s.createAccount(result -> called.set(true));
 		assertTrue(called.get());
 	}
+
+	@After
+	public void tearDown() {
+		TestUtils.deleteTestDirectory(testDir);
+	}
 }