diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml
index f941a604ad678e49731fe01815cfed7ef5d3f70b..4d65c1f3d6fff1e87f809229bbe4c59d505a2b0e 100644
--- a/briar-android/AndroidManifest.xml
+++ b/briar-android/AndroidManifest.xml
@@ -23,7 +23,7 @@
 
 	<application
 		android:name=".android.BriarApplication"
-		android:theme="@style/LightTheme"
+		android:theme="@style/BriarTheme"
 		android:icon="@drawable/ic_launcher"
 		android:label="@string/app_name"
 		android:allowBackup="false" >
diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index f66cb4b952ec31be56b6d7e89637674d793f1817..3e6d17c84737136c217d1038a2df68590f3a43aa 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -6,6 +6,7 @@ dependencies {
     compile fileTree(dir: '../briar-core/libs', include: '*.jar')
     compile project(':briar-core')
     compile fileTree(dir: 'libs', include: '*.jar')
+    compile "com.android.support:appcompat-v7:23.1.1"
 }
 
 android {
diff --git a/briar-android/libs/android-support-v4.jar b/briar-android/libs/android-support-v4.jar
deleted file mode 100644
index 96644edbead012ad77a137527841284253f709d6..0000000000000000000000000000000000000000
Binary files a/briar-android/libs/android-support-v4.jar and /dev/null differ
diff --git a/briar-android/res/values-v14/styles.xml b/briar-android/res/values-v14/styles.xml
index c1fc08f072d372b00cab63c2724370d4671ef3fc..898a9e4e00922099b9c011de41d77c77cb61b1f3 100644
--- a/briar-android/res/values-v14/styles.xml
+++ b/briar-android/res/values-v14/styles.xml
@@ -1,15 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-	<style name="LightTheme" parent="android:Theme.Holo.Light.DarkActionBar">
-        <item name="android:actionBarStyle">@style/CustomActionBar</item>
-        <item name="android:windowBackground">@color/window_background</item>
-    </style>
-    <style name="CustomActionBar"
-           parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
-        <item name="android:textColor">@color/action_bar_text</item>
-        <item name="android:background">@color/action_bar_background</item>
-    </style>
-
     <style name="BriarButton.Default">
         <item name="android:textAllCaps">true</item>
     </style>
diff --git a/briar-android/res/values/color.xml b/briar-android/res/values/color.xml
index 18e88d64c8bdc0a9de6a0259c71600308856f34b..2f73069b46a3e003bc9496e9eb66cdd9c6b62edc 100644
--- a/briar-android/res/values/color.xml
+++ b/briar-android/res/values/color.xml
@@ -15,5 +15,8 @@
 	<color name="settings_title_text">#2D3E50</color>
 	<color name="settings_title_underline">#2D3E50</color>
 
-    <color name="text_link">#2D3E50</color>
+    <color name="briar_text_link">#2D3E50</color>
+    <color name="briar_green_light">#95d220</color>
+    <color name="briar_green_dark">#75ab0d</color>
+    <color name="briar_text_primary">#333333</color>
 </resources>
\ No newline at end of file
diff --git a/briar-android/res/values/styles.xml b/briar-android/res/values/styles.xml
index 4c59289224e3ce9f970a34d2881a585bde2329c2..51b24afb0ae7eaf6c943b1642d720309fea9b7a7 100644
--- a/briar-android/res/values/styles.xml
+++ b/briar-android/res/values/styles.xml
@@ -1,10 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="LightTheme" parent="android:Theme.Light">
-        <item name="android:windowTitleStyle">@style/WindowTitle</item>
-        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
-        <item name="android:windowBackground">@color/window_background</item>
+
+    <style name="BriarTheme" parent="Theme.AppCompat.Light">
+        <item name="actionBarStyle">@style/BriarActionBar</item>
+        <item name="colorPrimary">@color/briar_green_light</item>
+        <item name="colorPrimaryDark">@color/briar_green_dark</item>
+        <item name="android:textColorPrimary">@color/briar_text_primary</item>
+        <item name="android:textColorLink">@color/briar_text_link</item>
+
+        <!-- The rest of your attributes -->
     </style>
+
+    <style name="BriarActionBar" parent="Base.Widget.AppCompat.Light.ActionBar.Solid">
+        <item name="elevation">1dp</item>
+    </style>
+
     <style name="WindowTitle">
         <item name="android:paddingLeft">5dp</item>
         <item name="android:textColor">@color/action_bar_text</item>
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index f2b2fdeefb8c67c36cfedefca47c5de545df7cd8..ebba1b22e2e9e36179189106d0d4d2ef19ed9501 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -1,28 +1,129 @@
 package org.briarproject.android;
 
-import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
-import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
-import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.res.Configuration;
 import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
 import android.view.inputmethod.InputMethodManager;
 
-import roboguice.activity.RoboActivity;
+import com.google.inject.Inject;
+import com.google.inject.Key;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import roboguice.RoboGuice;
+import roboguice.activity.event.OnActivityResultEvent;
+import roboguice.activity.event.OnConfigurationChangedEvent;
+import roboguice.activity.event.OnContentChangedEvent;
+import roboguice.activity.event.OnCreateEvent;
+import roboguice.activity.event.OnDestroyEvent;
+import roboguice.activity.event.OnNewIntentEvent;
+import roboguice.activity.event.OnPauseEvent;
+import roboguice.activity.event.OnRestartEvent;
+import roboguice.activity.event.OnResumeEvent;
+import roboguice.activity.event.OnStartEvent;
+import roboguice.activity.event.OnStopEvent;
+import roboguice.event.EventManager;
+import roboguice.inject.ContentViewListener;
+import roboguice.inject.RoboInjector;
+import roboguice.util.RoboContext;
+
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
+import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
 
-public abstract class BaseActivity extends RoboActivity {
+public abstract class BaseActivity extends AppCompatActivity implements RoboContext {
 
 	private final static String PREFS_DB = "db";
 	private final static String KEY_DB_KEY = "key";
 
+	protected EventManager eventManager;
+	protected HashMap<Key<?>, Object> scopedObjects = new HashMap();
+	@Inject
+	ContentViewListener ignored;
+
 	@Override
 	public void onCreate(Bundle savedInstanceState) {
+		RoboInjector injector = RoboGuice.getInjector(this);
+		this.eventManager = (EventManager) injector.getInstance(EventManager.class);
+		injector.injectMembersWithoutViews(this);
 		super.onCreate(savedInstanceState);
+		this.eventManager.fire(new OnCreateEvent(savedInstanceState));
 
 		if (PREVENT_SCREENSHOTS) getWindow().addFlags(FLAG_SECURE);
 	}
 
+	protected void onRestart() {
+		super.onRestart();
+		this.eventManager.fire(new OnRestartEvent());
+	}
+
+	protected void onStart() {
+		super.onStart();
+		this.eventManager.fire(new OnStartEvent());
+	}
+
+	protected void onResume() {
+		super.onResume();
+		this.eventManager.fire(new OnResumeEvent());
+	}
+
+	protected void onPause() {
+		super.onPause();
+		this.eventManager.fire(new OnPauseEvent());
+	}
+
+	protected void onNewIntent(Intent intent) {
+		super.onNewIntent(intent);
+		this.eventManager.fire(new OnNewIntentEvent());
+	}
+
+	protected void onStop() {
+		try {
+			this.eventManager.fire(new OnStopEvent());
+		} finally {
+			super.onStop();
+		}
+
+	}
+
+	protected void onDestroy() {
+		try {
+			this.eventManager.fire(new OnDestroyEvent());
+		} finally {
+			try {
+				RoboGuice.destroyInjector(this);
+			} finally {
+				super.onDestroy();
+			}
+		}
+
+	}
+
+	public void onConfigurationChanged(Configuration newConfig) {
+		Configuration currentConfig = this.getResources().getConfiguration();
+		super.onConfigurationChanged(newConfig);
+		this.eventManager.fire(new OnConfigurationChangedEvent(currentConfig, newConfig));
+	}
+
+	public void onContentChanged() {
+		super.onContentChanged();
+		RoboGuice.getInjector(this).injectViewMembers(this);
+		this.eventManager.fire(new OnContentChangedEvent());
+	}
+
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+		this.eventManager.fire(new OnActivityResultEvent(requestCode, resultCode, data));
+	}
+
+	@Override
+	public Map<Key<?>, Object> getScopedObjectMap() {
+		return this.scopedObjects;
+	}
+
 	private SharedPreferences getBriarPrefs(String prefsName) {
 		return getSharedPreferences(prefsName, MODE_PRIVATE);
 	}
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index 6c4bd724b7b2a20984c653f61d31b5ffaeac38ef..46778711ae4e32ab99b8689672c8b7b4998ebf4e 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -1,42 +1,5 @@
 package org.briarproject.android;
 
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.ScrollView;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import org.briarproject.R;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.android.util.StrengthMeter;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.LocalAuthor;
-import org.briarproject.api.android.ReferenceManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.util.StringUtils;
-
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import roboguice.activity.RoboActivity;
-
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.text.InputType.TYPE_CLASS_TEXT;
 import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
@@ -56,7 +19,43 @@ import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
 import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
 
-public class SetupActivity extends RoboActivity implements OnClickListener,
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.android.util.StrengthMeter;
+import org.briarproject.api.AuthorFactory;
+import org.briarproject.api.LocalAuthor;
+import org.briarproject.api.android.ReferenceManager;
+import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.crypto.CryptoExecutor;
+import org.briarproject.api.crypto.KeyPair;
+import org.briarproject.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.util.StringUtils;
+
+import roboguice.activity.RoboActivity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.ScrollView;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+public class SetupActivity extends BaseActivity implements OnClickListener,
 OnEditorActionListener {
 
 	private static final Logger LOG =
diff --git a/briar-android/src/org/briarproject/android/StartupFailureActivity.java b/briar-android/src/org/briarproject/android/StartupFailureActivity.java
index a93a6354db380b426f592c7d7289a2db9ed21c90..3742156d3f28b55247d9f3551103175334bcdd8b 100644
--- a/briar-android/src/org/briarproject/android/StartupFailureActivity.java
+++ b/briar-android/src/org/briarproject/android/StartupFailureActivity.java
@@ -11,7 +11,7 @@ import roboguice.activity.RoboActivity;
 
 import static org.briarproject.api.lifecycle.LifecycleManager.StartResult;
 
-public class StartupFailureActivity extends RoboActivity {
+public class StartupFailureActivity extends BaseActivity {
 
 	@Override
 	public void onCreate(Bundle state) {