diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index 8e043ff7f8f0fe72b9316f49b9bf33005e86b220..756b2da587dbdff195733d15cbb150513597e413 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -6,8 +6,9 @@ dependencies {
     compile fileTree(dir: '../briar-core/libs', include: '*.jar')
     compile project(':briar-core')
     compile fileTree(dir: 'libs', include: '*.jar')
-    compile 'com.android.support:design:23.1.1'
-    compile 'com.android.support:recyclerview-v7:23.1.1'
+    compile "com.android.support:support-v4:23.1.1"
+    compile "com.android.support:appcompat-v7:23.1.1"
+    compile "com.android.support:design:23.1.1"
 }
 
 android {
diff --git a/briar-android/res/layout/activity_setup.xml b/briar-android/res/layout/activity_setup.xml
index 0285356113c9568c3692836035342bb512190940..f484946166b1e8e3a1abc6deba9700aa394ea669 100644
--- a/briar-android/res/layout/activity_setup.xml
+++ b/briar-android/res/layout/activity_setup.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <ScrollView
 	xmlns:android="http://schemas.android.com/apk/res/android"
+	xmlns:app="http://schemas.android.com/apk/res-auto"
 	android:layout_width="match_parent"
 	android:layout_height="match_parent">
 
@@ -23,12 +24,19 @@
 			android:text="@string/choose_nickname"
 			android:textSize="18sp"/>
 
-		<EditText
-			android:id="@+id/nickname_entry"
+		<android.support.design.widget.TextInputLayout
+			android:id="@+id/nickname_entry_wrapper"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:inputType="text|textCapWords"
-			android:maxLines="1"/>
+			app:errorEnabled="true">
+
+			<EditText
+				android:id="@+id/nickname_entry"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:inputType="text|textCapWords"
+				android:maxLines="1"/>
+		</android.support.design.widget.TextInputLayout>
 
 		<TextView
 			android:layout_width="wrap_content"
@@ -37,12 +45,19 @@
 			android:text="@string/choose_password"
 			android:textSize="18sp"/>
 
-		<EditText
-			android:id="@+id/password_entry"
+		<android.support.design.widget.TextInputLayout
+			android:id="@+id/password_entry_wrapper"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:inputType="textPassword"
-			android:maxLines="1"/>
+			app:errorEnabled="true">
+
+			<EditText
+				android:id="@+id/password_entry"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:inputType="textPassword"
+				android:maxLines="1"/>
+		</android.support.design.widget.TextInputLayout>
 
 		<TextView
 			android:layout_width="wrap_content"
@@ -51,12 +66,19 @@
 			android:text="@string/confirm_password"
 			android:textSize="18sp"/>
 
-		<EditText
-			android:id="@+id/password_confirm"
+		<android.support.design.widget.TextInputLayout
+			android:id="@+id/password_confirm_wrapper"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
-			android:inputType="textPassword"
-			android:maxLines="1"/>
+			app:errorEnabled="true">
+
+			<EditText
+				android:id="@+id/password_confirm"
+				android:layout_width="match_parent"
+				android:layout_height="wrap_content"
+				android:inputType="textPassword"
+				android:maxLines="1"/>
+		</android.support.design.widget.TextInputLayout>
 
 		<org.briarproject.android.util.StrengthMeter
 			android:id="@+id/strength_meter"
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index 56d61e8c27130eeea24a9d29f6319c415e8a50c6..e7940b0ffead77b43154a13db4fbdce000f4a365 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -4,6 +4,7 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.os.Bundle;
+import android.support.design.widget.TextInputLayout;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.KeyEvent;
@@ -17,6 +18,7 @@ import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
 import org.briarproject.R;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.android.util.StrengthMeter;
 import org.briarproject.api.android.ReferenceManager;
 import org.briarproject.api.crypto.CryptoComponent;
@@ -55,6 +57,9 @@ OnEditorActionListener {
 
 	@Inject @CryptoExecutor private Executor cryptoExecutor;
 	@Inject private PasswordStrengthEstimator strengthEstimator;
+	@InjectView(R.id.nickname_entry_wrapper) TextInputLayout nicknameEntryWrapper;
+	@InjectView(R.id.password_entry_wrapper) TextInputLayout passwordEntryWrapper;
+	@InjectView(R.id.password_confirm_wrapper) TextInputLayout passwordConfirmationWrapper;
 	@InjectView(R.id.nickname_entry) EditText nicknameEntry;
 	@InjectView(R.id.password_entry) EditText passwordEntry;
 	@InjectView(R.id.password_confirm) EditText passwordConfirmation;
@@ -99,7 +104,7 @@ OnEditorActionListener {
 
 	private void enableOrDisableContinueButton() {
 		if (progress == null) return; // Not created yet
-		if (passwordEntry.getText().length() > 0 && passwordEntry.hasFocus())
+		if (passwordEntry.getText().length() > 0)
 			strengthMeter.setVisibility(VISIBLE);
 		else strengthMeter.setVisibility(INVISIBLE);
 		String nickname = nicknameEntry.getText().toString();
@@ -109,12 +114,12 @@ OnEditorActionListener {
 		boolean passwordsMatch = firstPassword.equals(secondPassword);
 		float strength = strengthEstimator.estimateStrength(firstPassword);
 		strengthMeter.setStrength(strength);
-		if (nicknameLength > MAX_AUTHOR_NAME_LENGTH)
-			nicknameEntry.setError(getString(R.string.name_too_long));
-		if (firstPassword.length() > 0 && strength < WEAK)
-			passwordEntry.setError(getString(R.string.password_too_weak));
-		if (secondPassword.length() > 0 && !passwordsMatch)
-			passwordConfirmation.setError(getString(R.string.passwords_do_not_match));
+		AndroidUtils.setError(nicknameEntryWrapper, getString(R.string.name_too_long),
+				nicknameLength > MAX_AUTHOR_NAME_LENGTH);
+		AndroidUtils.setError(passwordEntryWrapper, getString(R.string.password_too_weak),
+				firstPassword.length() > 0 && strength < WEAK);
+		AndroidUtils.setError(passwordConfirmationWrapper, getString(R.string.passwords_do_not_match),
+				secondPassword.length() > 0 && !passwordsMatch);
 		createAccountButton.setEnabled(nicknameLength > 0
 				&& nicknameLength <= MAX_AUTHOR_NAME_LENGTH
 				&& passwordsMatch && strength >= WEAK);
diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/org/briarproject/android/util/AndroidUtils.java
index 5923ba7e41cfbe024ba4d125d83272a31c8a4a73..abbafafd37992976aab2302a7d31f4b60692606e 100644
--- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java
+++ b/briar-android/src/org/briarproject/android/util/AndroidUtils.java
@@ -2,6 +2,7 @@ package org.briarproject.android.util;
 
 import android.annotation.SuppressLint;
 import android.os.Build;
+import android.support.design.widget.TextInputLayout;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -23,4 +24,12 @@ public class AndroidUtils {
 		}
 		return Collections.unmodifiableList(abis);
 	}
+
+	public static void setError(TextInputLayout til, String error, boolean condition) {
+		if (condition) {
+			if (til.getError() == null)
+				til.setError(error);
+		} else
+			til.setError(null);
+	}
 }