diff --git a/briar-android/res/layout/activity_password.xml b/briar-android/res/layout/activity_password.xml
index dff9612aad563a5cf197bf76ae9a8cd18ac9565a..bda170a9432446c6bf6394e5c19a5f1650ffac6a 100644
--- a/briar-android/res/layout/activity_password.xml
+++ b/briar-android/res/layout/activity_password.xml
@@ -1,65 +1,81 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/margin_activity_vertical"
-    android:paddingEnd="@dimen/margin_activity_horizontal"
-    android:paddingRight="@dimen/margin_activity_horizontal"
-    android:paddingStart="@dimen/margin_activity_horizontal"
-    android:paddingLeft="@dimen/margin_activity_horizontal"
-    android:paddingTop="@dimen/margin_activity_vertical">
+    android:layout_height="match_parent">
 
-    <TextView
-        android:id="@+id/title_password"
-        style="@style/BriarTextTitle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerHorizontal="true"
-        android:padding="@dimen/margin_large"
-        android:text="@string/enter_password" />
-
-    <EditText
-        android:id="@+id/edit_password"
+    <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_below="@id/title_password"
-        android:hint="@string/password_hint"
-        android:imeOptions="actionDone"
-        android:inputType="textPassword"
-        android:maxLines="1" />
+        android:orientation="vertical"
+        android:paddingBottom="@dimen/margin_activity_vertical"
+        android:paddingEnd="@dimen/margin_activity_horizontal"
+        android:paddingRight="@dimen/margin_activity_horizontal"
+        android:paddingStart="@dimen/margin_activity_horizontal"
+        android:paddingLeft="@dimen/margin_activity_horizontal"
+        android:paddingTop="@dimen/margin_activity_vertical">
 
-    <Button
-        android:id="@+id/btn_sign_in"
-        style="@style/BriarButton.Default"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/edit_password"
-        android:layout_marginTop="@dimen/margin_xlarge"
-        android:onClick="onSignInClick"
-        android:text="@string/sign_in_button" />
+	    <TextView
+		    android:id="@+id/title_password"
+		    style="@style/BriarTextTitle"
+		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"
+		    android:layout_centerHorizontal="true"
+		    android:padding="@dimen/margin_large"
+		    android:text="@string/enter_password" />
 
-    <ProgressBar
-        android:id="@+id/progress_wheel"
-        style="?android:attr/progressBarStyleInverse"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignTop="@id/btn_sign_in"
-        android:layout_alignBottom="@id/btn_sign_in"
-        android:layout_centerHorizontal="true"
-        android:gravity="center"
-        android:visibility="invisible" />
+	    <android.support.design.widget.TextInputLayout
+		    android:id="@+id/password_layout"
+		    android:layout_width="match_parent"
+	        android:layout_height="wrap_content"
+		    android:layout_centerHorizontal="true"
+		    android:layout_below="@id/title_password"
+			app:errorEnabled="true">
 
-    <TextView
-        style="@style/BriarTextBody"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/btn_sign_in"
-        android:layout_centerHorizontal="true"
-        android:layout_marginTop="@dimen/margin_large"
-        android:clickable="true"
-        android:onClick="onForgottenPasswordClick"
-        android:text="@string/forgotten_password"
-        android:textColor="?android:attr/textColorLink" />
+		    <EditText
+			    android:id="@+id/edit_password"
+			    android:layout_width="match_parent"
+			    android:layout_height="wrap_content"
+			    android:imeOptions="actionDone"
+			    android:inputType="textPassword"
+			    android:maxLines="1" />
+
+	    </android.support.design.widget.TextInputLayout>
+
+        <Button
+            android:id="@+id/btn_sign_in"
+            style="@style/BriarButton.Default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/password_layout"
+            android:layout_marginTop="@dimen/margin_medium"
+            android:onClick="onSignInClick"
+            android:text="@string/sign_in_button" />
+
+        <ProgressBar
+            android:id="@+id/progress_wheel"
+            style="?android:attr/progressBarStyleInverse"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignTop="@id/btn_sign_in"
+            android:layout_alignBottom="@id/btn_sign_in"
+            android:layout_centerHorizontal="true"
+            android:gravity="center"
+            android:visibility="invisible" />
+
+        <TextView
+            style="@style/BriarTextBody"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/btn_sign_in"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="@dimen/margin_large"
+            android:clickable="true"
+            android:onClick="onForgottenPasswordClick"
+            android:text="@string/forgotten_password"
+            android:textColor="?android:attr/textColorLink" />
+
+    </RelativeLayout>
 
-</RelativeLayout>
\ No newline at end of file
+</ScrollView>
\ No newline at end of file
diff --git a/briar-android/res/values/color.xml b/briar-android/res/values/color.xml
index 0ecc0f1ba7ad2565ad31c956d2d8673066342b9a..28cddbd4f2ce28ce41d4cc2ba7230485bba44135 100644
--- a/briar-android/res/values/color.xml
+++ b/briar-android/res/values/color.xml
@@ -17,7 +17,7 @@
     <color name="briar_primary">#2D3E50</color>
     <color name="briar_primary_dark">#0f1720</color>
 
-    <color name="briar_text_link">#2D3E50</color>
+    <color name="briar_text_link">#75ab0d</color>
     <color name="briar_green_light">#95d220</color>
     <color name="briar_green_dark">#75ab0d</color>
     <color name="briar_text_primary">#333333</color>
diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index db7f2bfc4c1be306c8c2a197a441f760a8cdb141..4934dceabe03d48d78932a90e66a513251550e4b 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -19,7 +19,7 @@
     <string name="yes">Yes</string>
     <string name="no">No</string>
     <string name="forgotten_password">I have forgotten my password</string>
-    <string name="try_again">Wrong password, try again:</string>
+    <string name="try_again">Wrong password, try again!</string>
     <string name="sign_in_button">Sign In</string>
     <string name="startup_failed_notification_title">Briar could not start</string>
     <string name="startup_failed_notification_text">You may need to reinstall Briar.</string>
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index f6b3641f3cef7f9f93c496d3d72f246fc82826be..a36252747158257bfb15dc3144089c7b878c2fbe 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
+import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
 import com.google.inject.Inject;
@@ -31,6 +32,7 @@ import roboguice.util.RoboContext;
 
 import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
+import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT;
 import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
 
 public abstract class BaseActivity extends AppCompatActivity
@@ -155,8 +157,19 @@ public abstract class BaseActivity extends AppCompatActivity
 		gotoAndFinish(classInstance, Integer.MIN_VALUE);
 	}
 
-	protected void hideSoftKeyboard() {
+	protected void toggleSoftKeyboard() {
 		Object o = getSystemService(INPUT_METHOD_SERVICE);
 		((InputMethodManager) o).toggleSoftInput(HIDE_IMPLICIT_ONLY, 0);
 	}
+
+	protected void showSoftKeyboard(View view) {
+		Object o = getSystemService(INPUT_METHOD_SERVICE);
+		((InputMethodManager) o).showSoftInput(view, SHOW_IMPLICIT);
+	}
+
+	protected void hideSoftKeyboard(View view) {
+		Object o = getSystemService(INPUT_METHOD_SERVICE);
+		((InputMethodManager) o).hideSoftInputFromWindow(view.getWindowToken(),
+				0);
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java
index fed1a6201a97fff1dbc528feeeddb54348742b14..353cb0953623da46f5e70557db19c9b60c0c191d 100644
--- a/briar-android/src/org/briarproject/android/PasswordActivity.java
+++ b/briar-android/src/org/briarproject/android/PasswordActivity.java
@@ -4,7 +4,9 @@ import android.app.AlertDialog;
 import android.content.DialogInterface;
 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.widget.Button;
@@ -14,6 +16,7 @@ import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
 import org.briarproject.R;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.crypto.SecretKey;
@@ -36,6 +39,7 @@ public class PasswordActivity extends BaseActivity {
 	private Button signInButton;
 	private ProgressBar progress;
 	private TextView title;
+	private TextInputLayout input;
 	private EditText password;
 
 	private byte[] encrypted;
@@ -59,16 +63,31 @@ public class PasswordActivity extends BaseActivity {
 		signInButton = (Button) findViewById(R.id.btn_sign_in);
 		progress = (ProgressBar) findViewById(R.id.progress_wheel);
 		title = (TextView) findViewById(R.id.title_password);
+		input = (TextInputLayout) findViewById(R.id.password_layout);
 		password = (EditText) findViewById(R.id.edit_password);
 		password.setOnEditorActionListener(new OnEditorActionListener() {
 			@Override
 			public boolean onEditorAction(TextView v, int actionId,
 					KeyEvent event) {
-				hideSoftKeyboard();
+				hideSoftKeyboard(password);
 				validatePassword(encrypted, password.getText());
 				return true;
 			}
 		});
+		password.addTextChangedListener(new TextWatcher() {
+			@Override
+			public void beforeTextChanged(CharSequence s, int start, int count,
+					int after) {}
+
+			@Override
+			public void onTextChanged(CharSequence s, int start, int before,
+					int count) {
+				if (count > 0) AndroidUtils.setError(input, null, false);
+			}
+
+			@Override
+			public void afterTextChanged(Editable s) {}
+		});
 	}
 
 	@Override
@@ -107,7 +126,7 @@ public class PasswordActivity extends BaseActivity {
 	}
 
 	private void validatePassword(final byte[] encrypted, Editable e) {
-		hideSoftKeyboard();
+		hideSoftKeyboard(password);
 		// Replace the button with a progress bar
 		signInButton.setVisibility(INVISIBLE);
 		progress.setVisibility(VISIBLE);
@@ -129,10 +148,14 @@ public class PasswordActivity extends BaseActivity {
 	private void tryAgain() {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				title.setText(R.string.try_again);
+				AndroidUtils.setError(input, getString(R.string.try_again),
+						true);
 				signInButton.setVisibility(VISIBLE);
 				progress.setVisibility(INVISIBLE);
 				password.setText("");
+
+				// show the keyboard again
+				showSoftKeyboard(password);
 			}
 		});
 	}
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index 2713b9984319f0c4f32bbd07e80db1c51d79ff8f..380792bf187b7c92294b2aca0d01e7a9d97bd0eb 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -129,7 +129,7 @@ public class SetupActivity extends BaseActivity implements OnClickListener,
 	}
 
 	public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-		hideSoftKeyboard();
+		hideSoftKeyboard(v);
 		return true;
 	}
 
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index 585778ed554584b6f026c86c99f6106f4ab51942..e50540bc2982039a166cd8eb11c5f41608d46c6d 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -411,7 +411,7 @@ public class ConversationActivity extends BriarActivity
 		timestamp = Math.max(timestamp, getMinTimestampForNewMessage());
 		createMessage(StringUtils.toUtf8(message), timestamp);
 		content.setText("");
-		hideSoftKeyboard();
+		hideSoftKeyboard(content);
 	}
 
 	private long getMinTimestampForNewMessage() {
diff --git a/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java b/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
index 89c230e189ba0d74c7ea281e3dd4a065abb24dba..5fc968a961b66ced3bd4d6116fde70dbba19f07b 100644
--- a/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/CreateForumActivity.java
@@ -110,7 +110,7 @@ implements OnEditorActionListener, OnClickListener {
 	}
 
 	public boolean onEditorAction(TextView textView, int actionId, KeyEvent e) {
-		hideSoftKeyboard();
+		hideSoftKeyboard(textView);
 		return true;
 	}
 
@@ -126,7 +126,7 @@ implements OnEditorActionListener, OnClickListener {
 
 	public void onClick(View view) {
 		if (view == createForumButton) {
-			hideSoftKeyboard();
+			hideSoftKeyboard(view);
 			if (!validateName()) return;
 			createForumButton.setVisibility(GONE);
 			progress.setVisibility(VISIBLE);
diff --git a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
index 81c348273bbb209d5b08d87d83b35af959174130..2b293e4e05b873bd94ffbd650dde6d7c856ecfc3 100644
--- a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
+++ b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
@@ -118,7 +118,7 @@ implements OnEditorActionListener, OnClickListener {
 	}
 
 	public boolean onEditorAction(TextView textView, int actionId, KeyEvent e) {
-		hideSoftKeyboard();
+		hideSoftKeyboard(textView);
 		return true;
 	}
 
@@ -134,7 +134,7 @@ implements OnEditorActionListener, OnClickListener {
 	}
 
 	public void onClick(View view) {
-		hideSoftKeyboard();
+		hideSoftKeyboard(view);
 		if (!validateNickname()) return;
 		// Replace the button with a progress bar
 		createIdentityButton.setVisibility(GONE);