diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index ebe50797c8f6ad7f9a46478d74b8ffc2b608ce16..ba6c06b31cb9d4e8fb05b342c4bdf230e6de1efb 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -140,7 +140,7 @@ dependencies {
 	androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.0.2"
 	androidTestCompileOnly 'javax.annotation:jsr250-api:1.0'
 	androidTestImplementation 'junit:junit:4.12'
-	androidTestScreenshotImplementation "tools.fastlane:screengrab:1.1.0"
+	androidTestScreenshotImplementation "tools.fastlane:screengrab:1.2.0"
 	androidTestScreenshotImplementation "com.android.support.test.uiautomator:uiautomator-v18:2.1.3"
 }
 
diff --git a/briar-android/fastlane/Screengrabfile b/briar-android/fastlane/Screengrabfile
index 8a6f1353423a97833100760f96863fac0cc9f0fe..53f4226deb8ae3d433a071e72d118c6b9b53c66a 100644
--- a/briar-android/fastlane/Screengrabfile
+++ b/briar-android/fastlane/Screengrabfile
@@ -2,4 +2,6 @@ app_package_name "org.briarproject.briar.android.screenshot.debug"
 locales ['en-US']
 app_apk_path "build/outputs/apk/screenshot/debug/briar-android-screenshot-debug.apk"
 tests_apk_path "build/outputs/apk/androidTest/screenshot/debug/briar-android-screenshot-debug-androidTest.apk"
-test_instrumentation_runner "org.briarproject.briar.android.BriarTestRunner"
\ No newline at end of file
+test_instrumentation_runner "org.briarproject.briar.android.BriarTestRunner"
+reinstall_app = true
+exit_on_test_failure = true
\ No newline at end of file
diff --git a/briar-android/src/androidTest/java/org/briarproject/briar/android/UiTest.java b/briar-android/src/androidTest/java/org/briarproject/briar/android/UiTest.java
index a767da8ee0bce97a1494fbeafd05899e34f27216..7d9249cfbe048d68e2ee74bb89afcb606f535121 100644
--- a/briar-android/src/androidTest/java/org/briarproject/briar/android/UiTest.java
+++ b/briar-android/src/androidTest/java/org/briarproject/briar/android/UiTest.java
@@ -7,6 +7,7 @@ import android.support.test.espresso.intent.rule.IntentsTestRule;
 import org.briarproject.bramble.api.account.AccountManager;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
 
 import javax.annotation.Nullable;
 import javax.inject.Inject;
@@ -16,7 +17,8 @@ import static android.support.test.InstrumentationRegistry.getTargetContext;
 @SuppressWarnings("WeakerAccess")
 public abstract class UiTest {
 
-	protected static final String USERNAME = "Alice";
+	protected final String USERNAME =
+			getTargetContext().getString(R.string.screenshot_alice);
 	protected static final String PASSWORD = "123456";
 
 	@Inject
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
index afbe0eaa3d6973364c7ab54b46deab7919eb560e..8601660993523647b8d0b3500ba89037f7ed71b9 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
@@ -5,7 +5,6 @@ import org.briarproject.bramble.BrambleCoreModule;
 import org.briarproject.bramble.account.BriarAccountModule;
 import org.briarproject.briar.BriarCoreModule;
 import org.briarproject.briar.android.contact.ConversationActivityScreenshotTest;
-import org.briarproject.briar.android.login.SetupActivityScreenshotTest;
 import org.briarproject.briar.android.settings.SettingsActivityScreenshotTest;
 
 import javax.inject.Singleton;
@@ -22,8 +21,9 @@ import dagger.Component;
 })
 public interface BriarUiTestComponent extends AndroidComponent {
 
+	void inject(SetupDataTest test);
+
 	void inject(ConversationActivityScreenshotTest test);
-	void inject(SetupActivityScreenshotTest test);
 	void inject(SettingsActivityScreenshotTest test);
 
 }
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/ScreenshotTest.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/ScreenshotTest.java
index bc544b0f9c131e4d7871a992d6a288e785bb2336..2fcaf9c2e1926e4b76b82e7f06f3df1c076e6ed0 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/ScreenshotTest.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/ScreenshotTest.java
@@ -1,5 +1,6 @@
 package org.briarproject.briar.android;
 
+import android.app.Activity;
 import android.util.Log;
 
 import org.briarproject.bramble.api.plugin.ConnectionRegistry;
@@ -9,12 +10,10 @@ import org.junit.ClassRule;
 
 import javax.inject.Inject;
 
+import tools.fastlane.screengrab.FalconScreenshotStrategy;
 import tools.fastlane.screengrab.Screengrab;
-import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
 import tools.fastlane.screengrab.locale.LocaleTestRule;
 
-import static tools.fastlane.screengrab.Screengrab.setDefaultScreenshotStrategy;
-
 public abstract class ScreenshotTest extends UiTest {
 
 	@ClassRule
@@ -27,14 +26,9 @@ public abstract class ScreenshotTest extends UiTest {
 	@Inject
 	protected Clock clock;
 
-	public ScreenshotTest() {
-		super();
-		setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
-	}
-
-	protected void screenshot(String name) {
+	protected void screenshot(String name, Activity activity) {
 		try {
-			Screengrab.screenshot(name);
+			Screengrab.screenshot(name, new FalconScreenshotStrategy(activity));
 		} catch (RuntimeException e) {
 			if (!e.getMessage().equals("Unable to capture screenshot."))
 				throw e;
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/login/SetupActivityScreenshotTest.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/SetupDataTest.java
similarity index 65%
rename from briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/login/SetupActivityScreenshotTest.java
rename to briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/SetupDataTest.java
index 8b3981e0dd1c51dbbf8e7dab2a3df1e56e357b34..53b5d308fe92744816a513b9b21338d33e91d23e 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/login/SetupActivityScreenshotTest.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/SetupDataTest.java
@@ -1,4 +1,4 @@
-package org.briarproject.briar.android.login;
+package org.briarproject.briar.android;
 
 import android.support.test.espresso.intent.rule.IntentsTestRule;
 import android.support.test.runner.AndroidJUnit4;
@@ -6,9 +6,12 @@ import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.UiObject;
 import android.support.test.uiautomator.UiSelector;
 
+import org.briarproject.bramble.api.FormatException;
+import org.briarproject.bramble.api.contact.Contact;
+import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.briar.R;
-import org.briarproject.briar.android.BriarUiTestComponent;
-import org.briarproject.briar.android.ScreenshotTest;
+import org.briarproject.briar.android.login.OpenDatabaseActivity;
+import org.briarproject.briar.android.login.SetupActivity;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,14 +29,14 @@ import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
 import static android.support.test.runner.lifecycle.Stage.PAUSED;
-import static junit.framework.Assert.assertTrue;
+import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
 import static org.briarproject.briar.android.ViewActions.waitForActivity;
 import static org.briarproject.briar.android.ViewActions.waitUntilMatches;
 import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
-
+import static org.junit.Assert.assertTrue;
 
 @RunWith(AndroidJUnit4.class)
-public class SetupActivityScreenshotTest extends ScreenshotTest {
+public class SetupDataTest extends ScreenshotTest {
 
 	@Rule
 	public IntentsTestRule<SetupActivity> testRule =
@@ -61,7 +64,7 @@ public class SetupActivityScreenshotTest extends ScreenshotTest {
 		onView(withId(R.id.nickname_entry))
 				.perform(waitUntilMatches(withText(USERNAME)));
 
-		screenshot("manual_create_account");
+		screenshot("manual_create_account", testRule.getActivity());
 
 		onView(withId(R.id.next))
 				.check(matches(isDisplayed()))
@@ -94,13 +97,54 @@ public class SetupActivityScreenshotTest extends ScreenshotTest {
 		}
 
 		// wait for OpenDatabaseActivity to show up
-		onView(withId(R.id.progress))
-				.check(matches(isDisplayed()));
 		onView(isRoot())
 				.perform(waitForActivity(testRule.getActivity(), PAUSED));
 		intended(hasComponent(OpenDatabaseActivity.class.getName()));
 
 		assertTrue(accountManager.hasDatabaseKey());
+
+		lifecycleManager.waitForStartup();
+		createTestData();
+
+		// close expiry warning
+		onView(withId(R.id.expiryWarning))
+				.perform(waitUntilMatches(isDisplayed()));
+		onView(withId(R.id.expiryWarningClose))
+				.check(matches(isDisplayed()));
+		onView(withId(R.id.expiryWarningClose))
+				.perform(click());
+	}
+
+	private void createTestData() {
+		try {
+			createTestDataExceptions();
+		} catch (DbException | FormatException e) {
+			throw new AssertionError(e);
+		}
+	}
+
+	private void createTestDataExceptions()
+			throws DbException, FormatException {
+		String bobName =
+				getTargetContext().getString(R.string.screenshot_bob);
+		Contact bob = testDataCreator.addContact(bobName);
+
+		String bobHi = getTargetContext()
+				.getString(R.string.screenshot_message_1);
+		long bobTime = getMinutesAgo(2);
+		testDataCreator.addPrivateMessage(bob, bobHi, bobTime, true);
+
+		String aliceHi = getTargetContext()
+				.getString(R.string.screenshot_message_2);
+		long aliceTime = getMinutesAgo(1);
+		testDataCreator.addPrivateMessage(bob, aliceHi, aliceTime, false);
+
+		String bobHi2 = getTargetContext()
+				.getString(R.string.screenshot_message_3);
+		long bobTime2 = getMinutesAgo(0);
+		testDataCreator.addPrivateMessage(bob, bobHi2, bobTime2, true);
+
+		connectionRegistry.registerConnection(bob.getId(), ID, true);
 	}
 
 }
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/contact/ConversationActivityScreenshotTest.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/contact/ConversationActivityScreenshotTest.java
index e61e5ea1f28400d47c7bc51cb8b2a5cae173ceb3..e25951c3398a2acfd4989cba35335a4e239e4be4 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/contact/ConversationActivityScreenshotTest.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/contact/ConversationActivityScreenshotTest.java
@@ -2,11 +2,9 @@ package org.briarproject.briar.android.contact;
 
 import android.content.Context;
 import android.content.Intent;
+import android.support.test.rule.ActivityTestRule;
 import android.support.test.runner.AndroidJUnit4;
 
-import org.briarproject.bramble.api.FormatException;
-import org.briarproject.bramble.api.contact.Contact;
-import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.BriarUiTestComponent;
 import org.briarproject.briar.android.ScreenshotTest;
@@ -15,23 +13,20 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import static android.support.test.InstrumentationRegistry.getInstrumentation;
-import static android.support.test.InstrumentationRegistry.getTargetContext;
 import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
-import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
 import static org.briarproject.briar.android.ViewActions.waitUntilMatches;
+import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
 import static org.hamcrest.Matchers.allOf;
 
 @RunWith(AndroidJUnit4.class)
 public class ConversationActivityScreenshotTest extends ScreenshotTest {
 
 	@Rule
-	public CleanAccountTestRule<ConversationActivity> testRule =
-			new CleanAccountTestRule<>(ConversationActivity.class,
-					this::createTestData);
+	public ActivityTestRule<ConversationActivity> testRule =
+			new ActivityTestRule<>(ConversationActivity.class, false, false);
 
 	@Override
 	protected void inject(BriarUiTestComponent component) {
@@ -39,48 +34,19 @@ public class ConversationActivityScreenshotTest extends ScreenshotTest {
 	}
 
 	@Test
-	public void messaging() {
+	public void messaging() throws Exception {
 		Context targetContext = getInstrumentation().getTargetContext();
 		Intent intent = new Intent(targetContext, ConversationActivity.class);
 		intent.putExtra(CONTACT_ID, 1);
 		testRule.launchActivity(intent);
 
-		onView(withId(R.id.conversationView)).perform(waitUntilMatches(
-				allOf(withText(R.string.screenshot_message_3), isDisplayed())));
-
-		screenshot("manual_messaging");
-	}
-
-	private void createTestData() {
-		try {
-			createTestDataExceptions();
-		} catch (DbException | FormatException e) {
-			throw new AssertionError(e);
-		}
-	}
-
-	private void createTestDataExceptions()
-			throws DbException, FormatException {
-		String bobName =
-				getTargetContext().getString(R.string.screenshot_bob);
-		Contact bob = testDataCreator.addContact(bobName);
-
-		String bobHi = getTargetContext()
-				.getString(R.string.screenshot_message_1);
-		long bobTime = getMinutesAgo(2);
-		testDataCreator.addPrivateMessage(bob, bobHi, bobTime, true);
-
-		String aliceHi = getTargetContext()
-				.getString(R.string.screenshot_message_2);
-		long aliceTime = getMinutesAgo(1);
-		testDataCreator.addPrivateMessage(bob, aliceHi, aliceTime, false);
-
-		String bobHi2 = getTargetContext()
-				.getString(R.string.screenshot_message_3);
-		long bobTime2 = getMinutesAgo(0);
-		testDataCreator.addPrivateMessage(bob, bobHi2, bobTime2, true);
+		onView(withId(R.id.conversationView))
+				.perform(waitUntilMatches(allOf(
+						withText(R.string.screenshot_message_3),
+						isCompletelyDisplayed())
+				));
 
-		connectionRegistry.registerConnection(bob.getId(), ID, true);
+		screenshot("manual_messaging", testRule.getActivity());
 	}
 
 }
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/settings/SettingsActivityScreenshotTest.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/settings/SettingsActivityScreenshotTest.java
index 831da5ca1179afaa146e144650c15fd365978d8d..ceb1817f68a85c3113f80eef1c24c1fa4995776c 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/settings/SettingsActivityScreenshotTest.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/settings/SettingsActivityScreenshotTest.java
@@ -2,14 +2,15 @@ package org.briarproject.briar.android.settings;
 
 import android.content.Intent;
 import android.support.test.espresso.contrib.DrawerActions;
+import android.support.test.rule.ActivityTestRule;
 import android.support.test.runner.AndroidJUnit4;
 import android.support.v7.widget.RecyclerView;
 import android.view.Gravity;
 
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.BriarUiTestComponent;
-import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
 import org.briarproject.briar.android.ScreenshotTest;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,8 +34,8 @@ import static org.hamcrest.CoreMatchers.is;
 public class SettingsActivityScreenshotTest extends ScreenshotTest {
 
 	@Rule
-	public CleanAccountTestRule<SettingsActivity> testRule =
-			new CleanAccountTestRule<>(SettingsActivity.class);
+	public ActivityTestRule<SettingsActivity> testRule =
+			new ActivityTestRule<>(SettingsActivity.class);
 
 	@Override
 	protected void inject(BriarUiTestComponent component) {
@@ -46,7 +47,7 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
 		onView(withText(R.string.settings_button))
 				.check(matches(isDisplayed()));
 
-		screenshot("manual_dark_theme_settings");
+		screenshot("manual_dark_theme_settings", testRule.getActivity());
 
 		// switch to dark theme
 		onView(withText(R.string.pref_theme_title))
@@ -56,10 +57,20 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
 				.check(matches(isDisplayed()))
 				.perform(click());
 
-		// open nav drawer and remove expiry warning
-		openNavDrawer(true);
+		openNavDrawer();
+
+		screenshot("manual_dark_theme_nav_drawer", testRule.getActivity());
 
-		screenshot("manual_dark_theme_nav_drawer");
+		// switch to back to light theme
+		onView(withText(R.string.settings_button))
+				.check(matches(isDisplayed()))
+				.perform(click());
+		onView(withText(R.string.pref_theme_title))
+				.check(matches(isDisplayed()))
+				.perform(click());
+		onView(withText(R.string.pref_theme_light))
+				.check(matches(isDisplayed()))
+				.perform(click());
 	}
 
 	@Test
@@ -83,12 +94,11 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
 				.check(matches(isDisplayed()))
 				.check(matches(isEnabled()));
 
-		screenshot("manual_app_lock");
+		screenshot("manual_app_lock", testRule.getActivity());
 
-		// no more expiry warning to remove, because sharedprefs cached?
-		openNavDrawer(false);
+		openNavDrawer();
 
-		screenshot("manual_app_lock_nav_drawer");
+		screenshot("manual_app_lock_nav_drawer", testRule.getActivity());
 	}
 
 	@Test
@@ -104,23 +114,15 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
 				.check(matches(isDisplayed()))
 				.perform(waitUntilMatches(isEnabled()));
 
-		screenshot("manual_tor_settings");
+		screenshot("manual_tor_settings", testRule.getActivity());
 	}
 
-	private void openNavDrawer(boolean expiry) {
+	private void openNavDrawer() {
 		// start main activity
 		Intent i =
 				new Intent(testRule.getActivity(), NavDrawerActivity.class);
 		testRule.getActivity().startActivity(i);
 
-		// close expiry warning
-		if (expiry) {
-			onView(withId(R.id.expiryWarningClose))
-					.check(matches(isDisplayed()));
-			onView(withId(R.id.expiryWarningClose))
-					.perform(click());
-		}
-
 		// open navigation drawer
 		onView(withId(R.id.drawer_layout))
 				.check(matches(isClosed(Gravity.START)))
diff --git a/briar-android/witness.gradle b/briar-android/witness.gradle
index 2a5727a1665cdd62984303e3dc7099f5434478a3..0fa29a1f9e7d532a57b3ee909a50d39e0ef2833b 100644
--- a/briar-android/witness.gradle
+++ b/briar-android/witness.gradle
@@ -82,6 +82,7 @@ dependencyVerification {
         'com.google.zxing:core:3.3.0:core-3.3.0.jar:bba7724e02a997cec38213af77133ee8e24b0d5cf5fa7ecbc16a4fa93f11ee0d',
         'com.googlecode.json-simple:json-simple:1.1:json-simple-1.1.jar:2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439',
         'com.ibm.icu:icu4j:53.1:icu4j-53.1.jar:e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab',
+        'com.jraska:falcon:1.0.4:falcon-1.0.4.aar:6114a48d8b3814f75fc69b5e84dc087c1254883874eae8a36bd778979800630a',
         'com.squareup:javawriter:2.1.1:javawriter-2.1.1.jar:f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e',
         'com.squareup:javawriter:2.5.0:javawriter-2.5.0.jar:fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0',
         'com.sun.activation:javax.activation:1.2.0:javax.activation-1.2.0.jar:993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce',
@@ -171,7 +172,7 @@ dependencyVerification {
         'org.robolectric:shadows-framework:3.8:shadows-framework-3.8.jar:83548db7249edf1af87e1a1f4d8f4eec3e85d6220161da601e6f6398476911b2',
         'org.robolectric:shadows-support-v4:3.3.2:shadows-support-v4-3.3.2.jar:6f689264738266e70fe08db7c04b7b5a75155994f4e3f7f311960d90486bf005',
         'org.robolectric:utils:3.8:utils-3.8.jar:e945d04d40e37554e02d4be1bc3abf9bede45375c843aa36d10ccb6b63edbf34',
-        'tools.fastlane:screengrab:1.1.0:screengrab-1.1.0.aar:03ce3868ee8a0082d14e7a1de0999f91531c0cc794392688beb08ee9bc4495fd',
+        'tools.fastlane:screengrab:1.2.0:screengrab-1.2.0.aar:af4ee23bb06f94404d3ab18e2ea69db8265539fc8da29f9ee45b7e472684ba83',
         'uk.co.samuelwall:material-tap-target-prompt:2.8.0:material-tap-target-prompt-2.8.0.aar:ac70770c05bbc4675a1d5712c0e53d46ee4fa961b74947589fce50d8003065ec',
         'xmlpull:xmlpull:1.1.3.1:xmlpull-1.1.3.1.jar:34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63',
         'xpp3:xpp3_min:1.1.4c:xpp3_min-1.1.4c.jar:bfc90e9e32d0eab1f397fb974b5f150a815188382ac41f372a7149d5bc178008',