diff --git a/briar-android/artwork/qr_code.svg b/briar-android/artwork/qr_code.svg
new file mode 100644
index 0000000000000000000000000000000000000000..07930f849b6ac18afb8bad78edd76d3d2a531fc3
--- /dev/null
+++ b/briar-android/artwork/qr_code.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="svg2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="-47 347.2 409.2 161.7" style="enable-background:new -47 347.2 409.2 161.7;" xml:space="preserve">
+<style type="text/css">
+	.st0{display:none;fill:none;stroke:#FFFFFF;stroke-width:4.3281;}
+	.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#020202;}
+</style>
+<path id="path4201" d="M322.8,504.6l-4.3-4.3l-7.1-2.4c-3.9-1.3-8.7-3-10.7-3.7l-3.7-1.3l3.5-0.2c8.2-0.4,13-4,14.3-10.9
+	c0.8-4.1,1.1-17.3,0.8-33c-0.2-8.1-0.2-15.4,0-16.3c0.1-0.9,0.5-2.4,0.9-3.4c1.2-3.5,0.3-11.9-1.9-17.6c-0.3-0.9-1.9-4.2-3.5-7.4
+	c-4.2-8.2-4.5-8.9-4.9-10.5c-0.5-1.8-0.2-5.4,0.5-6.8c0.7-1.3,2.2-2.9,3.2-3.5c1.3-0.7,2.6,0.1,4.7,2.9c3.4,4.5,14,19.4,15.7,22.2
+	c3.7,6,6,11.2,8,18.8c0.7,2.5,1.9,7,2.7,10.1c0.8,3.1,2.7,10.2,4.1,15.8l2.6,10.2l4.6,5.2c2.6,2.9,5.8,6.5,7.2,8
+	c1.4,1.6,2.5,3,2.5,3.2c0,0.3-34.5,29.3-34.9,29.3C327.2,508.9,325.2,506.9,322.8,504.6z M228.9,488.2c-1.3-0.6-2.2-1.4-2.9-2.3
+	c-2.1-2.7-2,2.4-1.9-68.5l0.1-64l0.7-1.2c1-1.9,2-2.9,3.7-3.9l1.6-0.9l37.8-0.1c42.5-0.1,39.4-0.2,42.1,2.2c0.9,0.8,1.8,2,2.2,2.9
+	c0.7,1.6,0.7,1.6,0.8,14.2l0.1,12.6l-1.8-0.1c-1.4-0.1-2.1,0-3.2,0.5c-2,1-3.9,2.9-5.1,5.1l-1,2l0-12.8l0-12.8h-33.6h-33.6v51.3
+	v51.3h33.6h33.6l0.1-34.4c0.1-33,0.1-34.4,0.6-32.9c0.3,0.8,1.8,4,3.4,7c5.5,10.6,5.4,9.9,5.4,47.2c0,27.6-0.1,30-1.7,33.1
+	c-1.1,2.2-2.7,3.7-5.1,4.7l-1.7,0.7L267,489l-36.2,0.1L228.9,488.2L228.9,488.2z M271.3,483.1c2.9-1.3,4.5-3.7,4.4-6.6
+	c0-4.1-3.1-7.2-7.1-7.2c-2.1,0-3.6,0.6-5.2,2.2c-2.2,2.2-2.8,5.4-1.3,8.3c0.7,1.4,2.5,3,4,3.5C267.6,483.8,270,483.8,271.3,483.1z"
+	/>
+<path id="path4201-1" d="M-7.6,504.6l4.3-4.3l7.1-2.4c3.9-1.3,8.7-3,10.7-3.7l3.7-1.3l-3.5-0.2c-8.2-0.4-13-4-14.3-10.9
+	c-0.8-4.1-1.1-17.3-0.8-33c0.2-8.1,0.2-15.4,0-16.3c-0.1-0.9-0.5-2.4-0.9-3.4c-1.2-3.5-0.3-11.9,1.9-17.6c0.3-0.9,1.9-4.2,3.5-7.4
+	c4.2-8.2,4.5-8.9,4.9-10.5c0.5-1.8,0.2-5.4-0.5-6.8c-0.7-1.3-2.2-2.9-3.2-3.5c-1.3-0.7-2.6,0.1-4.7,2.9c-3.4,4.5-14,19.4-15.7,22.2
+	c-3.7,6-6,11.2-8,18.8c-0.7,2.5-1.9,7-2.7,10.1c-0.8,3.1-2.7,10.2-4.1,15.8l-2.6,10.2l-4.6,5.2c-2.6,2.9-5.8,6.5-7.2,8
+	s-2.5,3-2.5,3.2c0,0.3,34.5,29.3,34.9,29.3C-12,508.9-9.9,506.9-7.6,504.6z M86.3,488.2c1.3-0.6,2.2-1.4,2.9-2.3
+	c2.1-2.7,2,2.4,1.9-68.5l-0.1-64l-0.7-1.2c-1-1.9-2-2.9-3.7-3.9l-1.6-0.9l-37.8-0.1c-42.5-0.1-39.4-0.2-42.1,2.2
+	c-0.9,0.8-1.8,2-2.2,2.9c-0.7,1.6-0.7,1.6-0.8,14.2L2,379.2l1.8-0.1c1.4-0.1,2.1,0,3.2,0.5c2,1,3.9,2.9,5.1,5.1l1,2l0-12.8l0-12.8
+	h33.6h33.6v51.3v51.3H46.8H13.2l-0.1-34.4c-0.1-33-0.1-34.4-0.6-32.9c-0.3,0.8-1.8,4-3.4,7c-5.5,10.6-5.4,9.9-5.4,47.2
+	c0,27.6,0.1,30,1.7,33.1c1.1,2.2,2.7,3.7,5.1,4.7l1.7,0.7l36.2,0.1l36.2,0.1L86.3,488.2L86.3,488.2z M43.9,483.1
+	c-2.9-1.3-4.5-3.7-4.4-6.6c0-4.1,3.1-7.2,7.1-7.2c2.1,0,3.6,0.6,5.2,2.2c2.2,2.2,2.8,5.4,1.3,8.3c-0.7,1.4-2.5,3-4,3.5
+	C47.6,483.8,45.3,483.8,43.9,483.1z"/>
+<g>
+	<path d="M33.5,410.2h2.3v2.3h2.3v2.3H26.6v-2.3h2.3v-4.6h4.6L33.5,410.2L33.5,410.2z M63.5,431h2.3v-2.3h-2.3V431z M35.8,410.2h2.3
+		v-2.3h-2.3V410.2z M68.1,431h2.3v-2.3h-2.3V431z M40.4,433.3H45V431h-4.6V433.3z M61.2,433.3V431h-2.3v2.3H61.2z M52,433.3h2.3
+		v-4.6H52V433.3z M33.5,403.3v2.3h6.9v-2.3H33.5z M31.2,405.6v-2.3h-4.6v4.6h2.3v-2.3H31.2z M38.1,401H22v-16.1h16.1V401z
+		 M35.8,387.2H24.3v11.5h11.5V387.2z M26.6,428.7h6.9v-6.9h-6.9V428.7z M49.6,426.3v2.3H52v-2.3H49.6z M33.5,389.5h-6.9v6.9h6.9
+		V389.5z M70.4,384.9V401H54.3v-16.1H70.4z M68.1,387.2H56.6v11.5h11.5V387.2z M22,417.1h16.1v16.1H22V417.1z M24.3,431h11.5v-11.5
+		H24.3V431z M24.3,403.3H22v11.5h2.3V403.3z M54.3,414.8v2.3h2.3v-2.3H54.3z M47.3,424.1v-2.3H45v2.3h-4.6v4.6H45v2.3h2.3v-4.6h2.3
+		v-2.3H47.3z M40.4,394.1H45v-2.3h-4.6V394.1z M58.9,412.5h4.6v2.3h2.3v-6.9h-2.3v-4.6h-2.3v6.9h-6.9v2.3h2.3v2.3h2.3V412.5z
+		 M61.2,419.4h-2.3v-2.3h-2.3v4.6h-6.9v2.3h4.6v4.6h2.3v2.3h2.3v-4.6h9.2v-2.3h-6.9V419.4z M61.2,419.4h2.3v-4.6h-2.3V419.4z
+		 M42.7,419.4v-2.3H45v-2.3h2.3v-2.3h2.3v-4.6h6.9v-4.6h-2.3v2.3H52v-9.2h-2.3v-4.6H52v-6.9h-2.3v4.6h-2.3v-4.6h-6.9v4.6h2.3v-2.3
+		H45v4.6h2.3v6.9h2.3v2.3h-2.3v4.6H45V401h-2.3v-2.3h-2.3v4.6h2.3v2.3h-2.3v6.9h2.3v-4.6H45v4.6h-2.3v2.3h-2.3v6.9H45v-2.3H42.7z
+		 M68.1,421.7v-2.3h-4.6v2.3H68.1z M65.8,389.5h-6.9v6.9h6.9V389.5z M47.3,419.4H52v-2.3h-2.3v-2.3h-2.3V419.4z M52,414.8v-2.3h-2.3
+		v2.3H52z M65.8,405.6h4.6v-2.3h-4.6V405.6z M68.1,424.1h2.3v-2.3h-2.3V424.1z M68.1,410.2h2.3v-2.3h-2.3V410.2z M47.3,398.7H45v2.3
+		h2.3V398.7z M47.3,398.7"/>
+</g>
+<g>
+	<path d="M256.5,410.2h2.3v2.3h2.3v2.3h-11.5v-2.3h2.3v-4.6h4.6L256.5,410.2L256.5,410.2z M286.5,431h2.3v-2.3h-2.3V431z
+		 M258.8,410.2h2.3v-2.3h-2.3V410.2z M291.1,431h2.3v-2.3h-2.3V431z M263.4,433.3h4.6V431h-4.6V433.3z M284.2,433.3V431h-2.3v2.3
+		H284.2z M275,433.3h2.3v-4.6H275V433.3z M256.5,403.3v2.3h6.9v-2.3H256.5z M254.2,405.6v-2.3h-4.6v4.6h2.3v-2.3H254.2z M261.1,401
+		H245v-16.1h16.1V401z M258.8,387.2h-11.5v11.5h11.5V387.2z M249.6,428.7h6.9v-6.9h-6.9V428.7z M272.6,426.3v2.3h2.3v-2.3H272.6z
+		 M256.5,389.5h-6.9v6.9h6.9V389.5z M293.4,384.9V401h-16.1v-16.1H293.4z M291.1,387.2h-11.5v11.5h11.5V387.2z M245,417.1h16.1v16.1
+		H245V417.1z M247.3,431h11.5v-11.5h-11.5V431z M247.3,403.3H245v11.5h2.3V403.3z M277.3,414.8v2.3h2.3v-2.3H277.3z M270.3,424.1
+		v-2.3H268v2.3h-4.6v4.6h4.6v2.3h2.3v-4.6h2.3v-2.3H270.3z M263.4,394.1h4.6v-2.3h-4.6V394.1z M281.9,412.5h4.6v2.3h2.3v-6.9h-2.3
+		v-4.6h-2.3v6.9h-6.9v2.3h2.3v2.3h2.3V412.5z M284.2,419.4h-2.3v-2.3h-2.3v4.6h-6.9v2.3h4.6v4.6h2.3v2.3h2.3v-4.6h9.2v-2.3h-6.9
+		V419.4z M284.2,419.4h2.3v-4.6h-2.3V419.4z M265.7,419.4v-2.3h2.3v-2.3h2.3v-2.3h2.3v-4.6h6.9v-4.6h-2.3v2.3H275v-9.2h-2.3v-4.6
+		h2.3v-6.9h-2.3v4.6h-2.3v-4.6h-6.9v4.6h2.3v-2.3h2.3v4.6h2.3v6.9h2.3v2.3h-2.3v4.6H268V401h-2.3v-2.3h-2.3v4.6h2.3v2.3h-2.3v6.9
+		h2.3v-4.6h2.3v4.6h-2.3v2.3h-2.3v6.9h4.6v-2.3H265.7z M291.1,421.7v-2.3h-4.6v2.3H291.1z M288.8,389.5h-6.9v6.9h6.9V389.5z
+		 M270.3,419.4h4.6v-2.3h-2.3v-2.3h-2.3V419.4z M275,414.8v-2.3h-2.3v2.3H275z M288.8,405.6h4.6v-2.3h-4.6V405.6z M291.1,424.1h2.3
+		v-2.3h-2.3V424.1z M291.1,410.2h2.3v-2.3h-2.3V410.2z M270.3,398.7H268v2.3h2.3V398.7z M270.3,398.7"/>
+</g>
+<polygon class="st0" points="152,392 152,411.8 110,411.8 126,383.1 126,392 "/>
+<polygon class="st0" points="152,392 152,411.8 110,411.8 126,383.1 126,392 "/>
+<g>
+	<path class="st1" d="M132.6,396.1l-20.6,18l20.6,16.7v-5.2H152v-24.3h-19.3V396.1z"/>
+	<path class="st1" d="M182.4,430.9l20.6-18l-20.6-16.7v5.2H163v24.3h19.3V430.9z"/>
+</g>
+</svg>
diff --git a/briar-android/res/drawable/bluetooth.xml b/briar-android/res/drawable/bluetooth.xml
index a39bbc2a899d9ba7c6d86be6208a4ad4d8359779..26f10509be72ae72028e544ed35fd19412e446c3 100644
--- a/briar-android/res/drawable/bluetooth.xml
+++ b/briar-android/res/drawable/bluetooth.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
 	android:width="499.24373dp"
 	android:height="175.49413dp"
 	android:viewportWidth="499.24373"
diff --git a/briar-android/res/drawable/ic_expand_more_black_24dp.xml b/briar-android/res/drawable/ic_expand_more_black_24dp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8d57dbc10f814f6014d3965c9a8a268d080bc775
--- /dev/null
+++ b/briar-android/res/drawable/ic_expand_more_black_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/>
+</vector>
diff --git a/briar-android/res/drawable/qr_code_intro.xml b/briar-android/res/drawable/qr_code_intro.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6b09db32dd279901f6b64b19a03ecff6bf58beb6
--- /dev/null
+++ b/briar-android/res/drawable/qr_code_intro.xml
@@ -0,0 +1,24 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="409dp"
+        android:height="162dp"
+        android:viewportHeight="161.7"
+        android:viewportWidth="409.2">
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M369.8,157.4l-4.3,-4.3l-7.1,-2.4c-3.9,-1.3 -8.7,-3 -10.7,-3.7l-3.7,-1.3l3.5,-0.2c8.2,-0.4 13,-4 14.3,-10.9c0.8,-4.1 1.1,-17.3 0.8,-33c-0.2,-8.1 -0.2,-15.4 0,-16.3c0.1,-0.9 0.5,-2.4 0.9,-3.4c1.2,-3.5 0.3,-11.9 -1.9,-17.6c-0.3,-0.9 -1.9,-4.2 -3.5,-7.4c-4.2,-8.2 -4.5,-8.9 -4.9,-10.5c-0.5,-1.8 -0.2,-5.4 0.5,-6.8c0.7,-1.3 2.2,-2.9 3.2,-3.5c1.3,-0.7 2.6,0.1 4.7,2.9c3.4,4.5 14,19.4 15.7,22.2c3.7,6 6,11.2 8,18.8c0.7,2.5 1.9,7 2.7,10.1c0.8,3.1 2.7,10.2 4.1,15.8l2.6,10.2l4.6,5.2c2.6,2.9 5.8,6.5 7.2,8c1.4,1.6 2.5,3 2.5,3.2c0,0.3 -34.5,29.3 -34.9,29.3C374.2,161.7 372.2,159.7 369.8,157.4zM275.9,141c-1.3,-0.6 -2.2,-1.4 -2.9,-2.3c-2.1,-2.7 -2,2.4 -1.9,-68.5l0.1,-64l0.7,-1.2c1,-1.9 2,-2.9 3.7,-3.9l1.6,-0.9l37.8,-0.1c42.5,-0.1 39.4,-0.2 42.1,2.2c0.9,0.8 1.8,2 2.2,2.9c0.7,1.6 0.7,1.6 0.8,14.2l0.1,12.6l-1.8,-0.1c-1.4,-0.1 -2.1,0 -3.2,0.5c-2,1 -3.9,2.9 -5.1,5.1l-1,2l0,-12.8l0,-12.8h-33.6h-33.6v51.3v51.3h33.6h33.6l0.1,-34.4c0.1,-33 0.1,-34.4 0.6,-32.9c0.3,0.8 1.8,4 3.4,7c5.5,10.6 5.4,9.9 5.4,47.2c0,27.6 -0.1,30 -1.7,33.1c-1.1,2.2 -2.7,3.7 -5.1,4.7l-1.7,0.7L314,141.8l-36.2,0.1L275.9,141L275.9,141zM318.3,135.9c2.9,-1.3 4.5,-3.7 4.4,-6.6c0,-4.1 -3.1,-7.2 -7.1,-7.2c-2.1,0 -3.6,0.6 -5.2,2.2c-2.2,2.2 -2.8,5.4 -1.3,8.3c0.7,1.4 2.5,3 4,3.5C314.6,136.6 317,136.6 318.3,135.9z"/>
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M39.4,157.4l4.3,-4.3l7.1,-2.4c3.9,-1.3 8.7,-3 10.7,-3.7l3.7,-1.3l-3.5,-0.2c-8.2,-0.4 -13,-4 -14.3,-10.9c-0.8,-4.1 -1.1,-17.3 -0.8,-33c0.2,-8.1 0.2,-15.4 0,-16.3c-0.1,-0.9 -0.5,-2.4 -0.9,-3.4c-1.2,-3.5 -0.3,-11.9 1.9,-17.6c0.3,-0.9 1.9,-4.2 3.5,-7.4c4.2,-8.2 4.5,-8.9 4.9,-10.5c0.5,-1.8 0.2,-5.4 -0.5,-6.8c-0.7,-1.3 -2.2,-2.9 -3.2,-3.5c-1.3,-0.7 -2.6,0.1 -4.7,2.9c-3.4,4.5 -14,19.4 -15.7,22.2c-3.7,6 -6,11.2 -8,18.8c-0.7,2.5 -1.9,7 -2.7,10.1c-0.8,3.1 -2.7,10.2 -4.1,15.8l-2.6,10.2l-4.6,5.2c-2.6,2.9 -5.8,6.5 -7.2,8s-2.5,3 -2.5,3.2c0,0.3 34.5,29.3 34.9,29.3C35,161.7 37.1,159.7 39.4,157.4zM133.3,141c1.3,-0.6 2.2,-1.4 2.9,-2.3c2.1,-2.7 2,2.4 1.9,-68.5l-0.1,-64l-0.7,-1.2c-1,-1.9 -2,-2.9 -3.7,-3.9l-1.6,-0.9l-37.8,-0.1c-42.5,-0.1 -39.4,-0.2 -42.1,2.2c-0.9,0.8 -1.8,2 -2.2,2.9c-0.7,1.6 -0.7,1.6 -0.8,14.2L49,32l1.8,-0.1c1.4,-0.1 2.1,0 3.2,0.5c2,1 3.9,2.9 5.1,5.1l1,2l0,-12.8l0,-12.8h33.6h33.6v51.3v51.3L93.8,116.5L60.2,116.5l-0.1,-34.4c-0.1,-33 -0.1,-34.4 -0.6,-32.9c-0.3,0.8 -1.8,4 -3.4,7c-5.5,10.6 -5.4,9.9 -5.4,47.2c0,27.6 0.1,30 1.7,33.1c1.1,2.2 2.7,3.7 5.1,4.7l1.7,0.7l36.2,0.1l36.2,0.1L133.3,141L133.3,141zM90.9,135.9c-2.9,-1.3 -4.5,-3.7 -4.4,-6.6c0,-4.1 3.1,-7.2 7.1,-7.2c2.1,0 3.6,0.6 5.2,2.2c2.2,2.2 2.8,5.4 1.3,8.3c-0.7,1.4 -2.5,3 -4,3.5C94.6,136.6 92.3,136.6 90.9,135.9z"/>
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M80.5,63h2.3v2.3h2.3v2.3L73.6,67.6v-2.3h2.3v-4.6h4.6L80.5,63L80.5,63zM110.5,83.8h2.3v-2.3h-2.3L110.5,83.8zM82.8,63h2.3v-2.3h-2.3L82.8,63zM115.1,83.8h2.3v-2.3h-2.3L115.1,83.8zM87.4,86.1L92,86.1L92,83.8h-4.6L87.4,86.1zM108.2,86.1L108.2,83.8h-2.3v2.3L108.2,86.1zM99,86.1h2.3v-4.6L99,81.5L99,86.1zM80.5,56.1v2.3h6.9v-2.3L80.5,56.1zM78.2,58.4v-2.3h-4.6v4.6h2.3v-2.3L78.2,58.4zM85.1,53.8L69,53.8v-16.1h16.1L85.1,53.8zM82.8,40L71.3,40v11.5h11.5L82.8,40zM73.6,81.5h6.9v-6.9h-6.9L73.6,81.5zM96.6,79.1v2.3L99,81.4v-2.3L96.6,79.1zM80.5,42.3h-6.9v6.9h6.9L80.5,42.3zM117.4,37.7L117.4,53.8L101.3,53.8v-16.1L117.4,37.7zM115.1,40L103.6,40v11.5h11.5L115.1,40zM69,69.9h16.1v16.1L69,86L69,69.9zM71.3,83.8h11.5v-11.5L71.3,72.3L71.3,83.8zM71.3,56.1L69,56.1v11.5h2.3L71.3,56.1zM101.3,67.6v2.3h2.3v-2.3L101.3,67.6zM94.3,76.9v-2.3L92,74.6v2.3h-4.6v4.6L92,81.5v2.3h2.3v-4.6h2.3v-2.3L94.3,76.9zM87.4,46.9L92,46.9v-2.3h-4.6L87.4,46.9zM105.9,65.3h4.6v2.3h2.3v-6.9h-2.3v-4.6h-2.3v6.9h-6.9v2.3h2.3v2.3h2.3L105.9,65.3zM108.2,72.2h-2.3v-2.3h-2.3v4.6h-6.9v2.3h4.6v4.6h2.3v2.3h2.3v-4.6h9.2v-2.3h-6.9L108.2,72.2zM108.2,72.2h2.3v-4.6h-2.3L108.2,72.2zM89.7,72.2v-2.3L92,69.9v-2.3h2.3v-2.3h2.3v-4.6h6.9v-4.6h-2.3v2.3L99,58.4v-9.2h-2.3v-4.6L99,44.6v-6.9h-2.3v4.6h-2.3v-4.6h-6.9v4.6h2.3v-2.3L92,40v4.6h2.3v6.9h2.3v2.3h-2.3v4.6L92,58.4L92,53.8h-2.3v-2.3h-2.3v4.6h2.3v2.3h-2.3v6.9h2.3v-4.6L92,60.7v4.6h-2.3v2.3h-2.3v6.9L92,74.5v-2.3L89.7,72.2zM115.1,74.5v-2.3h-4.6v2.3L115.1,74.5zM112.8,42.3h-6.9v6.9h6.9L112.8,42.3zM94.3,72.2L99,72.2v-2.3h-2.3v-2.3h-2.3L94.4,72.2zM99,67.6v-2.3h-2.3v2.3L99,67.6zM112.8,58.4h4.6v-2.3h-4.6L112.8,58.4zM115.1,76.9h2.3v-2.3h-2.3L115.1,76.9zM115.1,63h2.3v-2.3h-2.3L115.1,63zM94.3,51.5L92,51.5v2.3h2.3L94.3,51.5zM94.3,51.5"/>
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M303.5,63h2.3v2.3h2.3v2.3h-11.5v-2.3h2.3v-4.6h4.6L303.5,63L303.5,63zM333.5,83.8h2.3v-2.3h-2.3L333.5,83.8zM305.8,63h2.3v-2.3h-2.3L305.8,63zM338.1,83.8h2.3v-2.3h-2.3L338.1,83.8zM310.4,86.1h4.6L315,83.8h-4.6L310.4,86.1zM331.2,86.1L331.2,83.8h-2.3v2.3L331.2,86.1zM322,86.1h2.3v-4.6L322,81.5L322,86.1zM303.5,56.1v2.3h6.9v-2.3L303.5,56.1zM301.2,58.4v-2.3h-4.6v4.6h2.3v-2.3L301.2,58.4zM308.1,53.8L292,53.8v-16.1h16.1L308.1,53.8zM305.8,40h-11.5v11.5h11.5L305.8,40zM296.6,81.5h6.9v-6.9h-6.9L296.6,81.5zM319.6,79.1v2.3h2.3v-2.3L319.6,79.1zM303.5,42.3h-6.9v6.9h6.9L303.5,42.3zM340.4,37.7L340.4,53.8h-16.1v-16.1L340.4,37.7zM338.1,40h-11.5v11.5h11.5L338.1,40zM292,69.9h16.1v16.1L292,86L292,69.9zM294.3,83.8h11.5v-11.5h-11.5L294.3,83.8zM294.3,56.1L292,56.1v11.5h2.3L294.3,56.1zM324.3,67.6v2.3h2.3v-2.3L324.3,67.6zM317.3,76.9v-2.3L315,74.6v2.3h-4.6v4.6h4.6v2.3h2.3v-4.6h2.3v-2.3L317.3,76.9zM310.4,46.9h4.6v-2.3h-4.6L310.4,46.9zM328.9,65.3h4.6v2.3h2.3v-6.9h-2.3v-4.6h-2.3v6.9h-6.9v2.3h2.3v2.3h2.3L328.9,65.3zM331.2,72.2h-2.3v-2.3h-2.3v4.6h-6.9v2.3h4.6v4.6h2.3v2.3h2.3v-4.6h9.2v-2.3h-6.9L331.2,72.2zM331.2,72.2h2.3v-4.6h-2.3L331.2,72.2zM312.7,72.2v-2.3h2.3v-2.3h2.3v-2.3h2.3v-4.6h6.9v-4.6h-2.3v2.3L322,58.4v-9.2h-2.3v-4.6h2.3v-6.9h-2.3v4.6h-2.3v-4.6h-6.9v4.6h2.3v-2.3h2.3v4.6h2.3v6.9h2.3v2.3h-2.3v4.6L315,58.4L315,53.8h-2.3v-2.3h-2.3v4.6h2.3v2.3h-2.3v6.9h2.3v-4.6h2.3v4.6h-2.3v2.3h-2.3v6.9h4.6v-2.3L312.7,72.2zM338.1,74.5v-2.3h-4.6v2.3L338.1,74.5zM335.8,42.3h-6.9v6.9h6.9L335.8,42.3zM317.3,72.2h4.6v-2.3h-2.3v-2.3h-2.3L317.3,72.2zM322,67.6v-2.3h-2.3v2.3L322,67.6zM335.8,58.4h4.6v-2.3h-4.6L335.8,58.4zM338.1,76.9h2.3v-2.3h-2.3L338.1,76.9zM338.1,63h2.3v-2.3h-2.3L338.1,63zM317.3,51.5L315,51.5v2.3h2.3L317.3,51.5zM317.3,51.5"/>
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M179.6,48.9l-20.6,18l20.6,16.7v-5.2L199,78.4v-24.3h-19.3L179.7,48.9z"/>
+	<path
+		android:fillColor="#FF000000"
+		android:pathData="M229.4,83.7l20.6,-18l-20.6,-16.7v5.2L210,54.2v24.3h19.3L229.3,83.7z"/>
+</vector>
diff --git a/briar-android/res/drawable/spinner_border.xml b/briar-android/res/drawable/spinner_border.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9720073e4957731b66e72dff29e95723629d8ad6
--- /dev/null
+++ b/briar-android/res/drawable/spinner_border.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:shape="rectangle">
+
+	<solid
+		android:color="@android:color/transparent"/>
+
+	<stroke
+		android:width="1dp"
+		android:color="@color/spinner_border"/>
+
+	<corners
+		android:radius="2dp"/>
+
+</shape>
\ No newline at end of file
diff --git a/briar-android/res/layout-land/fragment_keyagreement_id.xml b/briar-android/res/layout-land/fragment_keyagreement_id.xml
new file mode 100644
index 0000000000000000000000000000000000000000..590a76fbf515d0c97c735afa7c79fd02be0f2bcc
--- /dev/null
+++ b/briar-android/res/layout-land/fragment_keyagreement_id.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="match_parent"
+	android:layout_height="match_parent"
+	android:orientation="horizontal"
+	android:paddingBottom="@dimen/margin_activity_vertical"
+	android:paddingEnd="@dimen/margin_activity_horizontal"
+	android:paddingLeft="@dimen/margin_activity_horizontal"
+	android:paddingRight="@dimen/margin_activity_horizontal"
+	android:paddingStart="@dimen/margin_activity_horizontal"
+	android:paddingTop="@dimen/margin_activity_vertical">
+
+	<ImageView
+		android:id="@+id/imageView"
+		android:layout_width="0dp"
+		android:layout_height="wrap_content"
+		android:layout_gravity="center_vertical"
+		android:layout_marginEnd="@dimen/margin_medium"
+		android:layout_marginRight="@dimen/margin_medium"
+		android:layout_weight="1"
+		android:adjustViewBounds="true"
+		android:scaleType="fitCenter"
+		android:src="@drawable/qr_code_intro"/>
+
+	<ScrollView
+		android:layout_width="0dp"
+		android:layout_height="match_parent"
+		android:layout_weight="1">
+
+		<LinearLayout
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:orientation="vertical">
+
+			<TextView
+				android:id="@+id/yourNicknameView"
+				style="@style/BriarTextBody"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:text="@string/your_nickname"/>
+
+			<Spinner
+				android:id="@+id/spinner"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:background="@drawable/spinner_border"
+				android:spinnerMode="dropdown"/>
+
+			<TextView
+				android:id="@+id/faceToFaceView"
+				style="@style/BriarTextBody"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:text="@string/face_to_face"/>
+
+			<Button
+				android:id="@+id/continueButton"
+				style="@style/BriarButton.Default"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_gravity="center_horizontal"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:text="@string/continue_button"/>
+
+		</LinearLayout>
+
+	</ScrollView>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/briar-android/res/layout-land/invitation_bluetooth_start.xml b/briar-android/res/layout-land/invitation_bluetooth_start.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1449bad7c98f4941caa9ed2313f0361383dbd545
--- /dev/null
+++ b/briar-android/res/layout-land/invitation_bluetooth_start.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="match_parent"
+	android:layout_height="match_parent"
+	android:orientation="horizontal"
+	android:paddingBottom="@dimen/margin_activity_vertical"
+	android:paddingEnd="@dimen/margin_activity_horizontal"
+	android:paddingLeft="@dimen/margin_activity_horizontal"
+	android:paddingRight="@dimen/margin_activity_horizontal"
+	android:paddingStart="@dimen/margin_activity_horizontal"
+	android:paddingTop="@dimen/margin_activity_vertical">
+
+	<ImageView
+		android:id="@+id/imageView"
+		android:layout_width="0dp"
+		android:layout_height="wrap_content"
+		android:layout_gravity="center_vertical"
+		android:layout_marginEnd="@dimen/margin_medium"
+		android:layout_marginRight="@dimen/margin_medium"
+		android:layout_weight="1"
+		android:adjustViewBounds="true"
+		android:scaleType="fitCenter"
+		android:src="@drawable/bluetooth"/>
+
+	<ScrollView
+		android:layout_width="0dp"
+		android:layout_height="match_parent"
+		android:layout_weight="1">
+
+		<LinearLayout
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:orientation="vertical">
+
+			<TextView
+				android:id="@+id/yourNicknameView"
+				style="@style/BriarTextBody"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:text="@string/your_nickname"/>
+
+			<Spinner
+				android:id="@+id/spinner"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:background="@drawable/spinner_border"
+				android:spinnerMode="dropdown"/>
+
+			<TextView
+				android:id="@+id/faceToFaceView"
+				style="@style/BriarTextBody"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:text="@string/face_to_face"/>
+
+			<Button
+				android:id="@+id/continueButton"
+				style="@style/BriarButton.Default"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:layout_gravity="center_horizontal"
+				android:layout_marginTop="@dimen/margin_medium"
+				android:text="@string/continue_button"/>
+		</LinearLayout>
+
+	</ScrollView>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/briar-android/res/layout/dropdown_author.xml b/briar-android/res/layout/dropdown_author.xml
index ff994a18d258cb9bc742f7e1b2fee0c570f570c0..090e07da75dad2048ff2cc97d24a28fb7d27396a 100644
--- a/briar-android/res/layout/dropdown_author.xml
+++ b/briar-android/res/layout/dropdown_author.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
 	xmlns:android="http://schemas.android.com/apk/res/android"
-	xmlns:tools="http://schemas.android.com/tools"
 	xmlns:app="http://schemas.android.com/apk/res-auto"
+	xmlns:tools="http://schemas.android.com/tools"
 	android:layout_width="match_parent"
 	android:layout_height="match_parent"
 	android:gravity="center_vertical">
@@ -12,14 +12,15 @@
 		android:layout_width="@dimen/dropdown_picture_size"
 		android:layout_height="@dimen/dropdown_picture_size"
 		android:layout_margin="@dimen/margin_small"
-		app:civ_border_width="@dimen/avatar_border_width"
-		app:civ_border_color="@color/briar_text_primary"/>
+		app:civ_border_color="@color/briar_text_primary"
+		app:civ_border_width="@dimen/avatar_border_width"/>
 
 	<TextView
 		android:id="@+id/nameView"
-		android:layout_width="wrap_content"
+		android:layout_width="0dp"
 		android:layout_height="wrap_content"
 		android:layout_margin="@dimen/margin_small"
+		android:layout_weight="1"
 		android:ellipsize="end"
 		android:singleLine="true"
 		android:textSize="@dimen/text_size_medium"
diff --git a/briar-android/res/layout/fragment_keyagreement_id.xml b/briar-android/res/layout/fragment_keyagreement_id.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18853603348a614188a82b87da396825cedc100f
--- /dev/null
+++ b/briar-android/res/layout/fragment_keyagreement_id.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="match_parent"
+	android:layout_height="match_parent">
+
+	<LinearLayout
+		android:layout_width="match_parent"
+		android:layout_height="wrap_content"
+		android:orientation="vertical"
+		android:paddingBottom="@dimen/margin_activity_vertical"
+		android:paddingEnd="@dimen/margin_activity_horizontal"
+		android:paddingLeft="@dimen/margin_activity_horizontal"
+		android:paddingRight="@dimen/margin_activity_horizontal"
+		android:paddingStart="@dimen/margin_activity_horizontal"
+		android:paddingTop="@dimen/margin_activity_vertical">
+
+		<TextView
+			android:id="@+id/yourNicknameView"
+			style="@style/BriarTextBody"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:text="@string/your_nickname"/>
+
+		<Spinner
+			android:id="@+id/spinner"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:layout_marginTop="@dimen/margin_medium"
+			android:background="@drawable/spinner_border"
+			android:spinnerMode="dropdown"/>
+
+		<ImageView
+			android:id="@+id/imageView"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:layout_marginTop="@dimen/margin_xlarge"
+			android:adjustViewBounds="true"
+			android:scaleType="fitCenter"
+			android:src="@drawable/qr_code_intro"/>
+
+		<TextView
+			android:id="@+id/faceToFaceView"
+			style="@style/BriarTextBody"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:layout_marginTop="@dimen/margin_xlarge"
+			android:text="@string/face_to_face"/>
+
+		<Button
+			android:id="@+id/continueButton"
+			style="@style/BriarButton.Default"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:layout_gravity="center_horizontal"
+			android:layout_marginTop="@dimen/margin_medium"
+			android:text="@string/continue_button"/>
+
+	</LinearLayout>
+
+</ScrollView>
\ No newline at end of file
diff --git a/briar-android/res/layout/fragment_keyagreement_qr.xml b/briar-android/res/layout/fragment_keyagreement_qr.xml
index 429f59526b5970b2f78d7f8a7130b77c07f91115..5f1b175ed567f5c794729da1aa04516f2996a9c6 100644
--- a/briar-android/res/layout/fragment_keyagreement_qr.xml
+++ b/briar-android/res/layout/fragment_keyagreement_qr.xml
@@ -1,32 +1,34 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-	android:id="@+id/qr_layout"
+<FrameLayout
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	xmlns:tools="http://schemas.android.com/tools"
 	android:layout_width="match_parent"
-	android:layout_height="match_parent"
-	android:orientation="vertical"
-	android:weightSum="2">
+	android:layout_height="match_parent">
 
-	<FrameLayout
+	<org.briarproject.android.util.CameraView
+		android:id="@+id/camera_view"
 		android:layout_width="match_parent"
-		android:layout_height="0dp"
-		android:layout_weight="1"
-		android:background="@android:color/black"
-		android:gravity="center">
+		android:layout_height="match_parent"/>
 
-		<RelativeLayout
+	<LinearLayout
+		android:layout_width="match_parent"
+		android:layout_height="match_parent"
+		android:orientation="vertical">
+
+		<FrameLayout
 			android:layout_width="match_parent"
-			android:layout_height="match_parent"
-			android:background="@android:color/background_light">
+			android:layout_height="0dp"
+			android:layout_weight="1">
 
 			<LinearLayout
+				android:id="@+id/status_container"
 				android:layout_width="match_parent"
-				android:layout_height="wrap_content"
-				android:layout_centerInParent="true"
+				android:layout_height="match_parent"
+				android:background="@android:color/background_light"
 				android:gravity="center"
 				android:orientation="vertical"
-				android:padding="@dimen/margin_medium">
+				android:padding="@dimen/margin_medium"
+				android:visibility="invisible">
 
 				<ProgressBar
 					android:layout_width="wrap_content"
@@ -41,19 +43,25 @@
 					android:paddingTop="@dimen/margin_large"
 					tools:text="Connection failed"/>
 			</LinearLayout>
-		</RelativeLayout>
+		</FrameLayout>
 
-		<org.briarproject.android.util.CameraView
-			android:id="@+id/camera_view"
+		<RelativeLayout
 			android:layout_width="match_parent"
-			android:layout_height="match_parent"/>
-	</FrameLayout>
+			android:layout_height="0dp"
+			android:layout_weight="1"
+			android:background="@android:color/white">
 
-	<ImageView
-		android:id="@+id/qr_code"
-		android:layout_width="match_parent"
-		android:layout_height="0dp"
-		android:layout_weight="1"
-		android:scaleType="fitCenter"/>
+			<ProgressBar
+				android:layout_width="wrap_content"
+				android:layout_height="wrap_content"
+				android:layout_centerInParent="true"
+				android:paddingTop="@dimen/margin_large"/>
 
-</LinearLayout>
\ No newline at end of file
+			<ImageView
+				android:id="@+id/qr_code"
+				android:layout_width="match_parent"
+				android:layout_height="match_parent"
+				android:scaleType="fitCenter"/>
+		</RelativeLayout>
+	</LinearLayout>
+</FrameLayout>
diff --git a/briar-android/res/layout/invitation_bluetooth_confirmation_code.xml b/briar-android/res/layout/invitation_bluetooth_confirmation_code.xml
index 5597f671830ffef312898a352d914e6a7ea16900..25d04b4c5c27d3c8f28d278d4e1636a8c70dc0d3 100644
--- a/briar-android/res/layout/invitation_bluetooth_confirmation_code.xml
+++ b/briar-android/res/layout/invitation_bluetooth_confirmation_code.xml
@@ -18,18 +18,6 @@
 		android:paddingLeft="@dimen/margin_activity_horizontal"
 		android:paddingTop="@dimen/margin_activity_vertical">
 
-		<TextView
-			android:id="@+id/stepView"
-			style="@style/BriarTextBody"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
-			android:layout_gravity="end"
-			android:padding="@dimen/margin_medium"
-			tools:text="Step 3/3"
-			android:layout_alignParentTop="true"
-			android:layout_alignParentRight="true"
-			android:layout_alignParentEnd="true"/>
-
 		<TextView
 			android:id="@+id/connectedView"
 			style="@style/BriarTextTitle"
@@ -38,7 +26,6 @@
 			android:layout_height="wrap_content"
 			android:text="@string/connected_to_contact"
 			android:padding="@dimen/margin_medium"
-			android:layout_below="@+id/stepView"
 			android:layout_centerHorizontal="true"
 			android:drawableLeft="@drawable/navigation_accept"
 			android:drawableStart="@drawable/navigation_accept"
diff --git a/briar-android/res/layout/invitation_bluetooth_invitation_code.xml b/briar-android/res/layout/invitation_bluetooth_invitation_code.xml
index 8bc5319b6218787613f7ba85d1151e9100342782..1d167b27bc8856ca21e37c58a961bcba7b176a6f 100644
--- a/briar-android/res/layout/invitation_bluetooth_invitation_code.xml
+++ b/briar-android/res/layout/invitation_bluetooth_invitation_code.xml
@@ -18,18 +18,6 @@
 		android:paddingLeft="@dimen/margin_activity_horizontal"
 		android:paddingTop="@dimen/margin_activity_vertical">
 
-		<TextView
-			android:id="@+id/stepView"
-			style="@style/BriarTextBody"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
-			android:layout_gravity="end"
-			android:layout_marginTop="@dimen/margin_medium"
-			tools:text="Step 2/3"
-			android:layout_alignParentTop="true"
-			android:layout_alignParentRight="true"
-			android:layout_alignParentEnd="true"/>
-
 		<TextView
 			android:id="@+id/yourCodeView"
 			style="@style/BriarTextBody"
@@ -37,7 +25,6 @@
 			android:layout_height="wrap_content"
 			android:text="@string/your_invitation_code"
 			android:layout_marginTop="@dimen/margin_medium"
-			android:layout_below="@+id/stepView"
 			android:layout_centerHorizontal="true"/>
 
 		<TextView
diff --git a/briar-android/res/layout/invitation_bluetooth_start.xml b/briar-android/res/layout/invitation_bluetooth_start.xml
index 9198f7537fba193244d028c2c5c68d7e0f5e6f3d..7c52215a8b39f3ed8955428aa95dec3193a19c6d 100644
--- a/briar-android/res/layout/invitation_bluetooth_start.xml
+++ b/briar-android/res/layout/invitation_bluetooth_start.xml
@@ -1,69 +1,60 @@
 <?xml version="1.0" encoding="utf-8"?>
 <ScrollView
 	xmlns:android="http://schemas.android.com/apk/res/android"
-	xmlns:tools="http://schemas.android.com/tools"
 	android:layout_width="match_parent"
 	android:layout_height="match_parent">
 
 	<LinearLayout
-		android:orientation="vertical"
 		android:layout_width="match_parent"
 		android:layout_height="wrap_content"
+		android:orientation="vertical"
 		android:paddingBottom="@dimen/margin_activity_vertical"
 		android:paddingEnd="@dimen/margin_activity_horizontal"
+		android:paddingLeft="@dimen/margin_activity_horizontal"
 		android:paddingRight="@dimen/margin_activity_horizontal"
 		android:paddingStart="@dimen/margin_activity_horizontal"
-		android:paddingLeft="@dimen/margin_activity_horizontal"
 		android:paddingTop="@dimen/margin_activity_vertical">
 
-		<TextView
-			android:id="@+id/stepView"
-			style="@style/BriarTextBody"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
-			android:layout_gravity="end"
-			tools:text="Step 1/3"/>
-
 		<TextView
 			android:id="@+id/yourNicknameView"
 			style="@style/BriarTextBody"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:text="@string/your_nickname"
-			android:layout_marginTop="@dimen/margin_medium"/>
+			android:text="@string/your_nickname"/>
 
 		<Spinner
+			android:id="@+id/spinner"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:id="@+id/spinner"
-			android:spinnerMode="dropdown"
-			android:layout_marginTop="@dimen/margin_medium"/>
+			android:background="@drawable/spinner_border"
+			android:layout_marginTop="@dimen/margin_medium"
+			android:spinnerMode="dropdown"/>
 
 		<ImageView
+			android:id="@+id/imageView"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:id="@+id/imageView"
-			android:src="@drawable/bluetooth"
-			android:scaleType="fitCenter"
+			android:layout_marginTop="@dimen/margin_xlarge"
 			android:adjustViewBounds="true"
-			android:layout_marginTop="@dimen/margin_medium"/>
+			android:scaleType="fitCenter"
+			android:src="@drawable/bluetooth"/>
 
 		<TextView
 			android:id="@+id/faceToFaceView"
 			style="@style/BriarTextBody"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:text="@string/face_to_face"
-			android:layout_marginTop="@dimen/margin_medium"/>
+			android:layout_marginTop="@dimen/margin_xlarge"
+			android:text="@string/face_to_face"/>
 
 		<Button
 			android:id="@+id/continueButton"
 			style="@style/BriarButton.Default"
-			android:layout_width="wrap_content"
+			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:text="@string/continue_button"
 			android:layout_gravity="center_horizontal"
-			android:layout_marginTop="@dimen/margin_medium"/>
+			android:layout_marginTop="@dimen/margin_medium"
+			android:text="@string/continue_button"/>
 	</LinearLayout>
 
 </ScrollView>
\ No newline at end of file
diff --git a/briar-android/res/values/color.xml b/briar-android/res/values/color.xml
index 16a1983ed55024640c2080271531e6611435eaa4..9113861d7f84f3126b4cccfd6846d6d63822bd0e 100644
--- a/briar-android/res/values/color.xml
+++ b/briar-android/res/values/color.xml
@@ -39,4 +39,7 @@
 	<color name="default_separator">#000000</color>
 	<color name="default_separator_inverted">#ffffff</color>
 	<color name="menu_background">#FFFFFF</color>
+
+	<color name="spinner_border">#61000000</color> <!-- 38% Black -->
+	<color name="spinner_arrow">@color/briar_blue_dark</color>
 </resources>
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java b/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
index 3a87c7c354ef280c00b3ad4a8c79f8f927b308d7..3f2bc9f451bc82c4849a8cb0cc778b2bd5e0a58b 100644
--- a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
+++ b/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
@@ -1,6 +1,8 @@
 package org.briarproject.android.identity;
 
 import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -97,7 +99,17 @@ public class LocalAuthorSpinnerAdapter extends BaseAdapter
 	}
 
 	public View getView(int position, View convertView, ViewGroup parent) {
-		return getDropDownView(position, convertView, parent);
+		View view = getDropDownView(position, convertView, parent);
+		Drawable d = ctx.getResources()
+				.getDrawable(R.drawable.ic_expand_more_black_24dp);
+		if (d != null) {
+			d.setColorFilter(
+					ctx.getResources().getColor(R.color.spinner_arrow),
+					PorterDuff.Mode.SRC_IN);
+		}
+		((TextView) view.findViewById(R.id.nameView))
+				.setCompoundDrawablesWithIntrinsicBounds(null, null, d, null);
+		return view;
 	}
 
 	@Override
diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
index 1d8b12fe0ac12217cae7d09a7eaafa7b90d5bf0a..2faf5f6193f074e43bc0c43d56794b42fb26365e 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
+++ b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
@@ -36,6 +36,11 @@ implements InvitationListener {
 	static final int REQUEST_BLUETOOTH = 1;
 	static final int REQUEST_CREATE_IDENTITY = 2;
 
+	private static final int STEP_CHOOSE = 1;
+	private static final int STEP_INVITE = 2;
+	private static final int STEP_CONFIRM = 3;
+	private static final int STEPS = 3;
+
 	private static final Logger LOG =
 			Logger.getLogger(AddContactActivity.class.getName());
 
@@ -189,10 +194,23 @@ implements InvitationListener {
 		}
 	}
 
+	@SuppressWarnings("ConstantConditions")
 	void setView(AddContactView view) {
 		this.view = view;
 		view.init(this);
 		setContentView(view);
+
+		int step = 0;
+		if (view instanceof ChooseIdentityView) step = STEP_CHOOSE;
+		else if (view instanceof InvitationCodeView) step = STEP_INVITE;
+		else if (view instanceof ConfirmationCodeView) step = STEP_CONFIRM;
+		if (step > 0) {
+			getSupportActionBar().setTitle(
+					String.format(getString(R.string.add_contact_title_step),
+							step, STEPS));
+		} else {
+			getSupportActionBar().setTitle(R.string.add_contact_title);
+		}
 	}
 
 	void reset(AddContactView view) {
diff --git a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
index 940de7e7594f83fff6a48fd6d1d0062ce8e8f048..4dafd5645260dae7cbcf4f3a3e45a4014646c265 100644
--- a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
@@ -9,7 +9,6 @@ import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.Button;
 import android.widget.Spinner;
-import android.widget.TextView;
 
 import org.briarproject.R;
 import org.briarproject.android.identity.CreateIdentityActivity;
@@ -45,11 +44,6 @@ implements OnItemSelectedListener, OnClickListener {
 				(Context.LAYOUT_INFLATER_SERVICE);
 		View view = inflater.inflate(R.layout.invitation_bluetooth_start, this);
 
-		// current step
-		// TODO this could go into the ActionBar eventually
-		TextView step = (TextView) view.findViewById(R.id.stepView);
-		step.setText(String.format(ctx.getString(R.string.step), 1, 3));
-
 		adapter = new LocalAuthorSpinnerAdapter(ctx, false);
 		spinner = (Spinner) view.findViewById(R.id.spinner);
 		spinner.setAdapter(adapter);
diff --git a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java b/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
index 118744cc928162f3a7db100299932eba5b838065..bfb2cc338cf3e11825326930f7beedf0a51662c9 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
@@ -15,7 +15,6 @@ import android.widget.TextView;
 import org.briarproject.R;
 
 import static android.content.Context.INPUT_METHOD_SERVICE;
-import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 
 class ConfirmationCodeView extends AddContactView {
 
@@ -40,11 +39,6 @@ class ConfirmationCodeView extends AddContactView {
 				(Context.LAYOUT_INFLATER_SERVICE);
 		View view = inflater.inflate(R.layout.invitation_bluetooth_confirmation_code, this);
 
-		// current step
-		// TODO this could go into the ActionBar eventually
-		TextView step = (TextView) view.findViewById(R.id.stepView);
-		step.setText(String.format(ctx.getString(R.string.step), 3, 3));
-
 		// local confirmation code
 		TextView code = (TextView) view.findViewById(R.id.codeView);
 		int localCode = container.getLocalConfirmationCode();
diff --git a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java b/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
index ebd6fcc13eaf79c53a2dd9b64193999877c2b63f..60c221798e502cd0f40dfb5782da0aec5d25bc3f 100644
--- a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
+++ b/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
@@ -15,7 +15,6 @@ import android.widget.TextView;
 import org.briarproject.R;
 
 import static android.content.Context.INPUT_METHOD_SERVICE;
-import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 
 class InvitationCodeView extends AddContactView {
 
@@ -38,11 +37,6 @@ class InvitationCodeView extends AddContactView {
 				(Context.LAYOUT_INFLATER_SERVICE);
 		View view = inflater.inflate(R.layout.invitation_bluetooth_invitation_code, this);
 
-		// current step
-		// TODO this could go into the ActionBar eventually
-		TextView step = (TextView) view.findViewById(R.id.stepView);
-		step.setText(String.format(ctx.getString(R.string.step), 2, 3));
-
 		// local invitation code
 		TextView code = (TextView) view.findViewById(R.id.codeView);
 		int localCode = container.getLocalInvitationCode();
diff --git a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
index 4615cd728625345b440d55e4e4fa8695d3f92e38..16818d36a83d84a1159a651eee0cbc5a582c2c82 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
+++ b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java
@@ -91,7 +91,7 @@ public class ChooseIdentityFragment extends BaseFragment
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
 			Bundle savedInstanceState) {
-		return inflater.inflate(R.layout.invitation_bluetooth_start, container,
+		return inflater.inflate(R.layout.fragment_keyagreement_id, container,
 				false);
 	}
 
@@ -106,13 +106,12 @@ public class ChooseIdentityFragment extends BaseFragment
 
 		button = view.findViewById(R.id.continueButton);
 		button.setEnabled(false);
-		button.setOnClickListener(
-				new OnClickListener() {
-					@Override
-					public void onClick(View view) {
-						lsnr.identitySelected(localAuthorId);
-					}
-				});
+		button.setOnClickListener(new OnClickListener() {
+			@Override
+			public void onClick(View view) {
+				lsnr.identitySelected(localAuthorId);
+			}
+		});
 
 		loadLocalAuthors();
 	}
diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
index ee505a59ea2c90d359972a89b8d5bdd6c9fd375d..cbe175d8e124c968002e17b3e2184a287485bb88 100644
--- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
+++ b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java
@@ -10,13 +10,11 @@ import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.util.Base64;
-import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.AlphaAnimation;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -52,8 +50,6 @@ import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED;
 import static android.bluetooth.BluetoothAdapter.EXTRA_STATE;
 import static android.bluetooth.BluetoothAdapter.STATE_ON;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
 import static android.widget.Toast.LENGTH_LONG;
 import static java.util.logging.Level.WARNING;
 
@@ -78,8 +74,8 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	@IoExecutor
 	protected Executor ioExecutor;
 
-	private LinearLayout qrLayout;
 	private CameraView cameraView;
+	private View statusView;
 	private TextView status;
 	private ImageView qrCode;
 
@@ -119,8 +115,8 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	public void onViewCreated(View view, Bundle savedInstanceState) {
 		super.onViewCreated(view, savedInstanceState);
 
-		qrLayout = (LinearLayout) view.findViewById(R.id.qr_layout);
 		cameraView = (CameraView) view.findViewById(R.id.camera_view);
+		statusView = view.findViewById(R.id.status_container);
 		status = (TextView) view.findViewById(R.id.connect_status);
 		qrCode = (ImageView) view.findViewById(R.id.qr_code);
 	}
@@ -132,10 +128,6 @@ public class ShowQrCodeFragment extends BaseEventFragment
 		getActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
 
 		decoder = new QrCodeDecoder(this);
-
-		Display display = getActivity().getWindowManager().getDefaultDisplay();
-		boolean portrait = display.getWidth() < display.getHeight();
-		qrLayout.setOrientation(portrait ? VERTICAL : HORIZONTAL);
 	}
 
 	@Override
@@ -165,13 +157,13 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	@Override
 	public void onResume() {
 		super.onResume();
-		if (!gotRemotePayload) openCamera();
+		openCamera();
 	}
 
 	@Override
 	public void onPause() {
 		super.onPause();
-		if (!gotRemotePayload) releaseCamera();
+		releaseCamera();
 	}
 
 	@Override
@@ -183,7 +175,6 @@ public class ShowQrCodeFragment extends BaseEventFragment
 
 	private void startListening() {
 		task = keyAgreementTaskFactory.getTask();
-		gotRemotePayload = false;
 		ioExecutor.execute(new Runnable() {
 			@Override
 			public void run() {
@@ -252,9 +243,11 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	}
 
 	private void reset() {
+		statusView.setVisibility(View.INVISIBLE);
 		cameraView.setVisibility(View.VISIBLE);
+		gotRemotePayload = false;
+		cameraView.startConsumer();
 		startListening();
-		openCamera();
 	}
 
 	private void qrCodeScanned(String content) {
@@ -262,7 +255,8 @@ public class ShowQrCodeFragment extends BaseEventFragment
 			// TODO use Base32
 			Payload remotePayload = payloadParser.parse(
 					Base64.decode(content, 0));
-			cameraView.setVisibility(View.GONE);
+			cameraView.setVisibility(View.INVISIBLE);
+			statusView.setVisibility(View.VISIBLE);
 			status.setText(R.string.connecting_to_device);
 			task.connectAndRunProtocol(remotePayload);
 		} catch (IOException e) {
@@ -359,7 +353,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 				LOG.info("Got result from decoder");
 				if (!gotRemotePayload) {
 					gotRemotePayload = true;
-					releaseCamera();
+					cameraView.stopConsumer();
 					qrCodeScanned(result.getText());
 				}
 			}
diff --git a/briar-android/src/org/briarproject/android/util/CameraView.java b/briar-android/src/org/briarproject/android/util/CameraView.java
index 3cceafd500cf7d8fc66501b04875409bb9a1e55f..d3690b1895a78b7d0993c9533b2685fb490a6e83 100644
--- a/briar-android/src/org/briarproject/android/util/CameraView.java
+++ b/briar-android/src/org/briarproject/android/util/CameraView.java
@@ -97,8 +97,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		try {
 			camera.setPreviewDisplay(holder);
 			camera.startPreview();
-			if (autoFocus) camera.autoFocus(this);
-			previewConsumer.start(camera);
+			startConsumer();
 		} catch (IOException | RuntimeException e) {
 			LOG.log(WARNING, "Error starting camera preview", e);
 		}
@@ -106,14 +105,23 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 
 	private void stopPreview() {
 		try {
-			previewConsumer.stop();
-			if (autoFocus) camera.cancelAutoFocus();
+			stopConsumer();
 			camera.stopPreview();
 		} catch (RuntimeException e) {
 			LOG.log(WARNING, "Error stopping camera preview", e);
 		}
 	}
 
+	public void startConsumer() {
+		if (autoFocus) camera.autoFocus(this);
+		previewConsumer.start(camera);
+	}
+
+	public void stopConsumer() {
+		previewConsumer.stop();
+		if (autoFocus) camera.cancelAutoFocus();
+	}
+
 	private void setDisplayOrientation(int rotationDegrees) {
 		int orientation;
 		CameraInfo info = new CameraInfo();
@@ -124,7 +132,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		} else {
 			orientation = (info.orientation - rotationDegrees + 360) % 360;
 		}
-		if(LOG.isLoggable(INFO))
+		if (LOG.isLoggable(INFO))
 			LOG.info("Display orientation " + orientation + " degrees");
 		try {
 			camera.setDisplayOrientation(orientation);
@@ -211,7 +219,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 			}
 		}
 		if (bestSize != null) {
-			if(LOG.isLoggable(INFO))
+			if (LOG.isLoggable(INFO))
 				LOG.info("Best size " + bestSize.width + "x" + bestSize.height);
 			params.setPreviewSize(bestSize.width, bestSize.height);
 		}