diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java
index b42007acb1746727e7bed6b2e8249f7e2ea33047..0e13fbd0d7aa59311bf86b0b664a8afd6bfc5f46 100644
--- a/briar-android/src/org/briarproject/android/ActivityModule.java
+++ b/briar-android/src/org/briarproject/android/ActivityModule.java
@@ -10,6 +10,8 @@ import org.briarproject.android.controller.BriarController;
 import org.briarproject.android.controller.BriarControllerImpl;
 import org.briarproject.android.controller.ConfigController;
 import org.briarproject.android.controller.ConfigControllerImpl;
+import org.briarproject.android.controller.DbController;
+import org.briarproject.android.controller.DbControllerImpl;
 import org.briarproject.android.controller.NavDrawerController;
 import org.briarproject.android.controller.NavDrawerControllerImpl;
 import org.briarproject.android.controller.PasswordController;
@@ -89,6 +91,13 @@ public class ActivityModule {
 		return briarControllerImpl;
 	}
 
+	@ActivityScope
+	@Provides
+	protected DbController provideDBController(
+			DbControllerImpl dbController) {
+		return dbController;
+	}
+
 	@ActivityScope
 	@Provides
 	protected NavDrawerController provideNavDrawerController(
diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index ed9c8dd87e4d32e805a763f4d7840289c82564cb..24cc0dd974c3b9dc03ca8e0ccecf5b76d89b46e8 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -5,6 +5,7 @@ import android.content.Intent;
 import android.os.Build;
 
 import org.briarproject.android.controller.BriarController;
+import org.briarproject.android.controller.DbController;
 import org.briarproject.android.controller.handler.UiResultHandler;
 import org.briarproject.android.panic.ExitActivity;
 
@@ -33,6 +34,9 @@ public abstract class BriarActivity extends BaseActivity {
 
 	@Inject
 	protected BriarController briarController;
+	// TODO remove this when the deprecated method runOnDbThread is removed
+	@Inject
+	protected DbController dbController;
 
 	@Override
 	protected void onActivityResult(int request, int result, Intent data) {
@@ -87,7 +91,7 @@ public abstract class BriarActivity extends BaseActivity {
 
 	@Deprecated
 	public void runOnDbThread(Runnable task) {
-		briarController.runOnDbThread(task);
+		dbController.runOnDbThread(task);
 	}
 
 	@Deprecated
diff --git a/briar-android/src/org/briarproject/android/NavDrawerActivity.java b/briar-android/src/org/briarproject/android/NavDrawerActivity.java
index 56caa5c8fbb48f7a266a4a143c32ddfd44e68fb7..3c61bbf4883ae8fe5754c69c8d6cbb89b6750cb6 100644
--- a/briar-android/src/org/briarproject/android/NavDrawerActivity.java
+++ b/briar-android/src/org/briarproject/android/NavDrawerActivity.java
@@ -45,6 +45,8 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 	public static final String INTENT_CONTACTS = "intent_contacts";
 	public static final String INTENT_FORUMS = "intent_forums";
 
+	private static final String KEY_CURRENT_FRAGMENT_ID = "key_current_id";
+
 	private static final Logger LOG =
 			Logger.getLogger(NavDrawerActivity.class.getName());
 
@@ -60,18 +62,18 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 
 	private List<Transport> transports;
 	private BaseAdapter transportsAdapter;
+	private int currentFragmentId = R.id.nav_btn_contacts;
 
 	@Override
 	protected void onNewIntent(Intent intent) {
 		super.onNewIntent(intent);
-		if (!isStartupFailed(intent)) {
-			checkAuthorHandle(intent);
-			clearBackStack();
-			if (intent.getBooleanExtra(INTENT_FORUMS, false))
-				startFragment(activityComponent.newForumListFragment());
-			else if (intent.getBooleanExtra(INTENT_CONTACTS, false))
-				startFragment(activityComponent.newContactListFragment());
-		}
+		exitIfStartupFailed(intent);
+		checkAuthorHandle(intent);
+		clearBackStack();
+		if (intent.getBooleanExtra(INTENT_FORUMS, false))
+			startFragment(activityComponent.newForumListFragment());
+		else if (intent.getBooleanExtra(INTENT_CONTACTS, false))
+			startFragment(activityComponent.newContactListFragment());
 	}
 
 	@Override
@@ -83,10 +85,7 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 	@Override
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
-
-		if (isStartupFailed(getIntent()))
-			return;
-
+		exitIfStartupFailed(getIntent());
 		setContentView(R.layout.activity_nav_drawer);
 
 		toolbar = (Toolbar) findViewById(R.id.toolbar);
@@ -103,8 +102,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 				R.string.nav_drawer_open_description,
 				R.string.nav_drawer_close_description);
 		drawerLayout.setDrawerListener(drawerToggle);
-		if (state == null)
+		if (state == null) {
 			startFragment(activityComponent.newContactListFragment());
+		} else {
+			currentFragmentId = state.getInt(KEY_CURRENT_FRAGMENT_ID);
+			loadCurrentFragment();
+		}
 		checkAuthorHandle(getIntent());
 
 		initializeTransports(getLayoutInflater());
@@ -113,6 +116,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		welcomeMessageCheck();
 	}
 
+	@Override
+	public void onSaveInstanceState(Bundle outState) {
+		super.onSaveInstanceState(outState);
+		outState.putInt(KEY_CURRENT_FRAGMENT_ID, currentFragmentId);
+	}
+
 	private void welcomeMessageCheck() {
 		SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
 		if (!prefs.getBoolean(PREF_SEEN_WELCOME_MESSAGE, false)) {
@@ -140,14 +149,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		}
 	}
 
-	private boolean isStartupFailed(Intent intent) {
+	private void exitIfStartupFailed(Intent intent) {
 		if (intent.getBooleanExtra(KEY_STARTUP_FAILED, false)) {
 			finish();
 			LOG.info("Exiting");
 			System.exit(0);
-			return true;
 		}
-		return false;
 	}
 
 	private void storeLocalAuthor(LocalAuthor a) {
@@ -159,10 +166,8 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		});
 	}
 
-	public void onNavigationClick(View view) {
-		drawerLayout.closeDrawer(START);
-		clearBackStack();
-		switch (view.getId()) {
+	private void loadCurrentFragment() {
+		switch (currentFragmentId) {
 			case R.id.nav_btn_contacts:
 				startFragment(activityComponent.newContactListFragment());
 				break;
@@ -178,6 +183,13 @@ public class NavDrawerActivity extends BriarFragmentActivity implements
 		}
 	}
 
+	public void onNavigationClick(View view) {
+		drawerLayout.closeDrawer(START);
+		clearBackStack();
+		currentFragmentId = view.getId();
+		loadCurrentFragment();
+	}
+
 
 	@Override
 	public void onBackPressed() {
diff --git a/briar-android/src/org/briarproject/android/controller/BriarController.java b/briar-android/src/org/briarproject/android/controller/BriarController.java
index e2253c3dc76723f76891f331e23f4aed854763be..cbb61cde1e58c3b94d0005ed0fc398bef24f7dde 100644
--- a/briar-android/src/org/briarproject/android/controller/BriarController.java
+++ b/briar-android/src/org/briarproject/android/controller/BriarController.java
@@ -4,8 +4,6 @@ import org.briarproject.android.controller.handler.ResultHandler;
 
 public interface BriarController extends ActivityLifecycleController {
 
-	void runOnDbThread(final Runnable task);
-
 	void startAndBindService();
 
 	boolean hasEncryptionKey();
diff --git a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java b/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java
index 337e0436e3646974e532a6a5907306d8c2b3e5cc..7dd180a448b0b9fbc3b31204e44ad38f918c1337 100644
--- a/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/controller/BriarControllerImpl.java
@@ -9,10 +9,7 @@ import org.briarproject.android.BriarService;
 import org.briarproject.android.BriarService.BriarServiceConnection;
 import org.briarproject.android.controller.handler.ResultHandler;
 import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.api.db.DatabaseExecutor;
-import org.briarproject.api.lifecycle.LifecycleManager;
 
-import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import javax.inject.Inject;
@@ -29,13 +26,6 @@ public class BriarControllerImpl implements BriarController {
 	@Inject
 	protected Activity activity;
 
-	// Fields that are accessed from background threads must be volatile
-	@Inject
-	@DatabaseExecutor
-	protected volatile Executor dbExecutor;
-	@Inject
-	protected volatile LifecycleManager lifecycleManager;
-
 	private boolean bound = false;
 
 	@Inject
@@ -100,23 +90,8 @@ public class BriarControllerImpl implements BriarController {
 		}.start();
 	}
 
-	private void unbindService() {
+	protected void unbindService() {
 		if (bound) activity.unbindService(serviceConnection);
 	}
 
-	@Override
-	public void runOnDbThread(final Runnable task) {
-		dbExecutor.execute(new Runnable() {
-			@Override
-			public void run() {
-				try {
-					lifecycleManager.waitForDatabase();
-					task.run();
-				} catch (InterruptedException e) {
-					LOG.warning("Interrupted while waiting for database");
-					Thread.currentThread().interrupt();
-				}
-			}
-		});
-	}
 }
diff --git a/briar-android/src/org/briarproject/android/controller/DbController.java b/briar-android/src/org/briarproject/android/controller/DbController.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0c186bf3485f062e3cc1fa93f7d60bf213d0d1b
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/controller/DbController.java
@@ -0,0 +1,6 @@
+package org.briarproject.android.controller;
+
+public interface DbController {
+
+	void runOnDbThread(Runnable task);
+}
diff --git a/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java b/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..14f5d41aee85232372bddc96743962c10ad150c5
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/controller/DbControllerImpl.java
@@ -0,0 +1,43 @@
+package org.briarproject.android.controller;
+
+import org.briarproject.api.db.DatabaseExecutor;
+import org.briarproject.api.lifecycle.LifecycleManager;
+
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+public class DbControllerImpl implements DbController {
+
+	private static final Logger LOG =
+			Logger.getLogger(DbControllerImpl.class.getName());
+
+	// Fields that are accessed from background threads must be volatile
+	@Inject
+	@DatabaseExecutor
+	protected volatile Executor dbExecutor;
+	@Inject
+	protected volatile LifecycleManager lifecycleManager;
+
+	@Inject
+	public DbControllerImpl() {
+
+	}
+
+	@Override
+	public void runOnDbThread(final Runnable task) {
+		dbExecutor.execute(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					lifecycleManager.waitForDatabase();
+					task.run();
+				} catch (InterruptedException e) {
+					LOG.warning("Interrupted while waiting for database");
+					Thread.currentThread().interrupt();
+				}
+			}
+		});
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java b/briar-android/src/org/briarproject/android/controller/NavDrawerController.java
index db389706b4b8c8586b61a1ef66ab263740157925..a2f339990f0bf8915c885822d287c599394c0e78 100644
--- a/briar-android/src/org/briarproject/android/controller/NavDrawerController.java
+++ b/briar-android/src/org/briarproject/android/controller/NavDrawerController.java
@@ -4,7 +4,7 @@ import org.briarproject.android.controller.handler.UiResultHandler;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.identity.LocalAuthor;
 
-public interface NavDrawerController extends BriarController {
+public interface NavDrawerController extends ActivityLifecycleController {
 
 	void setTransportListener(TransportStateListener transportListener);
 
diff --git a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java b/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java
index 651f60bcbd304aec89b6a7f7f95d498e652cf942..7ca4fe4758440d7bd6c4664ce817e369979a9db5 100644
--- a/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/controller/NavDrawerControllerImpl.java
@@ -23,7 +23,7 @@ import javax.inject.Inject;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 
-public class NavDrawerControllerImpl extends BriarControllerImpl
+public class NavDrawerControllerImpl extends DbControllerImpl
 		implements NavDrawerController, EventListener {
 
 	private static final Logger LOG =
@@ -51,21 +51,24 @@ public class NavDrawerControllerImpl extends BriarControllerImpl
 
 	@Override
 	public void onActivityCreate() {
-		super.onActivityCreate();
+
 	}
 
 	@Override
 	public void onActivityResume() {
-		super.onActivityResume();
 		eventBus.addListener(this);
 	}
 
 	@Override
 	public void onActivityPause() {
-		super.onActivityPause();
 		eventBus.removeListener(this);
 	}
 
+	@Override
+	public void onActivityDestroy() {
+
+	}
+
 	@Override
 	public void eventOccurred(Event e) {
 		if (e instanceof TransportEnabledEvent) {
@@ -131,4 +134,5 @@ public class NavDrawerControllerImpl extends BriarControllerImpl
 	public LocalAuthor removeAuthorHandle(long handle) {
 		return referenceManager.removeReference(handle, LocalAuthor.class);
 	}
+
 }