diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
index ac321b93a01c97cde46bbf609858c5fb8d9d3704..7fa673e49826636ff5532b5aee63caa58ea79760 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
+++ b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
@@ -12,9 +12,6 @@ import javax.inject.Inject;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
-import org.briarproject.android.identity.LocalAuthorItem;
-import org.briarproject.android.identity.LocalAuthorItemComparator;
-import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
 import org.briarproject.api.AuthorId;
 import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.android.DatabaseUiExecutor;
@@ -35,6 +32,9 @@ import android.widget.Toast;
 public class AddContactActivity extends BriarActivity
 implements InvitationListener {
 
+	static final int REQUEST_BLUETOOTH = 1;
+	static final int REQUEST_CREATE_IDENTITY = 2;
+
 	private static final Logger LOG =
 			Logger.getLogger(AddContactActivity.class.getName());
 
@@ -169,9 +169,14 @@ implements InvitationListener {
 
 	@Override
 	public void onActivityResult(int request, int result, Intent data) {
-		// This is the result of enabling Bluetooth
-		if(result != RESULT_CANCELED)
-			reset(new InvitationCodeView(this));
+		if(request == REQUEST_BLUETOOTH) {
+			if(result != RESULT_CANCELED) reset(new InvitationCodeView(this));
+		} else 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);
+			setView(new ChooseIdentityView(this));
+		}
 	}
 
 	void setView(AddContactView view) {
@@ -193,17 +198,17 @@ implements InvitationListener {
 		setView(view);
 	}
 
-	void loadLocalAuthors(final LocalAuthorSpinnerAdapter adapter) {
+	void loadLocalAuthors() {
 		dbUiExecutor.execute(new Runnable() {
 			public void run() {
 				try {
 					lifecycleManager.waitForDatabase();
 					long now = System.currentTimeMillis();
-					Collection<LocalAuthor> localAuthors = db.getLocalAuthors();
+					Collection<LocalAuthor> authors = db.getLocalAuthors();
 					long duration = System.currentTimeMillis() - now;
 					if(LOG.isLoggable(INFO))
 						LOG.info("Loading authors took " + duration + " ms");
-					displayLocalAuthors(adapter, localAuthors);
+					displayLocalAuthors(authors);
 				} catch(DbException e) {
 					if(LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -215,16 +220,13 @@ implements InvitationListener {
 		});
 	}
 
-	private void displayLocalAuthors(final LocalAuthorSpinnerAdapter adapter,
-			final Collection<LocalAuthor> localAuthors) {
+	// FIXME: The interaction between views and the container is horrible
+	private void displayLocalAuthors(final Collection<LocalAuthor> authors) {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				if(localAuthors.isEmpty()) throw new IllegalStateException();
-				adapter.clear();
-				for(LocalAuthor a : localAuthors)
-					adapter.add(new LocalAuthorItem(a));
-				adapter.sort(LocalAuthorItemComparator.INSTANCE);
-				adapter.notifyDataSetChanged();
+				AddContactView view = AddContactActivity.this.view;
+				if(view instanceof ChooseIdentityView)
+					((ChooseIdentityView) view).displayLocalAuthors(authors);
 			}
 		});
 	}
diff --git a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
index e6593fed0752bb135d8e011be4a6cfaa6b91d435..81070413db31deec48454ff39114d516ccd4673b 100644
--- a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
@@ -4,13 +4,20 @@ import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
 import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
 import static android.view.Gravity.CENTER;
 import static org.briarproject.android.identity.LocalAuthorItem.NEW;
+import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
+import static org.briarproject.android.invitation.AddContactActivity.REQUEST_CREATE_IDENTITY;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
 
+import java.util.Collection;
+
 import org.briarproject.R;
 import org.briarproject.android.identity.CreateIdentityActivity;
 import org.briarproject.android.identity.LocalAuthorItem;
+import org.briarproject.android.identity.LocalAuthorItemComparator;
 import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
+import org.briarproject.api.AuthorId;
+import org.briarproject.api.LocalAuthor;
 
 import android.content.Context;
 import android.content.Intent;
@@ -53,7 +60,6 @@ implements OnItemSelectedListener, OnClickListener {
 		spinner = new Spinner(ctx);
 		spinner.setAdapter(adapter);
 		spinner.setOnItemSelectedListener(this);
-		container.loadLocalAuthors(adapter);
 		innerLayout.addView(spinner);
 		addView(innerLayout);
 
@@ -68,6 +74,28 @@ implements OnItemSelectedListener, OnClickListener {
 		continueButton.setText(R.string.continue_button);
 		continueButton.setOnClickListener(this);
 		addView(continueButton);
+
+		container.loadLocalAuthors();
+	}
+
+	// FIXME: The interaction between views and the container is horrible
+	void displayLocalAuthors(Collection<LocalAuthor> authors) {
+		adapter.clear();
+		for(LocalAuthor a : authors) adapter.add(new LocalAuthorItem(a));
+		adapter.sort(LocalAuthorItemComparator.INSTANCE);
+		adapter.notifyDataSetChanged();
+		// If a local author has been selected, select it again
+		AuthorId localAuthorId = container.getLocalAuthorId();
+		if(localAuthorId == null) return;
+		int count = adapter.getCount();
+		for(int i = 0; i < count; i++) {
+			LocalAuthorItem item = adapter.getItem(i);
+			if(item == NEW) continue;
+			if(item.getLocalAuthor().getId().equals(localAuthorId)) {
+				spinner.setSelection(i);
+				return;
+			}
+		}
 	}
 
 	public void onItemSelected(AdapterView<?> parent, View view, int position,
@@ -76,7 +104,7 @@ implements OnItemSelectedListener, OnClickListener {
 		if(item == NEW) {
 			container.setLocalAuthorId(null);
 			Intent i = new Intent(container, CreateIdentityActivity.class);
-			container.startActivity(i);
+			container.startActivityForResult(i, REQUEST_CREATE_IDENTITY);
 		} else {
 			container.setLocalAuthorId(item.getLocalAuthor().getId());
 		}
@@ -89,6 +117,6 @@ implements OnItemSelectedListener, OnClickListener {
 	public void onClick(View view) {
 		Intent i = new Intent(ACTION_REQUEST_DISCOVERABLE);
 		i.putExtra(EXTRA_DISCOVERABLE_DURATION, 120);
-		container.startActivityForResult(i, 0);
+		container.startActivityForResult(i, REQUEST_BLUETOOTH);
 	}
 }