diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index e52bc4a89d0ec2b9b542b71e39906b153dfe7748..a5496d9c709b464113bfc49999552d9427ab8b2f 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -623,6 +623,7 @@ public class ConversationActivity extends BriarActivity
 		long timestamp = System.currentTimeMillis();
 		timestamp = Math.max(timestamp, getMinTimestampForNewMessage());
 		createMessage(StringUtils.toUtf8(text), timestamp);
+		textInputView.setText("");
 	}
 
 	private long getMinTimestampForNewMessage() {
diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
index 019aff689978c3354668d9af1e38cfebc26d8768..f5c9c32a635bead8e019289a12515f62f1964471 100644
--- a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java
@@ -14,6 +14,7 @@ import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.view.TextInputView;
+import org.briarproject.android.view.TextInputView.TextInputListener;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.contact.Contact;
 import org.briarproject.api.contact.ContactId;
@@ -37,7 +38,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.api.introduction.IntroductionConstants.MAX_INTRODUCTION_MESSAGE_LENGTH;
 
 public class IntroductionMessageFragment extends BaseFragment
-		implements TextInputView.TextInputListener {
+		implements TextInputListener {
 
 	public static final String TAG =
 			IntroductionMessageFragment.class.getName();
@@ -56,7 +57,8 @@ public class IntroductionMessageFragment extends BaseFragment
 	@Inject
 	protected volatile IntroductionManager introductionManager;
 
-	public static IntroductionMessageFragment newInstance(int contactId1, int contactId2) {
+	public static IntroductionMessageFragment newInstance(int contactId1,
+			int contactId2) {
 		Bundle args = new Bundle();
 		args.putInt(CONTACT_ID_1, contactId1);
 		args.putInt(CONTACT_ID_2, contactId2);
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
index 991cdf5265f2b98d2f52fd8deac99d861fefeaa6..c2bba1a65c5b07fbdd838f576937a0228907fd13 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupActivity.java
@@ -24,12 +24,13 @@ import javax.inject.Inject;
 
 import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
 import static android.widget.Toast.LENGTH_SHORT;
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
 
 public class CreateGroupActivity extends ContactSelectorActivity implements
 		CreateGroupListener, MessageFragmentListener {
 
 	@Inject
-	protected CreateGroupController controller;
+	CreateGroupController controller;
 
 	@Override
 	public void injectActivity(ActivityComponent component) {
@@ -144,6 +145,11 @@ public class CreateGroupActivity extends ContactSelectorActivity implements
 		return true;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
+
 	private void openNewGroup() {
 		Intent i = new Intent(this, GroupActivity.class);
 		i.putExtra(GROUP_ID, groupId.getBytes());
diff --git a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
index d2a6600d494781f0c67b0ef970b87e3d9da1706d..a261ce0167313adb3b10585127d2fcfc2856aa0e 100644
--- a/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/privategroup/creation/CreateGroupMessageFragment.java
@@ -1,21 +1,24 @@
 package org.briarproject.android.privategroup.creation;
 
+import android.support.annotation.StringRes;
+
 import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.sharing.BaseMessageFragment;
 
-
 public class CreateGroupMessageFragment extends BaseMessageFragment {
 
 	private final static String TAG =
 			CreateGroupMessageFragment.class.getName();
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.groups_create_group_invitation_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
index 251846f6444300e2592d0fa120963bfb0186d879..b988c094456dd11f4a64815299230576b02f645c 100644
--- a/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/BaseMessageFragment.java
@@ -3,6 +3,7 @@ package org.briarproject.android.sharing;
 import android.content.Context;
 import android.os.Bundle;
 import android.support.annotation.StringRes;
+import android.support.design.widget.Snackbar;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -11,6 +12,9 @@ import org.briarproject.R;
 import org.briarproject.android.fragment.BaseFragment;
 import org.briarproject.android.view.LargeTextInputView;
 import org.briarproject.android.view.TextInputView.TextInputListener;
+import org.briarproject.util.StringUtils;
+
+import static android.support.design.widget.Snackbar.LENGTH_SHORT;
 
 import static org.briarproject.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
 import static org.briarproject.util.StringUtils.truncateUtf8;
@@ -46,8 +50,10 @@ public abstract class BaseMessageFragment extends BaseFragment
 		listener.setTitle(res);
 	}
 
-	protected abstract @StringRes int getButtonText();
-	protected abstract @StringRes int getHintText();
+	@StringRes
+	protected abstract int getButtonText();
+	@StringRes
+	protected abstract int getHintText();
 
 	@Override
 	public void onStart() {
@@ -57,6 +63,11 @@ public abstract class BaseMessageFragment extends BaseFragment
 
 	@Override
 	public void onSendClick(String msg) {
+		if (StringUtils.isTooLong(msg, listener.getMaximumMessageLength())) {
+			Snackbar.make(message, R.string.text_too_long, LENGTH_SHORT).show();
+			return;
+		}
+
 		// disable button to prevent accidental double actions
 		message.setSendButtonEnabled(false);
 		message.hideSoftKeyboard();
@@ -77,6 +88,8 @@ public abstract class BaseMessageFragment extends BaseFragment
 		/** Returns true when the button click has been consumed. */
 		boolean onButtonClick(String message);
 
+		int getMaximumMessageLength();
+
 	}
 
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
index d4ad59a6a72ec2ac0bf74f6e379b9dfd58f98c2d..7d5cdeef3e63ae5e211dc9dabbe283bafd0f654f 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java
@@ -10,11 +10,13 @@ import org.briarproject.api.sync.GroupId;
 
 import javax.inject.Inject;
 
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+
 public class ShareBlogActivity extends ShareActivity {
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject
-	protected volatile BlogSharingManager blogSharingManager;
+	volatile BlogSharingManager blogSharingManager;
 
 	@Override
 	BaseMessageFragment getMessageFragment() {
@@ -42,4 +44,8 @@ public class ShareBlogActivity extends ShareActivity {
 		return R.string.blogs_sharing_error;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
index 6d4dfb7b26020cddd67049088972ef8723ea633b..ccee4d8fecb028dcbf9e2ec970fd2115f7e5c2af 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogMessageFragment.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.sharing;
 
 import android.os.Bundle;
+import android.support.annotation.StringRes;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -25,11 +26,13 @@ public class ShareBlogMessageFragment extends BaseMessageFragment {
 	}
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.blogs_sharing_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
index 89093a2b0bf33ae81548a397cc44b90152f43654..492e3615b23b4903a61d433d04779170e7e557f4 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java
@@ -10,11 +10,13 @@ import org.briarproject.api.sync.GroupId;
 
 import javax.inject.Inject;
 
+import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+
 public class ShareForumActivity extends ShareActivity {
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject
-	protected volatile ForumSharingManager forumSharingManager;
+	volatile ForumSharingManager forumSharingManager;
 
 	@Override
 	BaseMessageFragment getMessageFragment() {
@@ -42,4 +44,8 @@ public class ShareForumActivity extends ShareActivity {
 		return R.string.forum_share_error;
 	}
 
+	@Override
+	public int getMaximumMessageLength() {
+		return MAX_MESSAGE_BODY_LENGTH;
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java b/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
index 7824567a3de7e8b2bac24a3b0bbf00122d121bc9..a3faeb630de35101d606b194260be9aa3971c100 100644
--- a/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
+++ b/briar-android/src/org/briarproject/android/sharing/ShareForumMessageFragment.java
@@ -1,6 +1,7 @@
 package org.briarproject.android.sharing;
 
 import android.os.Bundle;
+import android.support.annotation.StringRes;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -25,11 +26,13 @@ public class ShareForumMessageFragment extends BaseMessageFragment {
 	}
 
 	@Override
+	@StringRes
 	protected int getButtonText() {
 		return R.string.forum_share_button;
 	}
 
 	@Override
+	@StringRes
 	protected int getHintText() {
 		return R.string.forum_share_message;
 	}
diff --git a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java b/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
index 6a1ec4883dfcc6ea3c8563aef42f556741b41de0..a8eefd250f474069e20a40fb458af1013c43976f 100644
--- a/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/org/briarproject/android/threaded/ThreadListActivity.java
@@ -253,6 +253,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 				replyItem != null ? replyItem.getId() : null, handler);
 		textInput.hideSoftKeyboard();
 		textInput.setVisibility(GONE);
+		textInput.setText("");
 		adapter.setReplyItem(null);
 	}
 
diff --git a/briar-android/src/org/briarproject/android/view/TextInputView.java b/briar-android/src/org/briarproject/android/view/TextInputView.java
index dade999a0863fa0bf121e257b3e96cc550332cd5..ff75c84bfd064aaa22fb115e82fba23494e993be 100644
--- a/briar-android/src/org/briarproject/android/view/TextInputView.java
+++ b/briar-android/src/org/briarproject/android/view/TextInputView.java
@@ -101,7 +101,6 @@ public class TextInputView extends KeyboardAwareLinearLayout
 			public void onClick(View v) {
 				if (listener != null) {
 					listener.onSendClick(ui.editText.getText().toString());
-					ui.editText.setText("");
 				}
 			}
 		});