diff --git a/briar-android/res/layout/activity_forum.xml b/briar-android/res/layout/activity_forum.xml
index 823ae7c3a9d2fbd73eaaa606efb5c608e4ed62f0..b796da899f8744256b77dbdc225f18689970cf83 100644
--- a/briar-android/res/layout/activity_forum.xml
+++ b/briar-android/res/layout/activity_forum.xml
@@ -11,7 +11,8 @@
 		android:layout_width="match_parent"
 		android:layout_height="0dp"
 		android:layout_weight="1"
-		app:scrollToEnd="false"/>
+		app:scrollToEnd="false"
+		app:emptyText="@string/no_forum_posts"/>
 
 	<org.briarproject.android.view.TextInputView
 		android:id="@+id/text_input_container"
diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java
index 5ee0bbee89713f98e4e8d9bff30c9d93760db844..fa3671b5013b9fe29f2823d09719d0a578ec88bf 100644
--- a/briar-android/src/org/briarproject/android/BaseActivity.java
+++ b/briar-android/src/org/briarproject/android/BaseActivity.java
@@ -96,11 +96,6 @@ public abstract class BaseActivity extends AppCompatActivity
 		});
 	}
 
-	public void showSoftKeyboardForced(View view) {
-		Object o = getSystemService(INPUT_METHOD_SERVICE);
-		((InputMethodManager) o).showSoftInput(view, SHOW_FORCED);
-	}
-
 	public void showSoftKeyboard(View view) {
 		Object o = getSystemService(INPUT_METHOD_SERVICE);
 		((InputMethodManager) o).showSoftInput(view, SHOW_IMPLICIT);
diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
index b7f6fe279ffa5b592f183fb1d4c16466207034c8..1cb6662fecc991a625582037eb89810b6c3d2eaa 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
@@ -3,6 +3,7 @@ package org.briarproject.android.forum;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
+import android.support.annotation.Nullable;
 import android.support.design.widget.Snackbar;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.ActivityOptionsCompat;
@@ -90,7 +91,6 @@ public class ForumActivity extends BriarActivity implements
 		recyclerView.setLayoutManager(linearLayoutManager);
 		forumAdapter = new NestedForumAdapter(this, this, linearLayoutManager);
 		recyclerView.setAdapter(forumAdapter);
-		recyclerView.setEmptyText(R.string.no_forum_posts);
 
 		forumController.loadForum(groupId,
 				new UiResultExceptionHandler<List<ForumEntry>, DbException>(
@@ -182,7 +182,7 @@ public class ForumActivity extends BriarActivity implements
 		}
 	}
 
-	private void showTextInput(ForumEntry replyEntry) {
+	private void showTextInput(@Nullable ForumEntry replyEntry) {
 		// An animation here would be an overkill because of the keyboard
 		// popping up.
 		// only clear the text when the input container was not visible
@@ -190,7 +190,6 @@ public class ForumActivity extends BriarActivity implements
 			textInput.setVisibility(VISIBLE);
 			textInput.setText("");
 		}
-		textInput.requestFocus();
 		textInput.showSoftKeyboard();
 		textInput.setHint(replyEntry == null ? R.string.forum_new_message_hint :
 				R.string.forum_message_reply_hint);
diff --git a/briar-android/src/org/briarproject/android/forum/NestedForumAdapter.java b/briar-android/src/org/briarproject/android/forum/NestedForumAdapter.java
index c85803da6ec39d95728972b1f66e5ddd17631029..f1e2f5de2637a7f53bea3913b603aade60769df9 100644
--- a/briar-android/src/org/briarproject/android/forum/NestedForumAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/NestedForumAdapter.java
@@ -153,7 +153,7 @@ public class NestedForumAdapter
 		}
 	}
 
-	void setReplyEntry(ForumEntry entry) {
+	void setReplyEntry(@Nullable ForumEntry entry) {
 		if (replyEntry != null) {
 			notifyItemChanged(getVisiblePos(replyEntry));
 		}
@@ -386,7 +386,7 @@ public class NestedForumAdapter
 	 * elements if sEntry is null. If sEntry is not visible a NO_POSITION is
 	 * returned.
 	 */
-	private int getVisiblePos(ForumEntry sEntry) {
+	private int getVisiblePos(@Nullable ForumEntry sEntry) {
 		int visibleCounter = 0;
 		int levelLimit = UNDEFINED;
 		for (ForumEntry fEntry : forumEntries) {
@@ -414,14 +414,14 @@ public class NestedForumAdapter
 
 	static class NestedForumHolder extends RecyclerView.ViewHolder {
 
-		final TextView textView, lvlText, repliesText;
-		final AuthorView author;
-		final View[] lvls;
-		final View chevron, replyButton;
-		final ViewGroup cell;
-		final View topDivider;
+		private final TextView textView, lvlText, repliesText;
+		private final AuthorView author;
+		private final View[] lvls;
+		private final View chevron, replyButton;
+		private final ViewGroup cell;
+		private final View topDivider;
 
-		NestedForumHolder(View v) {
+		private NestedForumHolder(View v) {
 			super(v);
 
 			textView = (TextView) v.findViewById(R.id.text);
diff --git a/briar-android/src/org/briarproject/android/view/TextInputView.java b/briar-android/src/org/briarproject/android/view/TextInputView.java
index da1e58969a92b850a00ae99f0d3a19c417a10dc2..dade999a0863fa0bf121e257b3e96cc550332cd5 100644
--- a/briar-android/src/org/briarproject/android/view/TextInputView.java
+++ b/briar-android/src/org/briarproject/android/view/TextInputView.java
@@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.components.emoji.EmojiToggle;
 import static android.content.Context.INPUT_METHOD_SERVICE;
 import static android.content.Context.LAYOUT_INFLATER_SERVICE;
 import static android.view.KeyEvent.KEYCODE_BACK;
+import static android.view.inputmethod.InputMethodManager.SHOW_FORCED;
 
 @UiThread
 public class TextInputView extends KeyboardAwareLinearLayout
@@ -107,6 +108,14 @@ public class TextInputView extends KeyboardAwareLinearLayout
 		ui.emojiDrawer.setEmojiEventListener(this);
 	}
 
+	@Override
+	public void setVisibility(int visibility) {
+		if (visibility == GONE && isKeyboardOpen()) {
+			onKeyboardClose();
+		}
+		super.setVisibility(visibility);
+	}
+
 	@Override
 	public void onKeyEvent(KeyEvent keyEvent) {
 		ui.editText.dispatchKeyEvent(keyEvent);
@@ -169,8 +178,10 @@ public class TextInputView extends KeyboardAwareLinearLayout
 			@Override
 			public void run() {
 				ui.editText.requestFocus();
-				Object o = getContext().getSystemService(INPUT_METHOD_SERVICE);
-				((InputMethodManager) o).showSoftInput(ui.editText, 0);
+				InputMethodManager imm =
+						(InputMethodManager) getContext()
+								.getSystemService(INPUT_METHOD_SERVICE);
+				imm.showSoftInput(ui.editText, SHOW_FORCED);
 			}
 		});
 	}
diff --git a/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java b/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
index 1e1b5d50da776f712a15c31915653165b404c4b0..096dd0c6917fd1545384dc7e8e23a33b11c1cd48 100644
--- a/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
+++ b/briar-android/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java
@@ -63,6 +63,7 @@ public class KeyboardAwareLinearLayout extends LinearLayout {
 	public KeyboardAwareLinearLayout(Context context,
 			@Nullable AttributeSet attrs, int defStyle) {
 		super(context, attrs, defStyle);
+		rotation = getDeviceRotation();
 		final int statusBarRes = getResources()
 				.getIdentifier("status_bar_height", "dimen", "android");
 		minKeyboardSize =