diff --git a/briar-android/res/layout/activity_create_identity.xml b/briar-android/res/layout/activity_create_identity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..23309bfa83e7f539fcffad2c5340b0bc806707fe
--- /dev/null
+++ b/briar-android/res/layout/activity_create_identity.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+	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"
+	android:orientation="vertical"
+	android:padding="@dimen/margin_activity_horizontal">
+
+	<TextView
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		android:layout_gravity="center_horizontal"
+		android:text="@string/choose_nickname"
+		android:textSize="@dimen/text_size_large"/>
+
+	<android.support.design.widget.TextInputLayout
+		android:id="@+id/nicknameInputLayout"
+		android:layout_width="match_parent"
+		android:layout_height="wrap_content"
+		app:errorEnabled="true">
+
+		<EditText
+			android:id="@+id/nicknameEntry"
+			android:layout_width="match_parent"
+			android:layout_height="wrap_content"
+			android:layout_gravity="center_horizontal"
+			android:ems="10"
+			android:inputType="textPersonName"
+			android:maxLines="1"/>
+
+	</android.support.design.widget.TextInputLayout>
+
+	<Button
+		android:id="@+id/createIdentityButton"
+		style="@style/BriarButton"
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		android:layout_gravity="center_horizontal"
+		android:enabled="false"
+		android:text="@string/create_identity_button"/>
+
+	<ProgressBar
+		android:id="@+id/progressBar"
+		style="?android:attr/progressBarStyleLarge"
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		android:layout_gravity="center_horizontal"
+		android:indeterminate="true"
+		android:visibility="gone"/>
+
+</LinearLayout>
diff --git a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
index 0a9ca9d76dd7cdb9622b44833409d1075200cebb..c960bda8f7b680c41e0f5c37db88bb586c6b62af 100644
--- a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
+++ b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
@@ -2,12 +2,14 @@ package org.briarproject.android.identity;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.support.design.widget.TextInputLayout;
+import android.text.Editable;
+import android.text.TextWatcher;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
@@ -16,7 +18,7 @@ import android.widget.Toast;
 import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.BriarActivity;
-import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.crypto.KeyPair;
@@ -31,18 +33,11 @@ import java.util.logging.Logger;
 
 import javax.inject.Inject;
 
-import static android.text.InputType.TYPE_CLASS_TEXT;
-import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_HORIZONTAL;
 import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
-import static android.widget.LinearLayout.VERTICAL;
 import static android.widget.Toast.LENGTH_LONG;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
 import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 
 public class CreateIdentityActivity extends BriarActivity
@@ -55,10 +50,10 @@ public class CreateIdentityActivity extends BriarActivity
 	@CryptoExecutor
 	protected Executor cryptoExecutor;
 
+	private TextInputLayout nicknameInput;
 	private EditText nicknameEntry;
 	private Button createIdentityButton;
 	private ProgressBar progress;
-	private TextView feedback;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject
@@ -71,52 +66,32 @@ public class CreateIdentityActivity extends BriarActivity
 	@Override
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
-		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(MATCH_MATCH);
-		layout.setOrientation(VERTICAL);
-		layout.setGravity(CENTER_HORIZONTAL);
-		int pad = LayoutUtils.getPadding(this);
-		layout.setPadding(pad, pad, pad, pad);
-
-		TextView chooseNickname = new TextView(this);
-		chooseNickname.setGravity(CENTER);
-		chooseNickname.setTextSize(18);
-		chooseNickname.setText(R.string.choose_nickname);
-		layout.addView(chooseNickname);
-
-		nicknameEntry = new EditText(this) {
+
+		setContentView(R.layout.activity_create_identity);
+
+		nicknameInput = (TextInputLayout) findViewById(R.id.nicknameInputLayout);
+		nicknameEntry = (EditText) findViewById(R.id.nicknameEntry);
+		nicknameEntry.addTextChangedListener(new TextWatcher() {
 			@Override
-			protected void onTextChanged(CharSequence text, int start,
-					int lengthBefore, int lengthAfter) {
+			public void beforeTextChanged(CharSequence s, int start, int count,
+					int after) {}
+
+			@Override
+			public void onTextChanged(CharSequence s, int start, int before,
+					int count) {
 				enableOrDisableCreateButton();
 			}
-		};
-		nicknameEntry.setId(1);
-		nicknameEntry.setMaxLines(1);
-		int inputType = TYPE_CLASS_TEXT | TYPE_TEXT_FLAG_CAP_WORDS;
-		nicknameEntry.setInputType(inputType);
+
+			@Override
+			public void afterTextChanged(Editable s) {}
+		});
 		nicknameEntry.setOnEditorActionListener(this);
-		layout.addView(nicknameEntry);
-
-		feedback = new TextView(this);
-		feedback.setGravity(CENTER);
-		feedback.setPadding(0, pad, 0, pad);
-		layout.addView(feedback);
-
-		createIdentityButton = new Button(this);
-		createIdentityButton.setLayoutParams(WRAP_WRAP);
-		createIdentityButton.setText(R.string.create_identity_button);
-		createIdentityButton.setEnabled(false);
-		createIdentityButton.setOnClickListener(this);
-		layout.addView(createIdentityButton);
-
-		progress = new ProgressBar(this);
-		progress.setLayoutParams(WRAP_WRAP);
-		progress.setIndeterminate(true);
-		progress.setVisibility(GONE);
-		layout.addView(progress);
-
-		setContentView(layout);
+
+		createIdentityButton = (Button) findViewById(R.id.createIdentityButton);
+		if (createIdentityButton != null)
+			createIdentityButton.setOnClickListener(this);
+
+		progress = (ProgressBar) findViewById(R.id.progressBar);
 	}
 
 	@Override
@@ -139,10 +114,11 @@ public class CreateIdentityActivity extends BriarActivity
 		String nickname = nicknameEntry.getText().toString();
 		int length = StringUtils.toUtf8(nickname).length;
 		if (length > MAX_AUTHOR_NAME_LENGTH) {
-			feedback.setText(R.string.name_too_long);
+			String str = getString(R.string.name_too_long);
+			AndroidUtils.setError(nicknameInput, str, true);
 			return false;
 		}
-		feedback.setText("");
+		AndroidUtils.setError(nicknameInput, null, false);
 		return length > 0;
 	}
 
@@ -169,7 +145,7 @@ public class CreateIdentityActivity extends BriarActivity
 	}
 
 	private void storeLocalAuthor(final LocalAuthor a) {
-		runOnDbThread(new Runnable() {
+		dbController.runOnDbThread(new Runnable() {
 			@Override
 			public void run() {
 				try {