diff --git a/briar-android/src/net/sf/briar/android/helloworld/HelloWorldActivity.java b/briar-android/src/net/sf/briar/android/helloworld/HelloWorldActivity.java
index e253024c6064978ea7d1cc29fc57576c2c5d3fc2..618160bc6cf12ca20230e4bf8d7a4ca17fe1c69f 100644
--- a/briar-android/src/net/sf/briar/android/helloworld/HelloWorldActivity.java
+++ b/briar-android/src/net/sf/briar/android/helloworld/HelloWorldActivity.java
@@ -8,9 +8,13 @@ import static java.util.logging.Level.INFO;
 
 import java.util.logging.Logger;
 
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
 import net.sf.briar.R;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.invitation.AddContactActivity;
+import net.sf.briar.api.android.BundleEncrypter;
 import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -27,8 +31,14 @@ implements OnClickListener {
 	private static final Logger LOG =
 			Logger.getLogger(HelloWorldActivity.class.getName());
 
+	@Inject private static Provider<BundleEncrypter> bundleEncrypterProvider;
+
+	private final BundleEncrypter bundleEncrypter =
+			bundleEncrypterProvider.get();
+
 	@Override
 	public void onCreate(Bundle state) {
+		if(state != null && !bundleEncrypter.decrypt(state)) state = null;
 		super.onCreate(state);
 		if(LOG.isLoggable(INFO)) LOG.info("Created");
 		LinearLayout layout = new LinearLayout(this);
@@ -60,6 +70,18 @@ implements OnClickListener {
 		startService(new Intent(BriarService.class.getName()));
 	}
 
+	@Override
+	public void onRestoreInstanceState(Bundle state) {
+		if(bundleEncrypter.decrypt(state))
+			super.onRestoreInstanceState(state);
+	}
+
+	@Override
+	public void onSaveInstanceState(Bundle state) {
+		super.onSaveInstanceState(state);
+		bundleEncrypter.encrypt(state);
+	}
+
 	@Override
 	public void onDestroy() {
 		super.onDestroy();
diff --git a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
index 4b25d2a8949507fde50c1656a256a74ca5f5e8fd..bc229df0385b42f3d6680f4fc40a4db4a6aa7338 100644
--- a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
+++ b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
@@ -53,13 +53,13 @@ implements InvitationListener {
 
 	@Override
 	public void onCreate(Bundle state) {
-		if(state == null || !bundleEncrypter.decrypt(state)) {
-			// This is a new activity or the process has restarted
-			super.onCreate(null);
+		if(state != null && !bundleEncrypter.decrypt(state)) state = null;
+		super.onCreate(state);
+		if(state == null) {
+			// This is a new activity or the app has restarted
 			setView(new NetworkSetupView(this));
 		} else {
 			// Restore the activity's state
-			super.onCreate(state);
 			networkName = state.getString("net.sf.briar.NETWORK_NAME");
 			useBluetooth = state.getBoolean("net.sf.briar.USE_BLUETOOTH");
 			taskHandle = state.getLong("net.sf.briar.TASK_HANDLE", -1);