diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index 583269766a0b8de9b64d43422d05f04926e86358..74e2b282ab4bcb1e888ef6e0d234dcaf072dc586 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -20,7 +20,7 @@ public class BriarActivity extends RoboFragmentActivity {
 
 	// This build expires on 7 February 2014
 	private static final long EXPIRY_DATE = 1391731200 * 1000L;
-	private static final int PASSWORD_REQUEST_CODE = 1;
+	private static final int REQUEST_PASSWORD = 1;
 
 	private static final Logger LOG =
 			Logger.getLogger(BriarActivity.class.getName());
@@ -45,7 +45,7 @@ public class BriarActivity extends RoboFragmentActivity {
 			if(LOG.isLoggable(INFO)) LOG.info("No password");
 			Intent i = new Intent(this, PasswordActivity.class);
 			i.setFlags(FLAG_ACTIVITY_NO_ANIMATION);
-			startActivityForResult(i, PASSWORD_REQUEST_CODE);
+			startActivityForResult(i, REQUEST_PASSWORD);
 		} else {
 			startAndBindService();
 		}
@@ -53,7 +53,8 @@ public class BriarActivity extends RoboFragmentActivity {
 
 	@Override
 	public void onActivityResult(int request, int result, Intent data) {
-		if(request == PASSWORD_REQUEST_CODE) {
+		super.onActivityResult(request, result, data);
+		if(request == REQUEST_PASSWORD) {
 			if(result == RESULT_OK) startAndBindService();
 			else finish();
 		}
diff --git a/briar-android/src/org/briarproject/android/HomeScreenActivity.java b/briar-android/src/org/briarproject/android/HomeScreenActivity.java
index c299c986a787771b7ff6a15f6867ad01e9735d5c..6caeaf890a313353c5b1ff18506ef699a5c95286 100644
--- a/briar-android/src/org/briarproject/android/HomeScreenActivity.java
+++ b/briar-android/src/org/briarproject/android/HomeScreenActivity.java
@@ -53,9 +53,7 @@ public class HomeScreenActivity extends BriarActivity {
 	@Override
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
-		if(LOG.isLoggable(INFO)) LOG.info("Created");
-		Intent i = getIntent();
-		long handle = i.getLongExtra("briar.LOCAL_AUTHOR_HANDLE", -1);
+		long handle = getIntent().getLongExtra("briar.LOCAL_AUTHOR_HANDLE", -1);
 		if(handle == -1) {
 			// The activity has been launched before
 			showButtons();
diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java
index 485cc19cd355341ab85c1af16c5fbe239302419f..393b981e9760c8e954941af80e1efefc3b0038bc 100644
--- a/briar-android/src/org/briarproject/android/PasswordActivity.java
+++ b/briar-android/src/org/briarproject/android/PasswordActivity.java
@@ -127,7 +127,7 @@ public class PasswordActivity extends RoboActivity {
 					tryAgain();
 				} else {
 					databaseConfig.setEncryptionKey(key);
-					returnOk();
+					setResultAndFinish();
 				}
 			}
 		});
@@ -143,7 +143,7 @@ public class PasswordActivity extends RoboActivity {
 		});
 	}
 
-	private void returnOk() {
+	private void setResultAndFinish() {
 		runOnUiThread(new Runnable() {
 			public void run() {
 				setResult(RESULT_OK);
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index 585f4281a406ce9b67273e65170bb0701584ad93..68b8629ba59b14eeb815bef6689435ee6da4d401 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -6,6 +6,7 @@ import static android.view.View.VISIBLE;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.contact.ReadPrivateMessageActivity.RESULT_PREV_NEXT;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 
@@ -47,6 +48,7 @@ import android.widget.ListView;
 public class ConversationActivity extends RoboActivity
 implements EventListener, OnClickListener, OnItemClickListener {
 
+	private static final int REQUEST_READ_MESSAGE = 2;
 	private static final Logger LOG =
 			Logger.getLogger(ConversationActivity.class.getName());
 
@@ -180,12 +182,10 @@ implements EventListener, OnClickListener, OnItemClickListener {
 
 	@Override
 	public void onActivityResult(int request, int result, Intent data) {
-		if(result == ReadPrivateMessageActivity.RESULT_PREV) {
-			int position = request - 1;
-			if(position >= 0 && position < adapter.getCount())
-				displayMessage(position);
-		} else if(result == ReadPrivateMessageActivity.RESULT_NEXT) {
-			int position = request + 1;
+		super.onActivityResult(request, result, data);
+		if(request == REQUEST_READ_MESSAGE && result == RESULT_PREV_NEXT) {
+			int position = data.getIntExtra("briar.POSITION", -1);
+			if(position == -1) throw new IllegalStateException();
 			if(position >= 0 && position < adapter.getCount())
 				displayMessage(position);
 		}
@@ -244,6 +244,7 @@ implements EventListener, OnClickListener, OnItemClickListener {
 		i.putExtra("briar.MESSAGE_ID", header.getId().getBytes());
 		i.putExtra("briar.CONTENT_TYPE", header.getContentType());
 		i.putExtra("briar.TIMESTAMP", header.getTimestamp());
-		startActivityForResult(i, position);
+		i.putExtra("briar.POSITION", position);
+		startActivityForResult(i, REQUEST_READ_MESSAGE);
 	}
 }
diff --git a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
index 06c72712ac9bd69677663c678065b945bede152d..f26a6a6110c4708cfad5ba2bcae09d7c53a44083 100644
--- a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
@@ -48,8 +48,7 @@ public class ReadPrivateMessageActivity extends RoboActivity
 implements OnClickListener {
 
 	static final int RESULT_REPLY = RESULT_FIRST_USER;
-	static final int RESULT_PREV = RESULT_FIRST_USER + 1;
-	static final int RESULT_NEXT = RESULT_FIRST_USER + 2;
+	static final int RESULT_PREV_NEXT = RESULT_FIRST_USER + 1;
 
 	private static final Logger LOG =
 			Logger.getLogger(ReadPrivateMessageActivity.class.getName());
@@ -60,6 +59,7 @@ implements OnClickListener {
 	private ImageButton readButton = null, prevButton = null, nextButton = null;
 	private ImageButton replyButton = null;
 	private TextView content = null;
+	private int position = -1;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile DatabaseComponent db;
@@ -92,6 +92,8 @@ implements OnClickListener {
 		if(contentType == null) throw new IllegalStateException();
 		timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
 		if(timestamp == -1) throw new IllegalStateException();
+		position = i.getIntExtra("briar.POSITION", -1);
+		if(position == -1) throw new IllegalStateException();
 
 		if(state == null) {
 			read = false;
@@ -262,10 +264,14 @@ implements OnClickListener {
 		if(view == readButton) {
 			setReadInDatabase(!read);
 		} else if(view == prevButton) {
-			setResult(RESULT_PREV);
+			Intent i = new Intent();
+			i.putExtra("briar.POSITION", position - 1);
+			setResult(RESULT_PREV_NEXT, i);
 			finish();
 		} else if(view == nextButton) {
-			setResult(RESULT_NEXT);
+			Intent i = new Intent();
+			i.putExtra("briar.POSITION", position + 1);
+			setResult(RESULT_PREV_NEXT, i);
 			finish();
 		} else if(view == replyButton) {
 			Intent i = new Intent(this, WritePrivateMessageActivity.class);
diff --git a/briar-android/src/org/briarproject/android/groups/GroupActivity.java b/briar-android/src/org/briarproject/android/groups/GroupActivity.java
index f5023b8be8410412c4a8264304ec9e3215539da6..35b230d6d201303671ac22a5cac320a43f2c94c9 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/GroupActivity.java
@@ -6,8 +6,7 @@ import static android.view.View.VISIBLE;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.groups.ReadGroupPostActivity.RESULT_NEXT;
-import static org.briarproject.android.groups.ReadGroupPostActivity.RESULT_PREV;
+import static org.briarproject.android.groups.ReadGroupPostActivity.RESULT_PREV_NEXT;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 
@@ -49,6 +48,7 @@ import android.widget.ListView;
 public class GroupActivity extends RoboActivity implements EventListener,
 OnClickListener, OnItemClickListener {
 
+	private static final int REQUEST_READ_POST = 2;
 	private static final Logger LOG =
 			Logger.getLogger(GroupActivity.class.getName());
 
@@ -170,12 +170,10 @@ OnClickListener, OnItemClickListener {
 
 	@Override
 	public void onActivityResult(int request, int result, Intent data) {
-		if(result == RESULT_PREV) {
-			int position = request - 1;
-			if(position >= 0 && position < adapter.getCount())
-				displayMessage(position);
-		} else if(result == RESULT_NEXT) {
-			int position = request + 1;
+		super.onActivityResult(request, result, data);
+		if(request == REQUEST_READ_POST && result == RESULT_PREV_NEXT) {
+			int position = data.getIntExtra("briar.POSITION", -1);
+			if(position == -1) throw new IllegalStateException();
 			if(position >= 0 && position < adapter.getCount())
 				displayMessage(position);
 		}
@@ -227,13 +225,11 @@ OnClickListener, OnItemClickListener {
 		i.putExtra("briar.GROUP_NAME", groupName);
 		i.putExtra("briar.MESSAGE_ID", item.getId().getBytes());
 		Author author = item.getAuthor();
-		if(author != null) {
-			i.putExtra("briar.AUTHOR_ID", author.getId().getBytes());
-			i.putExtra("briar.AUTHOR_NAME", author.getName());
-		}
+		if(author != null) i.putExtra("briar.AUTHOR_NAME", author.getName());
 		i.putExtra("briar.AUTHOR_STATUS", item.getAuthorStatus().name());
 		i.putExtra("briar.CONTENT_TYPE", item.getContentType());
 		i.putExtra("briar.TIMESTAMP", item.getTimestamp());
-		startActivityForResult(i, position);
+		i.putExtra("briar.POSITION", position);
+		startActivityForResult(i, REQUEST_READ_POST);
 	}
 }
diff --git a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java b/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
index d4591a8e3758456a189fb956148d71fb944e03ad..f0b8ce2129b786e4d5e4498a9dade08f14ac6eb2 100644
--- a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
@@ -47,8 +47,7 @@ public class ReadGroupPostActivity extends RoboActivity
 implements OnClickListener {
 
 	static final int RESULT_REPLY = RESULT_FIRST_USER;
-	static final int RESULT_PREV = RESULT_FIRST_USER + 1;
-	static final int RESULT_NEXT = RESULT_FIRST_USER + 2;
+	static final int RESULT_PREV_NEXT = RESULT_FIRST_USER + 1;
 
 	private static final Logger LOG =
 			Logger.getLogger(ReadGroupPostActivity.class.getName());
@@ -58,6 +57,7 @@ implements OnClickListener {
 	private ImageButton readButton = null, prevButton = null, nextButton = null;
 	private ImageButton replyButton = null;
 	private TextView content = null;
+	private int position = -1;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile DatabaseComponent db;
@@ -84,6 +84,8 @@ implements OnClickListener {
 		if(contentType == null) throw new IllegalStateException();
 		timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
 		if(timestamp == -1) throw new IllegalStateException();
+		position = i.getIntExtra("briar.POSITION", -1);
+		if(position == -1) throw new IllegalStateException();
 		String authorName = i.getStringExtra("briar.AUTHOR_NAME");
 		String s = i.getStringExtra("briar.AUTHOR_STATUS");
 		if(s == null) throw new IllegalStateException();
@@ -258,10 +260,14 @@ implements OnClickListener {
 		if(view == readButton) {
 			setReadInDatabase(!read);
 		} else if(view == prevButton) {
-			setResult(RESULT_PREV);
+			Intent i = new Intent();
+			i.putExtra("briar.POSITION", position - 1);
+			setResult(RESULT_PREV_NEXT, i);
 			finish();
 		} else if(view == nextButton) {
-			setResult(RESULT_NEXT);
+			Intent i = new Intent();
+			i.putExtra("briar.POSITION", position + 1);
+			setResult(RESULT_PREV_NEXT, i);
 			finish();
 		} else if(view == replyButton) {
 			Intent i = new Intent(this, WriteGroupPostActivity.class);
diff --git a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
index 9c9e020bdf6157c06314cdd2f00bb4819fde1b16..839461373b16e211d3be5f3a3e9fbfc0584ce791 100644
--- a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
@@ -61,6 +61,7 @@ import android.widget.Toast;
 public class WriteGroupPostActivity extends RoboActivity
 implements OnItemSelectedListener, OnClickListener {
 
+	private static final int REQUEST_CREATE_IDENTITY = 2;
 	private static final Logger LOG =
 			Logger.getLogger(WriteGroupPostActivity.class.getName());
 
@@ -219,12 +220,13 @@ implements OnItemSelectedListener, OnClickListener {
 
 	@Override
 	protected void onActivityResult(int request, int result, Intent data) {
-		// This is the result of CreateIdentityActivity
-		if(result == RESULT_CANCELED) return;
-		byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
-		if(b == null) throw new IllegalStateException();
-		localAuthorId = new AuthorId(b);
-		loadAuthorsAndGroup();
+		super.onActivityResult(request, result, data);
+		if(request == REQUEST_CREATE_IDENTITY && result == RESULT_OK) {
+			byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
+			if(b == null) throw new IllegalStateException();
+			localAuthorId = new AuthorId(b);
+			loadAuthorsAndGroup();
+		}
 	}
 
 	public void onItemSelected(AdapterView<?> parent, View view, int position,
@@ -237,7 +239,7 @@ implements OnItemSelectedListener, OnClickListener {
 			localAuthor = null;
 			localAuthorId = null;
 			Intent i = new Intent(this, CreateIdentityActivity.class);
-			startActivityForResult(i, 0);
+			startActivityForResult(i, REQUEST_CREATE_IDENTITY);
 		} else {
 			localAuthor = item.getLocalAuthor();
 			localAuthorId = localAuthor.getId();