diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
index 0ad579f5555c48ba93d534c12e62919723f7f753..e80cafbd5034b854a5ee770e26489ba6e5fd576b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BaseControllerImpl.java
@@ -51,7 +51,7 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	protected final IdentityManager identityManager;
 	protected final BlogManager blogManager;
 
-	private final Map<MessageId, String> bodyCache = new ConcurrentHashMap<>();
+	private final Map<MessageId, String> textCache = new ConcurrentHashMap<>();
 	private final Map<MessageId, BlogPostHeader> headerCache =
 			new ConcurrentHashMap<>();
 
@@ -129,17 +129,17 @@ abstract class BaseControllerImpl extends DbControllerImpl
 	public void loadBlogPost(BlogPostHeader header,
 			ResultExceptionHandler<BlogPostItem, DbException> handler) {
 
-		String body = bodyCache.get(header.getId());
-		if (body != null) {
-			LOG.info("Loaded body from cache");
-			handler.onResult(new BlogPostItem(header, body));
+		String text = textCache.get(header.getId());
+		if (text != null) {
+			LOG.info("Loaded text from cache");
+			handler.onResult(new BlogPostItem(header, text));
 			return;
 		}
 		runOnDbThread(() -> {
 			try {
 				long start = now();
 				BlogPostItem item = getItem(header);
-				logDuration(LOG, "Loading body", start);
+				logDuration(LOG, "Loading text", start);
 				handler.onResult(item);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
@@ -200,28 +200,28 @@ abstract class BaseControllerImpl extends DbControllerImpl
 
 	@DatabaseExecutor
 	private BlogPostItem getItem(BlogPostHeader h) throws DbException {
-		String body;
+		String text;
 		if (h instanceof BlogCommentHeader) {
 			BlogCommentHeader c = (BlogCommentHeader) h;
 			BlogCommentItem item = new BlogCommentItem(c);
-			body = getPostBody(item.getPostHeader().getId());
-			item.setBody(body);
+			text = getPostText(item.getPostHeader().getId());
+			item.setText(text);
 			return item;
 		} else {
-			body = getPostBody(h.getId());
-			return new BlogPostItem(h, body);
+			text = getPostText(h.getId());
+			return new BlogPostItem(h, text);
 		}
 	}
 
 	@DatabaseExecutor
-	private String getPostBody(MessageId m) throws DbException {
-		String body = bodyCache.get(m);
-		if (body == null) {
-			body = HtmlUtils.clean(blogManager.getPostBody(m), ARTICLE);
-			bodyCache.put(m, body);
+	private String getPostText(MessageId m) throws DbException {
+		String text = textCache.get(m);
+		if (text == null) {
+			text = HtmlUtils.clean(blogManager.getPostText(m), ARTICLE);
+			textCache.put(m, text);
 		}
 		//noinspection ConstantConditions
-		return body;
+		return text;
 	}
 
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
index 2ef640d37b76bf046680eb1b68b79f8615884c4a..89a6e7fa485c5e793b5c6fc43b27636d585adec3 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java
@@ -34,8 +34,8 @@ class BlogCommentItem extends BlogPostItem {
 		}
 	}
 
-	public void setBody(String body) {
-		this.body = body;
+	public void setText(String text) {
+		this.text = text;
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
index 546f9ac18005508ef1e79de8cd539c6ccf05fe92..f350fc3f0938ff9f6b2ce893dac936c841a154e6 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java
@@ -15,12 +15,12 @@ import javax.annotation.concurrent.NotThreadSafe;
 public class BlogPostItem implements Comparable<BlogPostItem> {
 
 	private final BlogPostHeader header;
-	protected String body;
+	protected String text;
 	private boolean read;
 
-	BlogPostItem(BlogPostHeader header, @Nullable String body) {
+	BlogPostItem(BlogPostHeader header, @Nullable String text) {
 		this.header = header;
-		this.body = body;
+		this.text = text;
 		this.read = header.isRead();
 	}
 
@@ -44,8 +44,8 @@ public class BlogPostItem implements Comparable<BlogPostItem> {
 		return header.getAuthorStatus();
 	}
 
-	public String getBody() {
-		return body;
+	public String getText() {
+		return text;
 	}
 
 	public boolean isRssFeed() {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
index b330aeb7a71d36a4d1dd5035d3d68f9a930a6514..ec42e8ef4c20d7107dd62a7b4fefe8e4614877c8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java
@@ -41,7 +41,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 	private final AuthorView reblogger;
 	private final AuthorView author;
 	private final ImageButton reblogButton;
-	private final TextView body;
+	private final TextView text;
 	private final ViewGroup commentContainer;
 	private final boolean fullText;
 
@@ -63,7 +63,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 		reblogger = v.findViewById(R.id.rebloggerView);
 		author = v.findViewById(R.id.authorView);
 		reblogButton = v.findViewById(R.id.commentView);
-		body = v.findViewById(R.id.bodyView);
+		text = v.findViewById(R.id.textView);
 		commentContainer = v.findViewById(R.id.commentContainer);
 	}
 
@@ -111,17 +111,17 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 			author.setAuthorNotClickable();
 		}
 
-		// post body
-		Spanned bodyText = getSpanned(item.getBody());
+		// post text
+		Spanned postText = getSpanned(item.getText());
 		if (fullText) {
-			body.setText(bodyText);
-			body.setTextIsSelectable(true);
-			makeLinksClickable(body, fragmentManager);
+			text.setText(postText);
+			text.setTextIsSelectable(true);
+			makeLinksClickable(text, fragmentManager);
 		} else {
-			body.setTextIsSelectable(false);
-			if (bodyText.length() > TEASER_LENGTH)
-				bodyText = getTeaser(ctx, bodyText);
-			body.setText(bodyText);
+			text.setTextIsSelectable(false);
+			if (postText.length() > TEASER_LENGTH)
+				postText = getTeaser(ctx, postText);
+			text.setText(postText);
 		}
 
 		// reblog button
@@ -163,15 +163,15 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 							commentContainer, false);
 
 			AuthorView author = v.findViewById(R.id.authorView);
-			TextView body = v.findViewById(R.id.bodyView);
+			TextView text = v.findViewById(R.id.textView);
 
 			author.setAuthor(c.getAuthor());
 			author.setAuthorStatus(c.getAuthorStatus());
 			author.setDate(c.getTimestamp());
 			// TODO make author clickable #624
 
-			body.setText(c.getComment());
-			if (fullText) body.setTextIsSelectable(true);
+			text.setText(c.getComment());
+			if (fullText) text.setTextIsSelectable(true);
 
 			commentContainer.addView(v);
 		}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
index eb7b9812c1cd5daad1a48aaf7799cd89fa3550f3..d077f97f83689159f6699b8aa0d0a9c2bf8bece9 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
@@ -35,7 +35,7 @@ import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.util.LogUtils.logException;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH;
 
 public class WriteBlogPostActivity extends BriarActivity
 		implements OnEditorActionListener, TextInputListener {
@@ -70,7 +70,7 @@ public class WriteBlogPostActivity extends BriarActivity
 
 		setContentView(R.layout.activity_write_blog_post);
 
-		input = findViewById(R.id.bodyInput);
+		input = findViewById(R.id.textInput);
 		input.setSendButtonEnabled(false);
 		input.addTextChangedListener(new TextWatcher() {
 			@Override
@@ -132,23 +132,23 @@ public class WriteBlogPostActivity extends BriarActivity
 	}
 
 	@Override
-	public void onSendClick(String body) {
+	public void onSendClick(String text) {
 		// hide publish button, show progress bar
 		input.hideSoftKeyboard();
 		input.setVisibility(GONE);
 		progressBar.setVisibility(VISIBLE);
 
-		body = StringUtils.truncateUtf8(body, MAX_BLOG_POST_BODY_LENGTH);
-		storePost(body);
+		text = StringUtils.truncateUtf8(text, MAX_BLOG_POST_TEXT_LENGTH);
+		storePost(text);
 	}
 
-	private void storePost(String body) {
+	private void storePost(String text) {
 		runOnDbThread(() -> {
 			long timestamp = System.currentTimeMillis();
 			try {
 				LocalAuthor author = identityManager.getLocalAuthor();
 				BlogPost p = blogPostFactory
-						.createBlogPost(groupId, timestamp, null, author, body);
+						.createBlogPost(groupId, timestamp, null, author, text);
 				blogManager.addLocalPost(p);
 				postPublished();
 			} catch (DbException | GeneralSecurityException
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
index 6e6ce6d78505d1a0ae20c4a88fecccd9989d8d4d..423f47ec9afa0056f95a24d677898eaf7b5578f8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
@@ -53,7 +53,7 @@ import org.briarproject.briar.android.activity.ActivityComponent;
 import org.briarproject.briar.android.activity.BriarActivity;
 import org.briarproject.briar.android.blog.BlogActivity;
 import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener;
-import org.briarproject.briar.android.contact.ConversationVisitor.BodyCache;
+import org.briarproject.briar.android.contact.ConversationVisitor.TextCache;
 import org.briarproject.briar.android.forum.ForumActivity;
 import org.briarproject.briar.android.introduction.IntroductionActivity;
 import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
@@ -105,7 +105,7 @@ import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_INTRO
 import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
 import static org.briarproject.briar.android.util.UiUtils.getAvatarTransitionName;
 import static org.briarproject.briar.android.util.UiUtils.getBulbTransitionName;
-import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
 import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.STATE_DISMISSED;
 import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.STATE_FINISHED;
 
@@ -113,7 +113,7 @@ import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.S
 @ParametersNotNullByDefault
 public class ConversationActivity extends BriarActivity
 		implements EventListener, ConversationListener, TextInputListener,
-		BodyCache {
+		TextCache {
 
 	public static final String CONTACT_ID = "briar.CONTACT_ID";
 
@@ -130,7 +130,7 @@ public class ConversationActivity extends BriarActivity
 	@CryptoExecutor
 	Executor cryptoExecutor;
 
-	private final Map<MessageId, String> bodyCache = new ConcurrentHashMap<>();
+	private final Map<MessageId, String> textCache = new ConcurrentHashMap<>();
 	private final MutableLiveData<String> contactName = new MutableLiveData<>();
 
 	private ConversationVisitor visitor;
@@ -370,28 +370,28 @@ public class ConversationActivity extends BriarActivity
 		return items;
 	}
 
-	private void loadMessageBody(MessageId m) {
+	private void loadMessageText(MessageId m) {
 		runOnDbThread(() -> {
 			try {
 				long start = now();
-				String body = messagingManager.getMessageBody(m);
-				logDuration(LOG, "Loading body", start);
-				displayMessageBody(m, body);
+				String text = messagingManager.getMessageText(m);
+				logDuration(LOG, "Loading text", start);
+				displayMessageText(m, text);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 			}
 		});
 	}
 
-	private void displayMessageBody(MessageId m, String body) {
+	private void displayMessageText(MessageId m, String text) {
 		runOnUiThreadUnlessDestroyed(() -> {
-			bodyCache.put(m, body);
+			textCache.put(m, text);
 			SparseArray<ConversationItem> messages =
 					adapter.getPrivateMessages();
 			for (int i = 0; i < messages.size(); i++) {
 				ConversationItem item = messages.valueAt(i);
 				if (item.getId().equals(m)) {
-					item.setBody(body);
+					item.setText(text);
 					adapter.notifyItemChanged(messages.keyAt(i));
 					list.scrollToPosition(adapter.getItemCount() - 1);
 					return;
@@ -470,7 +470,7 @@ public class ConversationActivity extends BriarActivity
 				}
 			} else {
 				addConversationItem(h.accept(visitor));
-				loadMessageBody(h.getId());
+				loadMessageText(h.getId());
 			}
 		});
 	}
@@ -495,8 +495,8 @@ public class ConversationActivity extends BriarActivity
 
 	@Override
 	public void onSendClick(String text) {
-		if (text.equals("")) return;
-		text = StringUtils.truncateUtf8(text, MAX_PRIVATE_MESSAGE_BODY_LENGTH);
+		if (text.isEmpty()) return;
+		text = StringUtils.truncateUtf8(text, MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
 		long timestamp = System.currentTimeMillis();
 		timestamp = Math.max(timestamp, getMinTimestampForNewMessage());
 		if (messagingGroupId == null) loadGroupId(text, timestamp);
@@ -510,12 +510,12 @@ public class ConversationActivity extends BriarActivity
 		return item == null ? 0 : item.getTime() + 1;
 	}
 
-	private void loadGroupId(String body, long timestamp) {
+	private void loadGroupId(String text, long timestamp) {
 		runOnDbThread(() -> {
 			try {
 				messagingGroupId =
 						messagingManager.getConversationId(contactId);
-				createMessage(body, timestamp);
+				createMessage(text, timestamp);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 			}
@@ -523,19 +523,19 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void createMessage(String body, long timestamp) {
+	private void createMessage(String text, long timestamp) {
 		cryptoExecutor.execute(() -> {
 			try {
 				//noinspection ConstantConditions init in loadGroupId()
 				storeMessage(privateMessageFactory.createPrivateMessage(
-						messagingGroupId, timestamp, body), body);
+						messagingGroupId, timestamp, text), text);
 			} catch (FormatException e) {
 				throw new RuntimeException(e);
 			}
 		});
 	}
 
-	private void storeMessage(PrivateMessage m, String body) {
+	private void storeMessage(PrivateMessage m, String text) {
 		runOnDbThread(() -> {
 			try {
 				long start = now();
@@ -545,7 +545,7 @@ public class ConversationActivity extends BriarActivity
 				PrivateMessageHeader h = new PrivateMessageHeader(
 						message.getId(), message.getGroupId(),
 						message.getTimestamp(), true, false, false, false);
-				bodyCache.put(message.getId(), body);
+				textCache.put(message.getId(), text);
 				addConversationItem(h.accept(visitor));
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
@@ -761,9 +761,9 @@ public class ConversationActivity extends BriarActivity
 
 	@Nullable
 	@Override
-	public String getBody(MessageId m) {
-		String body = bodyCache.get(m);
-		if (body == null) loadMessageBody(m);
-		return body;
+	public String getText(MessageId m) {
+		String text = textCache.get(m);
+		if (text == null) loadMessageText(m);
+		return text;
 	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
index 98b72b39008c59d83bad7747e1296a36354a25fd..bfd724dff88a48dffb34f2a111d62addb870d43b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
@@ -14,17 +14,17 @@ import javax.annotation.concurrent.NotThreadSafe;
 abstract class ConversationItem {
 
 	@Nullable
-	protected String body;
+	protected String text;
 	private final MessageId id;
 	private final GroupId groupId;
 	private final long time;
 	private boolean read;
 
-	ConversationItem(MessageId id, GroupId groupId, @Nullable String body,
+	ConversationItem(MessageId id, GroupId groupId, @Nullable String text,
 			long time, boolean read) {
 		this.id = id;
 		this.groupId = groupId;
-		this.body = body;
+		this.text = text;
 		this.time = time;
 		this.read = read;
 	}
@@ -37,13 +37,13 @@ abstract class ConversationItem {
 		return groupId;
 	}
 
-	void setBody(String body) {
-		this.body = body;
+	void setText(String text) {
+		this.text = text;
 	}
 
 	@Nullable
-	public String getBody() {
-		return body;
+	public String getText() {
+		return text;
 	}
 
 	long getTime() {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
index 2d0763a3b85e20a5b1ea3b3823bd56335749aec0..596b9adf7680cbeeefc0b869ee576f07ef182801 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItemViewHolder.java
@@ -29,10 +29,10 @@ class ConversationItemViewHolder extends ViewHolder {
 
 	@CallSuper
 	void bind(ConversationItem item) {
-		if (item.getBody() == null) {
+		if (item.getText() == null) {
 			text.setText("\u2026");
 		} else {
-			text.setText(StringUtils.trim(item.getBody()));
+			text.setText(StringUtils.trim(item.getText()));
 		}
 
 		long timestamp = item.getTime();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
index a77ec07bac37792fb45f182508f023c7f1a33d3c..7ea6e93e89fe43136f5e2c8b271c26a58953eb4c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInViewHolder.java
@@ -29,13 +29,13 @@ class ConversationNoticeInViewHolder extends ConversationItemViewHolder {
 		ConversationNoticeInItem item =
 				(ConversationNoticeInItem) conversationItem;
 
-		String message = item.getMsgText();
-		if (StringUtils.isNullOrEmpty(message)) {
+		String text = item.getMsgText();
+		if (StringUtils.isNullOrEmpty(text)) {
 			msgText.setVisibility(GONE);
 			layout.setBackgroundResource(R.drawable.notice_in);
 		} else {
 			msgText.setVisibility(VISIBLE);
-			msgText.setText(StringUtils.trim(message));
+			msgText.setText(StringUtils.trim(text));
 			layout.setBackgroundResource(R.drawable.notice_in_bottom);
 		}
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
index d575e2a832ba2e279d6478181f79fa0f5abfc03a..63eb8e0faa0c16aae060a6e8ace881acc9f42478 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java
@@ -20,7 +20,7 @@ class ConversationNoticeOutItem extends ConversationOutItem {
 	ConversationNoticeOutItem(String text, PrivateRequest r) {
 		super(r.getId(), r.getGroupId(), text, r.getTimestamp(), r.isSent(),
 				r.isSeen());
-		this.msgText = r.getMessage();
+		this.msgText = r.getText();
 	}
 
 	ConversationNoticeOutItem(String text, PrivateResponse r) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
index d762018fba584f1a0432072ee8dbc9e9b822a787..90962b8edae23f751b3623751b464c3c5c8c114e 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutViewHolder.java
@@ -29,13 +29,13 @@ class ConversationNoticeOutViewHolder extends ConversationOutItemViewHolder {
 		ConversationNoticeOutItem item =
 				(ConversationNoticeOutItem) conversationItem;
 
-		String message = item.getMsgText();
-		if (StringUtils.isNullOrEmpty(message)) {
+		String text = item.getMsgText();
+		if (StringUtils.isNullOrEmpty(text)) {
 			msgText.setVisibility(GONE);
 			layout.setBackgroundResource(R.drawable.notice_out);
 		} else {
 			msgText.setVisibility(VISIBLE);
-			msgText.setText(StringUtils.trim(message));
+			msgText.setText(StringUtils.trim(text));
 			layout.setBackgroundResource(R.drawable.notice_out_bottom);
 		}
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
index f6dc0a2ead21e0d5a542c1ea3c85605bf8464fe1..cd0ce22edb910a16a99488df90b4aeabe33d1c97 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
@@ -27,7 +27,7 @@ class ConversationRequestItem extends ConversationNoticeInItem {
 	private boolean answered;
 
 	ConversationRequestItem(String text, RequestType type, PrivateRequest r) {
-		super(r.getId(), r.getGroupId(), text, r.getMessage(),
+		super(r.getId(), r.getGroupId(), text, r.getText(),
 				r.getTimestamp(), r.isRead());
 		this.requestType = type;
 		this.sessionId = r.getSessionId();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java
index e74dfecf302a707583642cae2822309a9cdb275d..3c33b27c0ccb7cc64601296551d6c97fda0c80f4 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java
@@ -30,13 +30,13 @@ import static org.briarproject.briar.android.contact.ConversationRequestItem.Req
 class ConversationVisitor implements PrivateMessageVisitor<ConversationItem> {
 
 	private final Context ctx;
-	private final BodyCache bodyCache;
+	private final TextCache textCache;
 	private final LiveData<String> contactName;
 
-	ConversationVisitor(Context ctx, BodyCache bodyCache,
+	ConversationVisitor(Context ctx, TextCache textCache,
 			LiveData<String> contactName) {
 		this.ctx = ctx;
-		this.bodyCache = bodyCache;
+		this.textCache = textCache;
 		this.contactName = contactName;
 	}
 
@@ -45,8 +45,8 @@ class ConversationVisitor implements PrivateMessageVisitor<ConversationItem> {
 		ConversationItem item;
 		if (h.isLocal()) item = new ConversationMessageOutItem(h);
 		else item = new ConversationMessageInItem(h);
-		String body = bodyCache.getBody(h.getId());
-		if (body != null) item.setBody(body);
+		String text = textCache.getText(h.getId());
+		if (text != null) item.setText(text);
 		return item;
 	}
 
@@ -239,8 +239,8 @@ class ConversationVisitor implements PrivateMessageVisitor<ConversationItem> {
 		}
 	}
 
-	interface BodyCache {
+	interface TextCache {
 		@Nullable
-		String getBody(MessageId m);
+		String getText(MessageId m);
 	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
index 51e6f3937f47376c6d406993116ee1aa8665c854..76c5b82fe611405ea568654dfcd1eb5cac8421ac 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java
@@ -33,7 +33,7 @@ import javax.inject.Inject;
 import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
 import static android.widget.Toast.LENGTH_SHORT;
 import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_SHARE_FORUM;
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -130,8 +130,8 @@ public class ForumActivity extends
 	}
 
 	@Override
-	protected int getMaxBodyLength() {
-		return MAX_FORUM_POST_BODY_LENGTH;
+	protected int getMaxTextLength() {
+		return MAX_FORUM_POST_TEXT_LENGTH;
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
index 9abe8a1374fbd84512ac035a6cf69763a60abff9..8ca52974fabcdad21c15b40f3facce9b190053fb 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java
@@ -79,7 +79,7 @@ class ForumControllerImpl extends
 			ForumPostReceivedEvent f = (ForumPostReceivedEvent) e;
 			if (f.getGroupId().equals(getGroupId())) {
 				LOG.info("Forum post received, adding...");
-				onForumPostReceived(f.getHeader(), f.getBody());
+				onForumPostReceived(f.getHeader(), f.getText());
 			}
 		} else if (e instanceof ForumInvitationResponseReceivedEvent) {
 			ForumInvitationResponseReceivedEvent f =
@@ -109,8 +109,8 @@ class ForumControllerImpl extends
 	}
 
 	@Override
-	protected String loadMessageBody(ForumPostHeader h) throws DbException {
-		return forumManager.getPostBody(h.getId());
+	protected String loadMessageText(ForumPostHeader h) throws DbException {
+		return forumManager.getPostText(h.getId());
 	}
 
 	@Override
@@ -137,7 +137,7 @@ class ForumControllerImpl extends
 	}
 
 	@Override
-	public void createAndStoreMessage(String body,
+	public void createAndStoreMessage(String text,
 			@Nullable ForumItem parentItem,
 			ResultExceptionHandler<ForumItem, DbException> handler) {
 		runOnDbThread(() -> {
@@ -148,7 +148,7 @@ class ForumControllerImpl extends
 						clock.currentTimeMillis());
 				MessageId parentId = parentItem != null ?
 						parentItem.getId() : null;
-				createMessage(body, timestamp, parentId, author, handler);
+				createMessage(text, timestamp, parentId, author, handler);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 				handler.onException(e);
@@ -156,14 +156,14 @@ class ForumControllerImpl extends
 		});
 	}
 
-	private void createMessage(String body, long timestamp,
+	private void createMessage(String text, long timestamp,
 			@Nullable MessageId parentId, LocalAuthor author,
 			ResultExceptionHandler<ForumItem, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			LOG.info("Creating forum post...");
-			ForumPost msg = forumManager.createLocalPost(getGroupId(), body,
+			ForumPost msg = forumManager.createLocalPost(getGroupId(), text,
 					timestamp, parentId, author);
-			storePost(msg, body, handler);
+			storePost(msg, text, handler);
 		});
 	}
 
@@ -179,12 +179,12 @@ class ForumControllerImpl extends
 	}
 
 	@Override
-	protected ForumItem buildItem(ForumPostHeader header, String body) {
-		return new ForumItem(header, body);
+	protected ForumItem buildItem(ForumPostHeader header, String text) {
+		return new ForumItem(header, text);
 	}
 
-	private void onForumPostReceived(ForumPostHeader h, String body) {
-		ForumItem item = buildItem(h, body);
+	private void onForumPostReceived(ForumPostHeader h, String text) {
+		ForumItem item = buildItem(h, text);
 		listener.runOnUiThreadUnlessDestroyed(
 				() -> listener.onItemReceived(item));
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java
index 51070e9068b0454b5d0be3aa183f210b3c00abc8..e963aed49a64e11a8165a3df074e394250a204a5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumItem.java
@@ -12,8 +12,8 @@ import javax.annotation.concurrent.NotThreadSafe;
 @NotThreadSafe
 class ForumItem extends ThreadItem {
 
-	ForumItem(ForumPostHeader h, String body) {
-		super(h.getId(), h.getParentId(), body, h.getTimestamp(), h.getAuthor(),
+	ForumItem(ForumPostHeader h, String text) {
+		super(h.getId(), h.getParentId(), text, h.getTimestamp(), h.getAuthor(),
 				h.getAuthorStatus(), h.isRead());
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
index 7bf01e5892cc6afc198b20a3bea90bb432f4aaa3..194641f075450af33d1f53022bfc0812671f3deb 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
@@ -38,7 +38,7 @@ import static android.view.View.VISIBLE;
 import static android.widget.Toast.LENGTH_SHORT;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.util.LogUtils.logException;
-import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_REQUEST_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_TEXT_LENGTH;
 
 public class IntroductionMessageFragment extends BaseFragment
 		implements TextInputListener {
@@ -187,10 +187,10 @@ public class IntroductionMessageFragment extends BaseFragment
 		// disable button to prevent accidental double invitations
 		ui.message.setSendButtonEnabled(false);
 
-		String msg = ui.message.getText().toString();
-		if (msg.equals("")) msg = null;
-		else msg = StringUtils.truncateUtf8(msg, MAX_REQUEST_MESSAGE_LENGTH);
-		makeIntroduction(contact1, contact2, msg);
+		String txt = ui.message.getText().toString();
+		if (txt.isEmpty()) txt = null;
+		else txt = StringUtils.truncateUtf8(txt, MAX_INTRODUCTION_TEXT_LENGTH);
+		makeIntroduction(contact1, contact2, txt);
 
 		// don't wait for the introduction to be made before finishing activity
 		introductionActivity.hideSoftKeyboard(ui.message);
@@ -199,12 +199,12 @@ public class IntroductionMessageFragment extends BaseFragment
 	}
 
 	private void makeIntroduction(Contact c1, Contact c2,
-			@Nullable String msg) {
+			@Nullable String text) {
 		introductionActivity.runOnDbThread(() -> {
 			// actually make the introduction
 			try {
 				long timestamp = System.currentTimeMillis();
-				introductionManager.makeIntroduction(c1, c2, msg, timestamp);
+				introductionManager.makeIntroduction(c1, c2, text, timestamp);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 				introductionError();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
index 8222624598b4d7cd333c6e78f50bd6c6fb0a84fb..65b2587e9236dde13362c05ea9997be59610d1b3 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
@@ -37,7 +37,7 @@ import javax.inject.Inject;
 import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
 import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_GROUP_INVITE;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_TEXT_LENGTH;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -179,8 +179,8 @@ public class GroupActivity extends
 	}
 
 	@Override
-	protected int getMaxBodyLength() {
-		return MAX_GROUP_POST_BODY_LENGTH;
+	protected int getMaxTextLength() {
+		return MAX_GROUP_POST_TEXT_LENGTH;
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
index 35a3182653a60bcfe45d2ecd66382511f4588d2f..3756e11a9d35d3fa01207acc04404a528f358b0b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java
@@ -84,7 +84,7 @@ class GroupControllerImpl extends
 			GroupMessageAddedEvent g = (GroupMessageAddedEvent) e;
 			if (!g.isLocal() && g.getGroupId().equals(getGroupId())) {
 				LOG.info("Group message received, adding...");
-				GroupMessageItem item = buildItem(g.getHeader(), g.getBody());
+				GroupMessageItem item = buildItem(g.getHeader(), g.getText());
 				listener.runOnUiThreadUnlessDestroyed(
 						() -> listener.onItemReceived(item));
 			}
@@ -124,13 +124,13 @@ class GroupControllerImpl extends
 	}
 
 	@Override
-	protected String loadMessageBody(GroupMessageHeader header)
+	protected String loadMessageText(GroupMessageHeader header)
 			throws DbException {
 		if (header instanceof JoinMessageHeader) {
 			// will be looked up later
 			return "";
 		}
-		return privateGroupManager.getMessageBody(header.getId());
+		return privateGroupManager.getMessageText(header.getId());
 	}
 
 	@Override
@@ -159,7 +159,7 @@ class GroupControllerImpl extends
 	}
 
 	@Override
-	public void createAndStoreMessage(String body,
+	public void createAndStoreMessage(String text,
 			@Nullable GroupMessageItem parentItem,
 			ResultExceptionHandler<GroupMessageItem, DbException> handler) {
 		runOnDbThread(() -> {
@@ -173,7 +173,7 @@ class GroupControllerImpl extends
 				long timestamp = count.getLatestMsgTime();
 				if (parentItem != null) parentId = parentItem.getId();
 				timestamp = max(clock.currentTimeMillis(), timestamp + 1);
-				createMessage(body, timestamp, parentId, author, previousMsgId,
+				createMessage(text, timestamp, parentId, author, previousMsgId,
 						handler);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
@@ -182,7 +182,7 @@ class GroupControllerImpl extends
 		});
 	}
 
-	private void createMessage(String body, long timestamp,
+	private void createMessage(String text, long timestamp,
 			@Nullable MessageId parentId, LocalAuthor author,
 			MessageId previousMsgId,
 			ResultExceptionHandler<GroupMessageItem, DbException> handler) {
@@ -190,8 +190,8 @@ class GroupControllerImpl extends
 			LOG.info("Creating group message...");
 			GroupMessage msg = groupMessageFactory
 					.createGroupMessage(getGroupId(), timestamp,
-							parentId, author, body, previousMsgId);
-			storePost(msg, body, handler);
+							parentId, author, text, previousMsgId);
+			storePost(msg, text, handler);
 		});
 	}
 
@@ -208,11 +208,11 @@ class GroupControllerImpl extends
 
 	@Override
 	protected GroupMessageItem buildItem(GroupMessageHeader header,
-			String body) {
+			String text) {
 		if (header instanceof JoinMessageHeader) {
-			return new JoinMessageItem((JoinMessageHeader) header, body);
+			return new JoinMessageItem((JoinMessageHeader) header, text);
 		}
-		return new GroupMessageItem(header, body);
+		return new GroupMessageItem(header, text);
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
index 37f7b92a840c3c14cf592f3359b8eaae40db3367..56a7614c0f9854746ea88efad7397cb476f20f15 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
@@ -18,6 +18,6 @@ public interface CreateGroupController
 			ResultExceptionHandler<GroupId, DbException> result);
 
 	void sendInvitation(GroupId g, Collection<ContactId> contacts,
-			String message, ResultExceptionHandler<Void, DbException> result);
+			String text, ResultExceptionHandler<Void, DbException> result);
 
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
index 9791e16d5befc1e607344a4d39b3fbfdd1f474b1..efdd03bb3b83c9b21d3c9fe41ae6fa4952724fe8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
@@ -123,7 +123,7 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 
 	@Override
 	public void sendInvitation(GroupId g, Collection<ContactId> contactIds,
-			String message, ResultExceptionHandler<Void, DbException> handler) {
+			String text, ResultExceptionHandler<Void, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
 				LocalAuthor localAuthor = identityManager.getLocalAuthor();
@@ -135,7 +135,7 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 						// Continue
 					}
 				}
-				signInvitations(g, localAuthor, contacts, message, handler);
+				signInvitations(g, localAuthor, contacts, text, handler);
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 				handler.onException(e);
@@ -144,7 +144,7 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	private void signInvitations(GroupId g, LocalAuthor localAuthor,
-			Collection<Contact> contacts, String message,
+			Collection<Contact> contacts, String text,
 			ResultExceptionHandler<Void, DbException> handler) {
 		cryptoExecutor.execute(() -> {
 			long timestamp = clock.currentTimeMillis();
@@ -155,20 +155,20 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
 				contexts.add(new InvitationContext(c.getId(), timestamp,
 						signature));
 			}
-			sendInvitations(g, contexts, message, handler);
+			sendInvitations(g, contexts, text, handler);
 		});
 	}
 
 	private void sendInvitations(GroupId g,
-			Collection<InvitationContext> contexts, String message,
+			Collection<InvitationContext> contexts, String text,
 			ResultExceptionHandler<Void, DbException> handler) {
 		runOnDbThread(() -> {
 			try {
-				String msg = message.isEmpty() ? null : message;
+				String txt = text.isEmpty() ? null : text;
 				for (InvitationContext context : contexts) {
 					try {
 						groupInvitationManager.sendInvitation(g,
-								context.contactId, msg, context.timestamp,
+								context.contactId, txt, context.timestamp,
 								context.signature);
 					} catch (NoSuchContactException e) {
 						// Continue
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
index 3da66f7cbebceba44233afe0043e716c228d1b26..64dd54404c5e1af746e1dee5922ee75dd4e236fd 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
@@ -18,7 +18,7 @@ import java.util.Collection;
 import javax.annotation.Nullable;
 import javax.inject.Inject;
 
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -55,10 +55,10 @@ public class GroupInviteActivity extends ContactSelectorActivity
 	}
 
 	@Override
-	public boolean onButtonClick(String message) {
+	public boolean onButtonClick(String text) {
 		if (groupId == null)
 			throw new IllegalStateException("GroupId was not initialized");
-		controller.sendInvitation(groupId, contacts, message,
+		controller.sendInvitation(groupId, contacts, text,
 				new UiResultExceptionHandler<Void, DbException>(this) {
 					@Override
 					public void onResultUi(Void result) {
@@ -76,7 +76,7 @@ public class GroupInviteActivity extends ContactSelectorActivity
 	}
 
 	@Override
-	public int getMaximumMessageLength() {
-		return MAX_GROUP_INVITATION_MSG_LENGTH;
+	public int getMaximumTextLength() {
+		return MAX_GROUP_INVITATION_TEXT_LENGTH;
 	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
index 75d999c9b00a8e2918abc51af3cd79c5fbd634dc..c4fee642938f376d49302247cb5f7b7db4967b40 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
@@ -11,7 +11,6 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
-import org.briarproject.bramble.util.StringUtils;
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.fragment.BaseFragment;
 import org.briarproject.briar.android.view.LargeTextInputView;
@@ -19,7 +18,8 @@ import org.briarproject.briar.android.view.TextInputView.TextInputListener;
 
 import static android.support.design.widget.Snackbar.LENGTH_SHORT;
 import static org.briarproject.bramble.util.StringUtils.truncateUtf8;
-import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
+import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 
 public abstract class BaseMessageFragment extends BaseFragment
 		implements TextInputListener {
@@ -76,8 +76,8 @@ public abstract class BaseMessageFragment extends BaseFragment
 	}
 
 	@Override
-	public void onSendClick(String msg) {
-		if (StringUtils.utf8IsTooLong(msg, listener.getMaximumMessageLength())) {
+	public void onSendClick(String text) {
+		if (utf8IsTooLong(text, listener.getMaximumTextLength())) {
 			Snackbar.make(message, R.string.text_too_long, LENGTH_SHORT).show();
 			return;
 		}
@@ -86,8 +86,8 @@ public abstract class BaseMessageFragment extends BaseFragment
 		message.setSendButtonEnabled(false);
 		message.hideSoftKeyboard();
 
-		msg = truncateUtf8(msg, MAX_INVITATION_MESSAGE_LENGTH);
-		if(!listener.onButtonClick(msg)) {
+		text = truncateUtf8(text, MAX_INVITATION_TEXT_LENGTH);
+		if(!listener.onButtonClick(text)) {
 			message.setSendButtonEnabled(true);
 			message.showSoftKeyboard();
 		}
@@ -102,9 +102,9 @@ public abstract class BaseMessageFragment extends BaseFragment
 		void setTitle(@StringRes int titleRes);
 
 		/** Returns true when the button click has been consumed. */
-		boolean onButtonClick(String message);
+		boolean onButtonClick(String text);
 
-		int getMaximumMessageLength();
+		int getMaximumTextLength();
 
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
index 5258a3210e3e258a220eeebe06707f1d5077597c..4c7e6268a50ef82706ee0e6bf743ad3d52ad3121 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
@@ -41,13 +41,13 @@ public abstract class ShareActivity extends ContactSelectorActivity
 
 	@UiThread
 	@Override
-	public boolean onButtonClick(String message) {
-		share(contacts, message);
+	public boolean onButtonClick(String text) {
+		share(contacts, text);
 		setResult(RESULT_OK);
 		supportFinishAfterTransition();
 		return true;
 	}
 
-	abstract void share(Collection<ContactId> contacts, String msg);
+	abstract void share(Collection<ContactId> contacts, String text);
 
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
index b9fbcbde54930c0fcf9b7203f3c133d3e52f8faf..3a89eb994ad64198f73eb6ec2f8f2668f8dc965c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
@@ -17,7 +17,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -46,13 +46,13 @@ public class ShareBlogActivity extends ShareActivity {
 	}
 
 	@Override
-	public int getMaximumMessageLength() {
-		return MAX_MESSAGE_BODY_LENGTH;
+	public int getMaximumTextLength() {
+		return MAX_INVITATION_TEXT_LENGTH;
 	}
 
 	@Override
-	void share(Collection<ContactId> contacts, String msg) {
-		controller.share(groupId, contacts, msg,
+	void share(Collection<ContactId> contacts, String text) {
+		controller.share(groupId, contacts, text,
 				new UiExceptionHandler<DbException>(this) {
 					@Override
 					public void onExceptionUi(DbException exception) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
index 55ed2b46c4d635a68e4626b7b4699f53efcd4e1a..2500d8b592cc89e88436e655067e7126d631f67d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
@@ -12,7 +12,7 @@ import java.util.Collection;
 public interface ShareBlogController
 		extends ContactSelectorController<SelectableContactItem> {
 
-	void share(GroupId g, Collection<ContactId> contacts, String msg,
+	void share(GroupId g, Collection<ContactId> contacts, String text,
 			ExceptionHandler<DbException> handler);
 
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
index 86149af67ccb3685430d91878e746067de9b1f80..c0d002e22a2030dcb977af87e649841e49b5986c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
@@ -56,17 +56,17 @@ class ShareBlogControllerImpl extends ContactSelectorControllerImpl
 	}
 
 	@Override
-	public void share(GroupId g, Collection<ContactId> contacts, String message,
+	public void share(GroupId g, Collection<ContactId> contacts, String text,
 			ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
-				String msg = isNullOrEmpty(message) ? null : message;
+				String txt = isNullOrEmpty(text) ? null : text;
 				for (ContactId c : contacts) {
 					try {
 						long time = Math.max(clock.currentTimeMillis(),
 								conversationManager.getGroupCount(c)
 										.getLatestMsgTime() + 1);
-						blogSharingManager.sendInvitation(g, c, msg, time);
+						blogSharingManager.sendInvitation(g, c, txt, time);
 					} catch (NoSuchContactException | NoSuchGroupException e) {
 						logException(LOG, WARNING, e);
 					}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
index b274991a1a9db503d9614811a7a4866fc002a75a..d4c5974e10650e3b5a17ebcfc1110944a7cb425c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
@@ -17,7 +17,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static android.widget.Toast.LENGTH_SHORT;
-import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -46,13 +46,13 @@ public class ShareForumActivity extends ShareActivity {
 	}
 
 	@Override
-	public int getMaximumMessageLength() {
-		return MAX_MESSAGE_BODY_LENGTH;
+	public int getMaximumTextLength() {
+		return MAX_INVITATION_TEXT_LENGTH;
 	}
 
 	@Override
-	void share(Collection<ContactId> contacts, String msg) {
-		controller.share(groupId, contacts, msg,
+	void share(Collection<ContactId> contacts, String text) {
+		controller.share(groupId, contacts, text,
 				new UiExceptionHandler<DbException>(this) {
 					@Override
 					public void onExceptionUi(DbException exception) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
index eedf45dfc092666a62b8396491a031069e09d3e7..744605714f26dbc4a8e6356058003409f2d0c985 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
@@ -12,7 +12,7 @@ import java.util.Collection;
 public interface ShareForumController
 		extends ContactSelectorController<SelectableContactItem> {
 
-	void share(GroupId g, Collection<ContactId> contacts, String msg,
+	void share(GroupId g, Collection<ContactId> contacts, String text,
 			ExceptionHandler<DbException> handler);
 
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
index 90b08cd7060371bbddc77d87055a246af1c2a725..fad58360af8b458cab2c4a431f1daf3f28a04a81 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
@@ -57,16 +57,16 @@ class ShareForumControllerImpl extends ContactSelectorControllerImpl
 
 	@Override
 	public void share(GroupId g, Collection<ContactId> contacts,
-			String message, ExceptionHandler<DbException> handler) {
+			String text, ExceptionHandler<DbException> handler) {
 		runOnDbThread(() -> {
 			try {
-				String msg = isNullOrEmpty(message) ? null : message;
+				String txt = isNullOrEmpty(text) ? null : text;
 				for (ContactId c : contacts) {
 					try {
 						long time = Math.max(clock.currentTimeMillis(),
 								conversationManager.getGroupCount(c)
 										.getLatestMsgTime() + 1);
-						forumSharingManager.sendInvitation(g, c, msg, time);
+						forumSharingManager.sendInvitation(g, c, txt, time);
 					} catch (NoSuchContactException | NoSuchGroupException e) {
 						logException(LOG, WARNING, e);
 					}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
index 2d30f5c8d583553e0dfc33c3f95961d36ebbe6f4..f99598fc5849cd733c8690439aa3b851330dbca7 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
@@ -17,7 +17,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
 import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.api.sync.MessageId;
-import org.briarproject.bramble.util.StringUtils;
 import org.briarproject.briar.R;
 import org.briarproject.briar.android.activity.BriarActivity;
 import org.briarproject.briar.android.controller.SharingController;
@@ -43,6 +42,7 @@ import static android.support.design.widget.Snackbar.make;
 import static android.support.v7.widget.RecyclerView.NO_POSITION;
 import static android.support.v7.widget.RecyclerView.SCROLL_STATE_IDLE;
 import static java.util.logging.Level.INFO;
+import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong;
 import static org.briarproject.briar.android.threaded.ThreadItemAdapter.UnreadCount;
 
 @MethodsNotNullByDefault
@@ -351,7 +351,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 	public void onSendClick(String text) {
 		if (text.trim().length() == 0)
 			return;
-		if (StringUtils.utf8IsTooLong(text, getMaxBodyLength())) {
+		if (utf8IsTooLong(text, getMaxTextLength())) {
 			displaySnackbar(R.string.text_too_long);
 			return;
 		}
@@ -375,7 +375,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
 		updateTextInput();
 	}
 
-	protected abstract int getMaxBodyLength();
+	protected abstract int getMaxTextLength();
 
 	@Override
 	public void onItemReceived(I item) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
index f64a707689ed7133a2d97ee47016cde462fca659..ea9d77ab3d91121dd6ef3f9ede03b8b1e5129ff5 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java
@@ -35,7 +35,7 @@ public interface ThreadListController<G extends NamedGroup, I extends ThreadItem
 
 	void markItemsRead(Collection<I> items);
 
-	void createAndStoreMessage(String body, @Nullable I parentItem,
+	void createAndStoreMessage(String text, @Nullable I parentItem,
 			ResultExceptionHandler<I, DbException> handler);
 
 	void deleteNamedGroup(ExceptionHandler<DbException> handler);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
index 3eb857aa520a0bccc692417d4a0be4d34d9dcae5..590e582116fffa2d74c50c4b41003d90e9ea2344 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java
@@ -50,7 +50,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 			Logger.getLogger(ThreadListControllerImpl.class.getName());
 
 	private final EventBus eventBus;
-	private final Map<MessageId, String> bodyCache = new ConcurrentHashMap<>();
+	private final Map<MessageId, String> textCache = new ConcurrentHashMap<>();
 	private volatile GroupId groupId;
 
 	protected final IdentityManager identityManager;
@@ -161,9 +161,9 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 				// Load bodies into cache
 				start = now();
 				for (H header : headers) {
-					if (!bodyCache.containsKey(header.getId())) {
-						bodyCache.put(header.getId(),
-								loadMessageBody(header));
+					if (!textCache.containsKey(header.getId())) {
+						textCache.put(header.getId(),
+								loadMessageText(header));
 					}
 				}
 				logDuration(LOG, "Loading bodies", start);
@@ -181,7 +181,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 	protected abstract Collection<H> loadHeaders() throws DbException;
 
 	@DatabaseExecutor
-	protected abstract String loadMessageBody(H header) throws DbException;
+	protected abstract String loadMessageText(H header) throws DbException;
 
 	@Override
 	public void markItemRead(I item) {
@@ -206,15 +206,15 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 	@DatabaseExecutor
 	protected abstract void markRead(MessageId id) throws DbException;
 
-	protected void storePost(M msg, String body,
+	protected void storePost(M msg, String text,
 			ResultExceptionHandler<I, DbException> resultHandler) {
 		runOnDbThread(() -> {
 			try {
 				long start = now();
 				H header = addLocalMessage(msg);
-				bodyCache.put(msg.getMessage().getId(), body);
+				textCache.put(msg.getMessage().getId(), text);
 				logDuration(LOG, "Storing message", start);
-				resultHandler.onResult(buildItem(header, body));
+				resultHandler.onResult(buildItem(header, text));
 			} catch (DbException e) {
 				logException(LOG, WARNING, e);
 				resultHandler.onException(e);
@@ -247,7 +247,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 			throws DbException {
 		ThreadItemList<I> items = new ThreadItemListImpl<>();
 		for (H h : headers) {
-			items.add(buildItem(h, bodyCache.get(h.getId())));
+			items.add(buildItem(h, textCache.get(h.getId())));
 		}
 		MessageId msgId = messageTracker.loadStoredMessageId(groupId);
 		if (LOG.isLoggable(INFO))
@@ -256,7 +256,7 @@ public abstract class ThreadListControllerImpl<G extends NamedGroup, I extends T
 		return items;
 	}
 
-	protected abstract I buildItem(H header, String body);
+	protected abstract I buildItem(H header, String text);
 
 	protected GroupId getGroupId() {
 		checkGroupId();
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
index 44426700d5088704e0088fbe6c92a28f918e950d..ff18520f4d4ade8b28e8c928666505120b8e0343 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java
@@ -106,13 +106,13 @@ public class UiUtils {
 		return (int) daysBeforeExpiry;
 	}
 
-	public static SpannableStringBuilder getTeaser(Context ctx, Spanned body) {
-		if (body.length() < TEASER_LENGTH)
+	public static SpannableStringBuilder getTeaser(Context ctx, Spanned text) {
+		if (text.length() < TEASER_LENGTH)
 			throw new IllegalArgumentException(
 					"String is shorter than TEASER_LENGTH");
 
 		SpannableStringBuilder builder =
-				new SpannableStringBuilder(body.subSequence(0, TEASER_LENGTH));
+				new SpannableStringBuilder(text.subSequence(0, TEASER_LENGTH));
 		String ellipsis = ctx.getString(R.string.ellipsis);
 		builder.append(ellipsis).append(" ");
 
diff --git a/briar-android/src/main/res/layout/activity_write_blog_post.xml b/briar-android/src/main/res/layout/activity_write_blog_post.xml
index 8376d5804a1b94a22d3af011ae2ca9e2f582944c..e6d09987e7e1b228a07745279ee38ea02cb4e6f0 100644
--- a/briar-android/src/main/res/layout/activity_write_blog_post.xml
+++ b/briar-android/src/main/res/layout/activity_write_blog_post.xml
@@ -8,7 +8,7 @@
 	tools:context=".android.blog.WriteBlogPostActivity">
 
 	<org.briarproject.briar.android.view.LargeTextInputView
-		android:id="@+id/bodyInput"
+		android:id="@+id/textInput"
 		android:layout_width="match_parent"
 		android:layout_height="match_parent"
 		android:gravity="bottom"
diff --git a/briar-android/src/main/res/layout/list_item_blog_comment.xml b/briar-android/src/main/res/layout/list_item_blog_comment.xml
index 6c20a7a0c1d611dae6ee8c51faf50d9eb8ea5aea..9488d52ac253f6827a28fd318f389c30805dfddd 100644
--- a/briar-android/src/main/res/layout/list_item_blog_comment.xml
+++ b/briar-android/src/main/res/layout/list_item_blog_comment.xml
@@ -24,7 +24,7 @@
 		app:persona="commenter"/>
 
 	<com.vanniktech.emoji.EmojiTextView
-		android:id="@+id/bodyView"
+		android:id="@+id/textView"
 		android:layout_width="0dp"
 		android:layout_height="wrap_content"
 		android:paddingBottom="@dimen/listitem_vertical_margin"
diff --git a/briar-android/src/main/res/layout/list_item_blog_post.xml b/briar-android/src/main/res/layout/list_item_blog_post.xml
index 76bb71e33ad35be087a3dff9b4e04189119a96fc..98eb37b4a1fd5fda6cbfd6cad5899d7861703577 100644
--- a/briar-android/src/main/res/layout/list_item_blog_post.xml
+++ b/briar-android/src/main/res/layout/list_item_blog_post.xml
@@ -54,7 +54,7 @@
 			app:tint="?attr/colorControlNormal"/>
 
 		<com.vanniktech.emoji.EmojiTextView
-			android:id="@+id/bodyView"
+			android:id="@+id/textView"
 			android:layout_width="0dp"
 			android:layout_height="wrap_content"
 			android:layout_margin="@dimen/listitem_vertical_margin"
@@ -72,7 +72,7 @@
 			android:layout_height="wrap_content"
 			android:layout_marginTop="@dimen/listitem_vertical_margin"
 			android:orientation="vertical"
-			app:layout_constraintTop_toBottomOf="@+id/bodyView">
+			app:layout_constraintTop_toBottomOf="@+id/textView">
 
 			<include
 				layout="@layout/list_item_blog_comment"
diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
index bf18e7ad0e58bfb2802992e7a5a7a2cba28158d7..d940e5b8ab6dc5b60a44b3162a74f25a7f3420d8 100644
--- a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
+++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java
@@ -30,7 +30,7 @@ import static org.briarproject.bramble.api.identity.Author.Status.UNKNOWN;
 import static org.briarproject.bramble.test.TestUtils.getAuthor;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -85,9 +85,9 @@ public class ForumActivityTest {
 		ForumItem[] forumItems = new ForumItem[6];
 		for (int i = 0; i < forumItems.length; i++) {
 			Author author = getAuthor();
-			String content = getRandomString(MAX_FORUM_POST_BODY_LENGTH);
+			String text = getRandomString(MAX_FORUM_POST_TEXT_LENGTH);
 			forumItems[i] = new ForumItem(MESSAGE_IDS[i], PARENT_IDS[i],
-					content, System.currentTimeMillis(), author, UNKNOWN);
+					text, System.currentTimeMillis(), author, UNKNOWN);
 			forumItems[i].setLevel(LEVELS[i]);
 		}
 		ThreadItemList<ForumItem> list = new ThreadItemListImpl<>();
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogConstants.java
index accb030daf6003ae0ec2607c95295d88c961d853..4a9fa9548cc08f25dbcbee176afdf0197e8e3313 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogConstants.java
@@ -5,14 +5,14 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
 public interface BlogConstants {
 
 	/**
-	 * The maximum length of a blog post's body in bytes.
+	 * The maximum length of a blog post's text in UTF-8 bytes.
 	 */
-	int MAX_BLOG_POST_BODY_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_BLOG_POST_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 	/**
-	 * The maximum length of a blog comment in bytes.
+	 * The maximum length of a blog comment's text in UTF-8 bytes.
 	 */
-	int MAX_BLOG_COMMENT_LENGTH = MAX_BLOG_POST_BODY_LENGTH;
+	int MAX_BLOG_COMMENT_TEXT_LENGTH = MAX_BLOG_POST_TEXT_LENGTH;
 
 	// Metadata keys
 	String KEY_TYPE = "type";
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java
index b77e05bd73711346579bdb52ad92fc3116755dfc..a34b4de6d155583d616ab55cdef251a1a74c577f 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java
@@ -14,10 +14,10 @@ public class BlogInvitationRequest extends InvitationRequest<Blog> {
 
 	public BlogInvitationRequest(MessageId id, GroupId groupId, long time,
 			boolean local, boolean sent, boolean seen, boolean read,
-			SessionId sessionId, Blog blog, @Nullable String message,
+			SessionId sessionId, Blog blog, @Nullable String text,
 			boolean available, boolean canBeOpened) {
 		super(id, groupId, time, local, sent, seen, read, sessionId, blog,
-				message, available, canBeOpened);
+				text, available, canBeOpened);
 	}
 
 	@Override
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
index 9179a84a820ce1440428d6f85e856805850f335f..27ac12bac9f0dda84b1f7c7c2bb9fb02bd8a905d 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java
@@ -104,9 +104,9 @@ public interface BlogManager {
 	BlogPostHeader getPostHeader(GroupId g, MessageId m) throws DbException;
 
 	/**
-	 * Returns the body of the blog post with the given ID.
+	 * Returns the text of the blog post with the given ID.
 	 */
-	String getPostBody(MessageId m) throws DbException;
+	String getPostText(MessageId m) throws DbException;
 
 	/**
 	 * Returns the headers of all posts in the given blog.
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogPostFactory.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogPostFactory.java
index 9bfc80696792b2021b0455c53de49295699aba84..1b7cd03dee06774f137693ad4edf7794e6925849 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogPostFactory.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogPostFactory.java
@@ -21,7 +21,7 @@ public interface BlogPostFactory {
 	String SIGNING_LABEL_COMMENT = CLIENT_ID.getString() + "/COMMENT";
 
 	BlogPost createBlogPost(GroupId groupId, long timestamp,
-			@Nullable MessageId parent, LocalAuthor author, String body)
+			@Nullable MessageId parent, LocalAuthor author, String text)
 			throws FormatException, GeneralSecurityException;
 
 	Message createBlogComment(GroupId groupId, LocalAuthor author,
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumConstants.java
index fbece006cdfc93137710be3a4763f0d335fd2bbe..309e8f4c48e008a4c66f5e17704876cb6a1fc245 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumConstants.java
@@ -15,9 +15,9 @@ public interface ForumConstants {
 	int FORUM_SALT_LENGTH = 32;
 
 	/**
-	 * The maximum length of a forum post's body in bytes.
+	 * The maximum length of a forum post's text in UTF-8 bytes.
 	 */
-	int MAX_FORUM_POST_BODY_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_FORUM_POST_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 	// Metadata keys
 	String KEY_TIMESTAMP = "timestamp";
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java
index 3944eca7491e67229a1e56f0abd254b0a2894c87..ce2dea7f8175e87f758eda249c96e79f76237020 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java
@@ -16,10 +16,10 @@ public class ForumInvitationRequest extends InvitationRequest<Forum> {
 
 	public ForumInvitationRequest(MessageId id, GroupId groupId, long time,
 			boolean local, boolean sent, boolean seen, boolean read,
-			SessionId sessionId, Forum forum, @Nullable String message,
+			SessionId sessionId, Forum forum, @Nullable String text,
 			boolean available, boolean canBeOpened) {
 		super(id, groupId, time, local, sent, seen, read, sessionId, forum,
-				message, available, canBeOpened);
+				text, available, canBeOpened);
 	}
 
 	@Override
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
index 96f44777680116348bf6eb5fe25d891376336b56..75297693a83192207865313982210c0cb0a99300 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumManager.java
@@ -51,7 +51,7 @@ public interface ForumManager {
 	 * Creates a local forum post.
 	 */
 	@CryptoExecutor
-	ForumPost createLocalPost(GroupId groupId, String body, long timestamp,
+	ForumPost createLocalPost(GroupId groupId, String text, long timestamp,
 			@Nullable MessageId parentId, LocalAuthor author);
 
 	/**
@@ -75,9 +75,9 @@ public interface ForumManager {
 	Collection<Forum> getForums() throws DbException;
 
 	/**
-	 * Returns the body of the forum post with the given ID.
+	 * Returns the text of the forum post with the given ID.
 	 */
-	String getPostBody(MessageId m) throws DbException;
+	String getPostText(MessageId m) throws DbException;
 
 	/**
 	 * Returns the headers of all posts in the given forum.
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumPostFactory.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumPostFactory.java
index 51f47fbe5ba6b9e4d8932f479b39734d06486bfd..3abe250dffca626668d0ec00f3d37e3d7de5913c 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumPostFactory.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumPostFactory.java
@@ -20,7 +20,7 @@ public interface ForumPostFactory {
 
 	@CryptoExecutor
 	ForumPost createPost(GroupId groupId, long timestamp,
-			@Nullable MessageId parent, LocalAuthor author, String body)
+			@Nullable MessageId parent, LocalAuthor author, String text)
 			throws FormatException, GeneralSecurityException;
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumPostReceivedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumPostReceivedEvent.java
index 44a24db8fc38bc6ef33b6f7e34e157dc415702a2..28582acf66fa874b3daf0da14bc226ab70006e49 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumPostReceivedEvent.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/event/ForumPostReceivedEvent.java
@@ -16,13 +16,13 @@ public class ForumPostReceivedEvent extends Event {
 
 	private final GroupId groupId;
 	private final ForumPostHeader header;
-	private final String body;
+	private final String text;
 
 	public ForumPostReceivedEvent(GroupId groupId, ForumPostHeader header,
-			String body) {
+			String text) {
 		this.groupId = groupId;
 		this.header = header;
-		this.body = body;
+		this.text = text;
 	}
 
 	public GroupId getGroupId() {
@@ -33,7 +33,7 @@ public class ForumPostReceivedEvent extends Event {
 		return header;
 	}
 
-	public String getBody() {
-		return body;
+	public String getText() {
+		return text;
 	}
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionConstants.java
index 87681d525076125d90ed43e7437911d4aea8f97e..d57f8f71f2a9651e5ad99e277374c2f728fea0f2 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionConstants.java
@@ -8,7 +8,7 @@ public interface IntroductionConstants {
 	 * The maximum length of the introducer's optional message to the
 	 * introducees in UTF-8 bytes.
 	 */
-	int MAX_REQUEST_MESSAGE_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_INTRODUCTION_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 	String LABEL_SESSION_ID = "org.briarproject.briar.introduction/SESSION_ID";
 
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
index b52273daf26d073cc4a639ce2b03510323b3684a..0d0e4ef221b2907f2b90083d6ea183ff4898d11d 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java
@@ -36,7 +36,7 @@ public interface IntroductionManager extends ConversationClient {
 	/**
 	 * Sends two initial introduction messages.
 	 */
-	void makeIntroduction(Contact c1, Contact c2, @Nullable String msg,
+	void makeIntroduction(Contact c1, Contact c2, @Nullable String text,
 			long timestamp) throws DbException;
 
 	/**
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java
index fe7de46de44c976e0faabfceb40fea490599dda2..5cbe9e0dd98f8bdc3aef1b5c09e4f9bced589df9 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java
@@ -19,10 +19,10 @@ public class IntroductionRequest extends PrivateRequest<Author> {
 
 	public IntroductionRequest(MessageId messageId, GroupId groupId,
 			long time, boolean local, boolean sent, boolean seen, boolean read,
-			SessionId sessionId, Author author, @Nullable String message,
+			SessionId sessionId, Author author, @Nullable String text,
 			boolean answered, boolean contact) {
 		super(messageId, groupId, time, local, sent, seen, read, sessionId,
-				author, message, answered);
+				author, text, answered);
 		this.contact = contact;
 	}
 
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java
index be2eeab2c4ba661dcdc876226334f1b0bac51f74..4d335141822f9ba25371b8cc1486b32327aeeec5 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/ConversationManager.java
@@ -25,7 +25,7 @@ public interface ConversationManager {
 	 * Returns the headers of all messages in the given private conversation.
 	 *
 	 * Only {@link MessagingManager} returns only headers.
-	 * The others also return the message body.
+	 * The others also return the message text.
 	 */
 	Collection<PrivateMessageHeader> getMessageHeaders(ContactId c)
 			throws DbException;
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingConstants.java
index f515e60e6af719fbddbd938b17d7972428b88d1d..1efdd748d78167d89f3e302569a0218e9758d8c6 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingConstants.java
@@ -5,7 +5,7 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
 public interface MessagingConstants {
 
 	/**
-	 * The maximum length of a private message's body in bytes.
+	 * The maximum length of a private message's text in UTF-8 bytes.
 	 */
-	int MAX_PRIVATE_MESSAGE_BODY_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_PRIVATE_MESSAGE_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
index 47c4f66b0fc6291649408a70d151e3a96301dab5..65c2eacb09361a6f5e29be1d4bdbdb59662132ef 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java
@@ -42,8 +42,8 @@ public interface MessagingManager extends ConversationClient {
 	GroupId getConversationId(ContactId c) throws DbException;
 
 	/**
-	 * Returns the body of the private message with the given ID.
+	 * Returns the text of the private message with the given ID.
 	 */
-	String getMessageBody(MessageId m) throws DbException;
+	String getMessageText(MessageId m) throws DbException;
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java
index 95db155f10465c0a462dd2dab5fd411b2bd919c2..8fbcf11a863e7916808510e10ad419401eb2bb58 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageFactory.java
@@ -8,6 +8,6 @@ import org.briarproject.bramble.api.sync.GroupId;
 public interface PrivateMessageFactory {
 
 	PrivateMessage createPrivateMessage(GroupId groupId, long timestamp,
-			String body) throws FormatException;
+			String text) throws FormatException;
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java
index b980cea30d62fe716c66cb24c563a31b56167a9d..ead57390b9ba0c41f3fe5c7f266a5cf63bd3f314 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateRequest.java
@@ -16,17 +16,17 @@ public class PrivateRequest<N extends Nameable> extends PrivateMessageHeader {
 	private final SessionId sessionId;
 	private final N nameable;
 	@Nullable
-	private final String message;
+	private final String text;
 	private final boolean answered;
 
 	public PrivateRequest(MessageId messageId, GroupId groupId, long time,
 			boolean local, boolean sent, boolean seen, boolean read,
-			SessionId sessionId, N nameable, @Nullable String message,
+			SessionId sessionId, N nameable, @Nullable String text,
 			boolean answered) {
 		super(messageId, groupId, time, local, sent, seen, read);
 		this.sessionId = sessionId;
 		this.nameable = nameable;
-		this.message = message;
+		this.text = text;
 		this.answered = answered;
 	}
 
@@ -43,8 +43,8 @@ public class PrivateRequest<N extends Nameable> extends PrivateMessageHeader {
 	}
 
 	@Nullable
-	public String getMessage() {
-		return message;
+	public String getText() {
+		return text;
 	}
 
 	public boolean wasAnswered() {
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/GroupMessageFactory.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/GroupMessageFactory.java
index a36ce0be74179549d08887474aa4d64186df9117..03b0ea3fd0c0f5ececde02bbeedea7912920088d 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/GroupMessageFactory.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/GroupMessageFactory.java
@@ -51,13 +51,13 @@ public interface GroupMessageFactory {
 	 * @param parentId The ID of the parent post, or null if the post has no
 	 * parent
 	 * @param author The author of the post
-	 * @param body The content of the post
+	 * @param text The text of the post
 	 * @param previousMsgId The ID of the author's previous message
 	 * in this group
 	 */
 	@CryptoExecutor
 	GroupMessage createGroupMessage(GroupId groupId, long timestamp,
-			@Nullable MessageId parentId, LocalAuthor author, String body,
+			@Nullable MessageId parentId, LocalAuthor author, String text,
 			MessageId previousMsgId);
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupConstants.java
index c9496a1b3f9521b1d0cafa1d8c989012e72a3247..0f2d699ac267368bc8dd57cd6fbf31c2a29e3323 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupConstants.java
@@ -15,13 +15,13 @@ public interface PrivateGroupConstants {
 	int GROUP_SALT_LENGTH = 32;
 
 	/**
-	 * The maximum length of a group post's body in bytes.
+	 * The maximum length of a group post's text in UTF-8 bytes.
 	 */
-	int MAX_GROUP_POST_BODY_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_GROUP_POST_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 	/**
-	 * The maximum length of a group invitation message in bytes.
+	 * The maximum length of a group invitation's optional text in UTF-8 bytes.
 	 */
-	int MAX_GROUP_INVITATION_MSG_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_GROUP_INVITATION_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
index de4caecfc6a15d91e0eb130efbdb474800ffbfeb..6ef9e025998652d2a8bfd86949399d68d2cf6239 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java
@@ -92,9 +92,9 @@ public interface PrivateGroupManager {
 	Collection<PrivateGroup> getPrivateGroups() throws DbException;
 
 	/**
-	 * Returns the body of the private group message with the given ID.
+	 * Returns the text of the private group message with the given ID.
 	 */
-	String getMessageBody(MessageId m) throws DbException;
+	String getMessageText(MessageId m) throws DbException;
 
 	/**
 	 * Returns the headers of all messages in the given private group.
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java
index ce75850e52bed14daf156da87086de989dfc4974..80c25bd0becaca5dd80b8dca734797fdccc1cc48 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java
@@ -17,14 +17,14 @@ public class GroupMessageAddedEvent extends Event {
 
 	private final GroupId groupId;
 	private final GroupMessageHeader header;
-	private final String body;
+	private final String text;
 	private final boolean local;
 
 	public GroupMessageAddedEvent(GroupId groupId, GroupMessageHeader header,
-			String body, boolean local) {
+			String text, boolean local) {
 		this.groupId = groupId;
 		this.header = header;
-		this.body = body;
+		this.text = text;
 		this.local = local;
 	}
 
@@ -36,8 +36,8 @@ public class GroupMessageAddedEvent extends Event {
 		return header;
 	}
 
-	public String getBody() {
-		return body;
+	public String getText() {
+		return text;
 	}
 
 	public boolean isLocal() {
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
index 913edbbc66301e101440efa3a3ee525936a8d22f..a7295bc76209a83b62ea7c262faaffbe1e4cd84c 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationManager.java
@@ -42,7 +42,7 @@ public interface GroupInvitationManager extends ConversationClient {
 	 * shared with the contact, for example because an invitation is already
 	 * pending.
 	 */
-	void sendInvitation(GroupId g, ContactId c, @Nullable String message,
+	void sendInvitation(GroupId g, ContactId c, @Nullable String text,
 			long timestamp, byte[] signature) throws DbException;
 
 	/**
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java
index 794b005af6cd037366eb6ecacb13a09f688c110f..6d3e5d5783bb2ddc807b061cea029ff782a78931 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java
@@ -18,9 +18,9 @@ public class GroupInvitationRequest extends InvitationRequest<PrivateGroup> {
 	public GroupInvitationRequest(MessageId id, GroupId groupId, long time,
 			boolean local, boolean sent, boolean seen, boolean read,
 			SessionId sessionId, PrivateGroup shareable,
-			@Nullable String message, boolean available, boolean canBeOpened) {
+			@Nullable String text, boolean available, boolean canBeOpened) {
 		super(id, groupId, time, local, sent, seen, read, sessionId, shareable,
-				message, available, canBeOpened);
+				text, available, canBeOpened);
 	}
 
 	@Override
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java
index 7cf456eb615a83388a0a8ff28581b598f7ff6c99..4da9acd78bedeb4c4de5c67cd8ba8cf694a25019 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java
@@ -14,10 +14,10 @@ public abstract class InvitationRequest<S extends Shareable> extends
 
 	public InvitationRequest(MessageId messageId, GroupId groupId, long time,
 			boolean local, boolean sent, boolean seen, boolean read,
-			SessionId sessionId, S object, @Nullable String message,
+			SessionId sessionId, S object, @Nullable String text,
 			boolean available, boolean canBeOpened) {
 		super(messageId, groupId, time, local, sent, seen, read, sessionId,
-				object, message, !available);
+				object, text, !available);
 		this.canBeOpened = canBeOpened;
 	}
 
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingConstants.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingConstants.java
index 81eb45aff61d8f51abd6adcb7f0e515a9fcafc3a..86e9f7f244d165585afd63a51364c1c8516ea985 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingConstants.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingConstants.java
@@ -5,9 +5,8 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
 public interface SharingConstants {
 
 	/**
-	 * The maximum length of the optional message from the inviter to the
-	 * invitee in UTF-8 bytes.
+	 * The maximum length of an invitation's optional text in UTF-8 bytes.
 	 */
-	int MAX_INVITATION_MESSAGE_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
+	int MAX_INVITATION_TEXT_LENGTH = MAX_MESSAGE_BODY_LENGTH - 1024;
 
 }
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java
index 64f4af7621626ab07c14476b1052529f87434ba7..8b81a8b207326b8deff274c425ca7e06881e6577 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/SharingManager.java
@@ -17,11 +17,11 @@ public interface SharingManager<S extends Shareable>
 		extends ConversationClient {
 
 	/**
-	 * Sends an invitation to share the given group with the given contact
-	 * and sends an optional message along with it.
+	 * Sends an invitation to share the given group with the given contact,
+	 * including optional text.
 	 */
 	void sendInvitation(GroupId shareableId, ContactId contactId,
-			@Nullable String message, long timestamp) throws DbException;
+			@Nullable String text, long timestamp) throws DbException;
 
 	/**
 	 * Responds to a pending group invitation
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java b/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java
index fe1178307b6bd667bbcdc27bd8f6593f58e9fea9..073a7b38a8b65ebd30ad7aa7218f967825a95d1d 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java
@@ -26,7 +26,7 @@ public interface TestDataCreator {
 	Contact addContact(String name) throws DbException;
 
 	@IoExecutor
-	void addPrivateMessage(Contact contact, String body, long time,
+	void addPrivateMessage(Contact contact, String text, long time,
 			boolean local) throws DbException, FormatException;
 
 }
diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java
index 7718b0d68aec1253f66c2a208b850fab7d529639..18c97f3ad8177c1ac1d8b3ba2a236445c8c51567 100644
--- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java
@@ -456,21 +456,22 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 	}
 
 	@Override
-	public String getPostBody(MessageId m) throws DbException {
+	public String getPostText(MessageId m) throws DbException {
 		try {
-			return getPostBody(clientHelper.getMessageAsList(m));
+			return getPostText(clientHelper.getMessageAsList(m));
 		} catch (FormatException e) {
 			throw new DbException(e);
 		}
 	}
 
-	private String getPostBody(BdfList message) throws FormatException {
+	private String getPostText(BdfList message) throws FormatException {
 		MessageType type = MessageType.valueOf(message.getLong(0).intValue());
 		if (type == POST) {
-			// type, body, signature
+			// Type, text, signature
 			return message.getString(1);
 		} else if (type == WRAPPED_POST) {
-			// type, p_group descriptor, p_timestamp, p_content, p_signature
+			// Type, copied group descriptor, copied timestamp, copied text,
+			// copied signature
 			return message.getString(3);
 		} else {
 			throw new FormatException();
diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostFactoryImpl.java
index bd89a0ba81930ea31b2416f1386a642938d1e0f3..12e2ff435376db418c0d2018cb319c5d16ec0f63 100644
--- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostFactoryImpl.java
@@ -20,8 +20,8 @@ import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
 import javax.inject.Inject;
 
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_LENGTH;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_TEXT_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.blog.MessageType.COMMENT;
 import static org.briarproject.briar.api.blog.MessageType.POST;
 import static org.briarproject.briar.api.blog.MessageType.WRAPPED_COMMENT;
@@ -42,23 +42,23 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 
 	@Override
 	public BlogPost createBlogPost(GroupId groupId, long timestamp,
-			@Nullable MessageId parent, LocalAuthor author, String body)
+			@Nullable MessageId parent, LocalAuthor author, String text)
 			throws FormatException, GeneralSecurityException {
 
 		// Validate the arguments
-		int bodyLength = StringUtils.toUtf8(body).length;
-		if (bodyLength > MAX_BLOG_POST_BODY_LENGTH)
+		int textLength = StringUtils.toUtf8(text).length;
+		if (textLength > MAX_BLOG_POST_TEXT_LENGTH)
 			throw new IllegalArgumentException();
 
 		// Serialise the data to be signed
-		BdfList signed = BdfList.of(groupId, timestamp, body);
+		BdfList signed = BdfList.of(groupId, timestamp, text);
 
 		// Generate the signature
 		byte[] sig = clientHelper
 				.sign(SIGNING_LABEL_POST, signed, author.getPrivateKey());
 
 		// Serialise the signed message
-		BdfList message = BdfList.of(POST.getInt(), body, sig);
+		BdfList message = BdfList.of(POST.getInt(), text, sig);
 		Message m = clientHelper.createMessage(groupId, timestamp, message);
 		return new BlogPost(m, parent, author);
 	}
@@ -72,7 +72,7 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 		if (comment != null) {
 			int commentLength = StringUtils.toUtf8(comment).length;
 			if (commentLength == 0) throw new IllegalArgumentException();
-			if (commentLength > MAX_BLOG_COMMENT_LENGTH)
+			if (commentLength > MAX_BLOG_COMMENT_TEXT_LENGTH)
 				throw new IllegalArgumentException();
 		}
 
@@ -98,10 +98,10 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 			throw new IllegalArgumentException("Needs to wrap a POST");
 
 		// Serialise the message
-		String content = body.getString(1);
+		String text = body.getString(1);
 		byte[] signature = body.getRaw(2);
 		BdfList message = BdfList.of(WRAPPED_POST.getInt(), descriptor,
-				timestamp, content, signature);
+				timestamp, text, signature);
 		return clientHelper
 				.createMessage(groupId, clock.currentTimeMillis(), message);
 	}
@@ -116,10 +116,10 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 		// Serialise the message
 		byte[] descriptor = body.getRaw(1);
 		long timestamp = body.getLong(2);
-		String content = body.getString(3);
+		String text = body.getString(3);
 		byte[] signature = body.getRaw(4);
 		BdfList message = BdfList.of(WRAPPED_POST.getInt(), descriptor,
-				timestamp, content, signature);
+				timestamp, text, signature);
 		return clientHelper
 				.createMessage(groupId, clock.currentTimeMillis(), message);
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostValidator.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostValidator.java
index 0b53468df84f2c1efab4669b08f8c9c465531925..86347dd3445a8d1cf67f64a492aea1da2a36243b 100644
--- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogPostValidator.java
@@ -22,10 +22,10 @@ import org.briarproject.briar.api.blog.MessageType;
 
 import java.security.GeneralSecurityException;
 import java.util.Collection;
-import java.util.Collections;
 
 import javax.annotation.concurrent.Immutable;
 
+import static java.util.Collections.singletonList;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
@@ -39,8 +39,8 @@ import static org.briarproject.briar.api.blog.BlogConstants.KEY_RSS_FEED;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TIMESTAMP;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TIME_RECEIVED;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TYPE;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_LENGTH;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_TEXT_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID;
 import static org.briarproject.briar.api.blog.BlogManager.MAJOR_VERSION;
 import static org.briarproject.briar.api.blog.BlogPostFactory.SIGNING_LABEL_COMMENT;
@@ -99,15 +99,15 @@ class BlogPostValidator extends BdfMessageValidator {
 	private BdfMessageContext validatePost(Message m, Group g, BdfList body)
 			throws InvalidMessageException, FormatException {
 
-		// Content, Signature
+		// Text, signature
 		checkSize(body, 2);
-		String postBody = body.getString(0);
-		checkLength(postBody, 0, MAX_BLOG_POST_BODY_LENGTH);
+		String text = body.getString(0);
+		checkLength(text, 0, MAX_BLOG_POST_TEXT_LENGTH);
 
-		// Verify Signature
+		// Verify signature
 		byte[] sig = body.getRaw(1);
 		checkLength(sig, 1, MAX_SIGNATURE_LENGTH);
-		BdfList signed = BdfList.of(g.getId(), m.getTimestamp(), postBody);
+		BdfList signed = BdfList.of(g.getId(), m.getTimestamp(), text);
 		Blog b = blogFactory.parseBlog(g);
 		Author a = b.getAuthor();
 		try {
@@ -128,23 +128,23 @@ class BlogPostValidator extends BdfMessageValidator {
 	private BdfMessageContext validateComment(Message m, Group g, BdfList body)
 			throws InvalidMessageException, FormatException {
 
-		// comment, parent_original_id, parent_id, signature
+		// Comment, parent original ID, parent ID, signature
 		checkSize(body, 4);
 
 		// Comment
 		String comment = body.getOptionalString(0);
-		checkLength(comment, 1, MAX_BLOG_COMMENT_LENGTH);
+		checkLength(comment, 1, MAX_BLOG_COMMENT_TEXT_LENGTH);
 
-		// parent_original_id
-		// The ID of a post or comment in this group or another group
+		// Parent original ID
+		// The ID of a post or comment in this blog or another blog
 		byte[] pOriginalIdBytes = body.getRaw(1);
 		checkLength(pOriginalIdBytes, MessageId.LENGTH);
 		MessageId pOriginalId = new MessageId(pOriginalIdBytes);
 
-		// parent_id
-		// The ID of a post, comment, wrapped post or wrapped comment in this
-		// group, which had the ID parent_original_id in the group
-		// where it was originally posted
+		// Parent ID
+		// The ID of the comment's parent, which is a post, comment, wrapped
+		// post or wrapped comment in this blog, which had the ID
+		// parentOriginalId in the blog where it was originally posted
 		byte[] currentIdBytes = body.getRaw(2);
 		checkLength(currentIdBytes, MessageId.LENGTH);
 		MessageId currentId = new MessageId(currentIdBytes);
@@ -170,35 +170,37 @@ class BlogPostValidator extends BdfMessageValidator {
 		meta.put(KEY_ORIGINAL_PARENT_MSG_ID, pOriginalId);
 		meta.put(KEY_PARENT_MSG_ID, currentId);
 		meta.put(KEY_AUTHOR, clientHelper.toList(a));
-		Collection<MessageId> dependencies = Collections.singleton(currentId);
+		Collection<MessageId> dependencies = singletonList(currentId);
 		return new BdfMessageContext(meta, dependencies);
 	}
 
 	private BdfMessageContext validateWrappedPost(BdfList body)
 			throws InvalidMessageException, FormatException {
 
-		// p_group descriptor, p_timestamp, p_content, p_signature
+		// Copied group descriptor, copied timestamp, copied text, copied
+		// signature
 		checkSize(body, 4);
 
-		// Group Descriptor
+		// Copied group descriptor of original post
 		byte[] descriptor = body.getRaw(0);
 
-		// Timestamp of Wrapped Post
+		// Copied timestamp of original post
 		long wTimestamp = body.getLong(1);
 		if (wTimestamp < 0) throw new FormatException();
 
-		// Content of Wrapped Post
-		String content = body.getString(2);
+		// Copied text of original post
+		String text = body.getString(2);
+		checkLength(text, 0, MAX_BLOG_POST_TEXT_LENGTH);
 
-		// Signature of Wrapped Post
+		// Copied signature of original post
 		byte[] signature = body.getRaw(3);
 		checkLength(signature, 1, MAX_SIGNATURE_LENGTH);
 
-		// Get and Validate the Wrapped Message
+		// Reconstruct and validate the original post
 		Group wGroup = groupFactory.createGroup(CLIENT_ID, MAJOR_VERSION,
 				descriptor);
 		Blog wBlog = blogFactory.parseBlog(wGroup);
-		BdfList wBodyList = BdfList.of(POST.getInt(), content, signature);
+		BdfList wBodyList = BdfList.of(POST.getInt(), text, signature);
 		byte[] wBody = clientHelper.toByteArray(wBodyList);
 		Message wMessage =
 				messageFactory.createMessage(wGroup.getId(), wTimestamp, wBody);
@@ -217,47 +219,46 @@ class BlogPostValidator extends BdfMessageValidator {
 	private BdfMessageContext validateWrappedComment(BdfList body)
 			throws InvalidMessageException, FormatException {
 
-		// c_group descriptor, c_timestamp, c_comment, c_parent_original_id,
-		// c_parent_id, c_signature, parent_id
+		// Copied group descriptor, copied timestamp, copied text, copied
+		// parent original ID, copied parent ID, copied signature, parent ID
 		checkSize(body, 7);
 
-		// Group Descriptor
+		// Copied group descriptor of original comment
 		byte[] descriptor = body.getRaw(0);
 
-		// Timestamp of Wrapped Comment
+		// Copied timestamp of original comment
 		long wTimestamp = body.getLong(1);
 		if (wTimestamp < 0) throw new FormatException();
 
-		// Body of Wrapped Comment
+		// Copied text of original comment
 		String comment = body.getOptionalString(2);
-		checkLength(comment, 1, MAX_BLOG_COMMENT_LENGTH);
+		checkLength(comment, 1, MAX_BLOG_COMMENT_TEXT_LENGTH);
 
-		// c_parent_original_id
-		// Taken from the original comment
+		// Copied parent original ID of original comment
 		byte[] pOriginalIdBytes = body.getRaw(3);
 		checkLength(pOriginalIdBytes, MessageId.LENGTH);
 		MessageId pOriginalId = new MessageId(pOriginalIdBytes);
 
-		// c_parent_id
-		// Taken from the original comment
+		// Copied parent ID of original comment
 		byte[] oldIdBytes = body.getRaw(4);
 		checkLength(oldIdBytes, MessageId.LENGTH);
 		MessageId oldId = new MessageId(oldIdBytes);
 
-		// c_signature
-		// Taken from the original comment
+		// Copied signature of original comment
 		byte[] signature = body.getRaw(5);
 		checkLength(signature, 1, MAX_SIGNATURE_LENGTH);
 
-		// parent_id
-		// The ID of a post, comment, wrapped post or wrapped comment in this
-		// group, which had the ID c_parent_original_id in the group
-		// where it was originally posted
+		// Parent ID
+		// The ID of this comment's parent, which is a post, comment, wrapped
+		// post or wrapped comment in this blog, which had the ID
+		// copiedParentOriginalId in the blog where the parent was originally
+		// posted, and the ID copiedParentId in the blog where this comment was
+		// originally posted
 		byte[] parentIdBytes = body.getRaw(6);
 		checkLength(parentIdBytes, MessageId.LENGTH);
 		MessageId parentId = new MessageId(parentIdBytes);
 
-		// Get and Validate the Wrapped Comment
+		// Reconstruct and validate the original comment
 		Group wGroup = groupFactory.createGroup(CLIENT_ID, MAJOR_VERSION,
 				descriptor);
 		BdfList wBodyList = BdfList.of(COMMENT.getInt(), comment, pOriginalId,
@@ -269,7 +270,7 @@ class BlogPostValidator extends BdfMessageValidator {
 		BdfMessageContext c = validateComment(wMessage, wGroup, wBodyList);
 
 		// Return the metadata and dependencies
-		Collection<MessageId> dependencies = Collections.singleton(parentId);
+		Collection<MessageId> dependencies = singletonList(parentId);
 		BdfDictionary meta = new BdfDictionary();
 		meta.put(KEY_ORIGINAL_MSG_ID, wMessage.getId());
 		meta.put(KEY_ORIGINAL_PARENT_MSG_ID, pOriginalId);
diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
index 38a374035cdfa6151badcde3c3a1b96b64b824ef..cea1e169ff27f6478bffb218a0e2888d682c8c44 100644
--- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
@@ -64,7 +64,7 @@ import okhttp3.ResponseBody;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.util.LogUtils.logException;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.feed.FeedConstants.FETCH_DELAY_INITIAL;
 import static org.briarproject.briar.api.feed.FeedConstants.FETCH_INTERVAL;
 import static org.briarproject.briar.api.feed.FeedConstants.FETCH_UNIT;
@@ -410,11 +410,10 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
 		return lastEntryTime;
 	}
 
-	private void postEntry(Transaction txn, Feed feed, SyndEntry entry)
-			throws DbException {
+	private void postEntry(Transaction txn, Feed feed, SyndEntry entry) {
 		LOG.info("Adding new entry...");
 
-		// build post body
+		// build post text
 		StringBuilder b = new StringBuilder();
 
 		if (!StringUtils.isNullOrEmpty(entry.getTitle())) {
@@ -454,12 +453,12 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
 		if (date == null) date = entry.getPublishedDate();
 		if (date == null) time = now;
 		else time = Math.max(0, Math.min(date.getTime(), now));
-		String body = getPostBody(b.toString());
+		String text = getPostText(b.toString());
 		try {
 			// create and store post
 			LocalAuthor localAuthor = feed.getLocalAuthor();
 			BlogPost post = blogPostFactory
-					.createBlogPost(groupId, time, null, localAuthor, body);
+					.createBlogPost(groupId, time, null, localAuthor, text);
 			blogManager.addLocalPost(txn, post);
 		} catch (DbException | GeneralSecurityException | FormatException e) {
 			logException(LOG, WARNING, e);
@@ -470,9 +469,9 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
 		}
 	}
 
-	private String getPostBody(String text) {
+	private String getPostText(String text) {
 		text = clean(text, ARTICLE);
-		return StringUtils.truncateUtf8(text, MAX_BLOG_POST_BODY_LENGTH);
+		return StringUtils.truncateUtf8(text, MAX_BLOG_POST_TEXT_LENGTH);
 	}
 
 	private Comparator<SyndEntry> getEntryComparator() {
diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
index b60e7c94bf452dcf18dbf408937c70348f8f651e..d1b3bb9750e333394e372c6b50b7b675722a0909 100644
--- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java
@@ -82,9 +82,9 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 		messageTracker.trackIncomingMessage(txn, m);
 
 		ForumPostHeader header = getForumPostHeader(txn, m.getId(), meta);
-		String postBody = getPostBody(body);
+		String text = getPostText(body);
 		ForumPostReceivedEvent event =
-				new ForumPostReceivedEvent(m.getGroupId(), header, postBody);
+				new ForumPostReceivedEvent(m.getGroupId(), header, text);
 		txn.attach(event);
 
 		// share message
@@ -113,12 +113,12 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 	}
 
 	@Override
-	public ForumPost createLocalPost(GroupId groupId, String body,
+	public ForumPost createLocalPost(GroupId groupId, String text,
 			long timestamp, @Nullable MessageId parentId, LocalAuthor author) {
 		ForumPost p;
 		try {
 			p = forumPostFactory.createPost(groupId, timestamp, parentId,
-					author, body);
+					author, text);
 		} catch (GeneralSecurityException | FormatException e) {
 			throw new AssertionError(e);
 		}
@@ -175,16 +175,16 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 	}
 
 	@Override
-	public String getPostBody(MessageId m) throws DbException {
+	public String getPostText(MessageId m) throws DbException {
 		try {
-			return getPostBody(clientHelper.getMessageAsList(m));
+			return getPostText(clientHelper.getMessageAsList(m));
 		} catch (FormatException e) {
 			throw new DbException(e);
 		}
 	}
 
-	private String getPostBody(BdfList body) throws FormatException {
-		// Parent ID, author, forum post body, signature
+	private String getPostText(BdfList body) throws FormatException {
+		// Parent ID, author, text, signature
 		return body.getString(2);
 	}
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostFactoryImpl.java
index acdb7fb90ee44a2063dd4d722f2c15c79af445d5..c07987d9cc04f4d3fa48b581726d0956a7c2a1c1 100644
--- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostFactoryImpl.java
@@ -8,7 +8,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.MessageId;
-import org.briarproject.bramble.util.StringUtils;
 import org.briarproject.briar.api.forum.ForumPost;
 import org.briarproject.briar.api.forum.ForumPostFactory;
 
@@ -18,7 +17,8 @@ import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
 import javax.inject.Inject;
 
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
 
 @Immutable
 @NotNullByDefault
@@ -33,20 +33,20 @@ class ForumPostFactoryImpl implements ForumPostFactory {
 
 	@Override
 	public ForumPost createPost(GroupId groupId, long timestamp,
-			@Nullable MessageId parent, LocalAuthor author, String body)
+			@Nullable MessageId parent, LocalAuthor author, String text)
 			throws FormatException, GeneralSecurityException {
 		// Validate the arguments
-		if (StringUtils.utf8IsTooLong(body, MAX_FORUM_POST_BODY_LENGTH))
+		if (utf8IsTooLong(text, MAX_FORUM_POST_TEXT_LENGTH))
 			throw new IllegalArgumentException();
 		// Serialise the data to be signed
 		BdfList authorList = clientHelper.toList(author);
 		BdfList signed = BdfList.of(groupId, timestamp, parent, authorList,
-				body);
+				text);
 		// Sign the data
 		byte[] sig = clientHelper.sign(SIGNING_LABEL_POST, signed,
 				author.getPrivateKey());
 		// Serialise the signed message
-		BdfList message = BdfList.of(parent, authorList, body, sig);
+		BdfList message = BdfList.of(parent, authorList, text, sig);
 		Message m = clientHelper.createMessage(groupId, timestamp, message);
 		return new ForumPost(m, parent, author);
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostValidator.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostValidator.java
index 8357361c7324e25d1a9ea52f6f3f061b64e6433e..818a9b9e36ffeacb8f3cef2f84516e7f5ee8fcf5 100644
--- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumPostValidator.java
@@ -18,10 +18,11 @@ import org.briarproject.bramble.api.system.Clock;
 
 import java.security.GeneralSecurityException;
 import java.util.Collection;
-import java.util.Collections;
 
 import javax.annotation.concurrent.Immutable;
 
+import static java.util.Collections.emptyList;
+import static java.util.Collections.singletonList;
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
@@ -29,7 +30,7 @@ import static org.briarproject.briar.api.forum.ForumConstants.KEY_AUTHOR;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_PARENT;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_READ;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_TIMESTAMP;
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.forum.ForumPostFactory.SIGNING_LABEL_POST;
 
 @Immutable
@@ -44,7 +45,7 @@ class ForumPostValidator extends BdfMessageValidator {
 	@Override
 	protected BdfMessageContext validateMessage(Message m, Group g,
 			BdfList body) throws InvalidMessageException, FormatException {
-		// Parent ID, author, content type, forum post body, signature
+		// Parent ID, author, text, signature
 		checkSize(body, 4);
 
 		// Parent ID is optional
@@ -55,16 +56,17 @@ class ForumPostValidator extends BdfMessageValidator {
 		BdfList authorList = body.getList(1);
 		Author author = clientHelper.parseAndValidateAuthor(authorList);
 
-		// Forum post body
-		String content = body.getString(2);
-		checkLength(content, 0, MAX_FORUM_POST_BODY_LENGTH);
+		// Text
+		String text = body.getString(2);
+		checkLength(text, 0, MAX_FORUM_POST_TEXT_LENGTH);
 
 		// Signature
 		byte[] sig = body.getRaw(3);
 		checkLength(sig, 1, MAX_SIGNATURE_LENGTH);
+
 		// Verify the signature
 		BdfList signed = BdfList.of(g.getId(), m.getTimestamp(), parent,
-				authorList, content);
+				authorList, text);
 		try {
 			clientHelper.verifySignature(sig, SIGNING_LABEL_POST,
 					signed, author.getPublicKey());
@@ -74,11 +76,11 @@ class ForumPostValidator extends BdfMessageValidator {
 
 		// Return the metadata and dependencies
 		BdfDictionary meta = new BdfDictionary();
-		Collection<MessageId> dependencies = Collections.emptyList();
+		Collection<MessageId> dependencies = emptyList();
 		meta.put(KEY_TIMESTAMP, m.getTimestamp());
 		if (parent != null) {
 			meta.put(KEY_PARENT, parent);
-			dependencies = Collections.singletonList(new MessageId(parent));
+			dependencies = singletonList(new MessageId(parent));
 		}
 		meta.put(KEY_AUTHOR, authorList);
 		meta.put(KEY_READ, false);
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java
index 68d8d61c4f4399712234db4214fd5104a9b37234..8438974e6743b88519cec5b31e2834d280c3ea6c 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java
@@ -72,11 +72,11 @@ abstract class AbstractProtocolEngine<S extends Session>
 	}
 
 	Message sendRequestMessage(Transaction txn, PeerSession s,
-			long timestamp, Author author, @Nullable String message)
+			long timestamp, Author author, @Nullable String text)
 			throws DbException {
 		Message m = messageEncoder
 				.encodeRequestMessage(s.getContactGroupId(), timestamp,
-						s.getLastLocalMessageId(), author, message);
+						s.getLastLocalMessageId(), author, text);
 		sendMessage(txn, REQUEST, s.getSessionId(), m, true);
 		return m;
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
index a0a871ac868275e13590703439378ed603217e65..b63da62078dd6699788d6425ceff50861e83e26c 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
@@ -85,8 +85,7 @@ class IntroduceeProtocolEngine
 
 	@Override
 	public IntroduceeSession onRequestAction(Transaction txn,
-			IntroduceeSession session, @Nullable String message,
-			long timestamp) {
+			IntroduceeSession session, @Nullable String text, long timestamp) {
 		throw new UnsupportedOperationException(); // Invalid in this role
 	}
 
@@ -256,7 +255,7 @@ class IntroduceeProtocolEngine
 				.contactExists(txn, m.getAuthor().getId(), localAuthor.getId());
 		IntroductionRequest request = new IntroductionRequest(m.getMessageId(),
 				m.getGroupId(), m.getTimestamp(), false, false, false, false,
-				s.getSessionId(), m.getAuthor(), m.getMessage(), false,
+				s.getSessionId(), m.getAuthor(), m.getText(), false,
 				contactExists);
 		IntroductionRequestReceivedEvent e =
 				new IntroductionRequestReceivedEvent(request, c.getId());
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
index c159697adc5253a64ca77866052291980b087a93..69e6579a9449e75e124dc010a0fed7a37bada884 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
@@ -58,11 +58,11 @@ class IntroducerProtocolEngine
 
 	@Override
 	public IntroducerSession onRequestAction(Transaction txn,
-			IntroducerSession s, @Nullable String message, long timestamp)
+			IntroducerSession s, @Nullable String text, long timestamp)
 			throws DbException {
 		switch (s.getState()) {
 			case START:
-				return onLocalRequest(txn, s, message, timestamp);
+				return onLocalRequest(txn, s, text, timestamp);
 			case AWAIT_RESPONSES:
 			case AWAIT_RESPONSE_A:
 			case AWAIT_RESPONSE_B:
@@ -222,7 +222,7 @@ class IntroducerProtocolEngine
 	}
 
 	private IntroducerSession onLocalRequest(Transaction txn,
-			IntroducerSession s, @Nullable String message, long timestamp)
+			IntroducerSession s, @Nullable String text, long timestamp)
 			throws DbException {
 		// Send REQUEST messages
 		long maxIntroduceeTimestamp =
@@ -230,11 +230,9 @@ class IntroducerProtocolEngine
 						getLocalTimestamp(s, s.getIntroduceeB()));
 		long localTimestamp = Math.max(timestamp, maxIntroduceeTimestamp);
 		Message sentA = sendRequestMessage(txn, s.getIntroduceeA(),
-				localTimestamp, s.getIntroduceeB().author, message
-		);
+				localTimestamp, s.getIntroduceeB().author, text);
 		Message sentB = sendRequestMessage(txn, s.getIntroduceeB(),
-				localTimestamp, s.getIntroduceeA().author, message
-		);
+				localTimestamp, s.getIntroduceeA().author, text);
 		// Track the messages
 		messageTracker.trackOutgoingMessage(txn, sentA);
 		messageTracker.trackOutgoingMessage(txn, sentB);
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
index 50c6fefcb477a756fc8b1a28dd03e92541b69314..6d6727aec755013b0a4e5486a45bc5ee3f017698 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java
@@ -316,7 +316,7 @@ class IntroductionManagerImpl extends ConversationClientImpl
 	}
 
 	@Override
-	public void makeIntroduction(Contact c1, Contact c2, @Nullable String msg,
+	public void makeIntroduction(Contact c1, Contact c2, @Nullable String text,
 			long timestamp) throws DbException {
 		Transaction txn = db.startTransaction(false);
 		try {
@@ -350,7 +350,7 @@ class IntroductionManagerImpl extends ConversationClientImpl
 			}
 			// Handle the request action
 			session = introducerEngine
-					.onRequestAction(txn, session, msg, timestamp);
+					.onRequestAction(txn, session, text, timestamp);
 			// Store the updated session
 			storeSession(txn, storageId, session);
 			db.commitTransaction(txn);
@@ -461,14 +461,14 @@ class IntroductionManagerImpl extends ConversationClientImpl
 		Message msg = clientHelper.getMessage(txn, m);
 		BdfList body = clientHelper.toList(msg);
 		RequestMessage rm = messageParser.parseRequestMessage(msg, body);
-		String message = rm.getMessage();
+		String text = rm.getText();
 		LocalAuthor localAuthor = identityManager.getLocalAuthor(txn);
 		boolean contactExists = contactManager
 				.contactExists(txn, rm.getAuthor().getId(),
 						localAuthor.getId());
 		return new IntroductionRequest(m, contactGroupId, meta.getTimestamp(),
 				meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead(),
-				sessionId, author, message, !meta.isAvailableToAnswer(),
+				sessionId, author, text, !meta.isAvailableToAnswer(),
 				contactExists);
 	}
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionValidator.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionValidator.java
index 929c8bddf91798d3ca284ed9a42308edaa0a5e60..b62604fe55c90b92dd8f1e61e1c93c9fa8a14855 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionValidator.java
@@ -24,7 +24,7 @@ import static org.briarproject.bramble.api.crypto.CryptoConstants.MAX_SIGNATURE_
 import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
-import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_REQUEST_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_TEXT_LENGTH;
 import static org.briarproject.briar.introduction.MessageType.ACCEPT;
 import static org.briarproject.briar.introduction.MessageType.ACTIVATE;
 import static org.briarproject.briar.introduction.MessageType.AUTH;
@@ -75,8 +75,8 @@ class IntroductionValidator extends BdfMessageValidator {
 		BdfList authorList = body.getList(2);
 		clientHelper.parseAndValidateAuthor(authorList);
 
-		String msg = body.getOptionalString(3);
-		checkLength(msg, 1, MAX_REQUEST_MESSAGE_LENGTH);
+		String text = body.getOptionalString(3);
+		checkLength(text, 1, MAX_INTRODUCTION_TEXT_LENGTH);
 
 		BdfDictionary meta =
 				messageEncoder.encodeRequestMetadata(m.getTimestamp());
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoder.java b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoder.java
index 1327b54a938150a5c14019ae5db11a9dab162934..98d06b39db3cda2af5657ed346736128266e1d18 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoder.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoder.java
@@ -31,7 +31,7 @@ interface MessageEncoder {
 
 	Message encodeRequestMessage(GroupId contactGroupId, long timestamp,
 			@Nullable MessageId previousMessageId, Author author,
-			@Nullable String message);
+			@Nullable String text);
 
 	Message encodeAcceptMessage(GroupId contactGroupId, long timestamp,
 			@Nullable MessageId previousMessageId, SessionId sessionId,
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoderImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoderImpl.java
index fb3d66f38012129401d21453d63b9ab431be13d1..91df8046c983929815d36ad98225a0448050a2c2 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoderImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageEncoderImpl.java
@@ -89,15 +89,15 @@ class MessageEncoderImpl implements MessageEncoder {
 	@Override
 	public Message encodeRequestMessage(GroupId contactGroupId, long timestamp,
 			@Nullable MessageId previousMessageId, Author author,
-			@Nullable String message) {
-		if (message != null && message.equals("")) {
+			@Nullable String text) {
+		if (text != null && text.isEmpty()) {
 			throw new IllegalArgumentException();
 		}
 		BdfList body = BdfList.of(
 				REQUEST.getValue(),
 				previousMessageId,
 				clientHelper.toList(author),
-				message
+				text
 		);
 		return createMessage(contactGroupId, timestamp, body);
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageParserImpl.java
index 69ddd242d1cab3137d7e312905d16388362a629f..f934af3a04eb869492a013fee0d738840701c02f 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/MessageParserImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/MessageParserImpl.java
@@ -74,9 +74,9 @@ class MessageParserImpl implements MessageParser {
 		MessageId previousMessageId = (previousMsgBytes == null ? null :
 				new MessageId(previousMsgBytes));
 		Author author = clientHelper.parseAndValidateAuthor(body.getList(2));
-		String message = body.getOptionalString(3);
+		String text = body.getOptionalString(3);
 		return new RequestMessage(m.getId(), m.getGroupId(),
-				m.getTimestamp(), previousMessageId, author, message);
+				m.getTimestamp(), previousMessageId, author, text);
 	}
 
 	@Override
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java
index e3766c91a4556b3bde9e40c2371079a229ef4da7..855cce767a5aefa31304857c3a8c0b50525bbd88 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java
@@ -10,7 +10,7 @@ import javax.annotation.Nullable;
 @NotNullByDefault
 interface ProtocolEngine<S extends Session> {
 
-	S onRequestAction(Transaction txn, S session, @Nullable String message,
+	S onRequestAction(Transaction txn, S session, @Nullable String text,
 			long timestamp) throws DbException;
 
 	S onAcceptAction(Transaction txn, S session, long timestamp)
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/RequestMessage.java b/briar-core/src/main/java/org/briarproject/briar/introduction/RequestMessage.java
index 743e87af872d898f8535b9311d60eb9650622562..f6d8d4870cb177af2e5e7a718a8066e437459245 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/RequestMessage.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/RequestMessage.java
@@ -14,14 +14,14 @@ class RequestMessage extends AbstractIntroductionMessage {
 
 	private final Author author;
 	@Nullable
-	private final String message;
+	private final String text;
 
-	protected RequestMessage(MessageId messageId, GroupId groupId,
-			long timestamp, @Nullable MessageId previousMessageId,
-			Author author, @Nullable String message) {
+	RequestMessage(MessageId messageId, GroupId groupId, long timestamp,
+			@Nullable MessageId previousMessageId, Author author,
+			@Nullable String text) {
 		super(messageId, groupId, timestamp, previousMessageId);
 		this.author = author;
-		this.message = message;
+		this.text = text;
 	}
 
 	public Author getAuthor() {
@@ -29,8 +29,8 @@ class RequestMessage extends AbstractIntroductionMessage {
 	}
 
 	@Nullable
-	public String getMessage() {
-		return message;
+	public String getText() {
+		return text;
 	}
 
 }
diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java
index cf97a32b299dde31147c6ad6b2517ab97dd2b4f7..a2d10005a871e443ad88dac7c94dd9b860bc16f1 100644
--- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java
@@ -209,9 +209,9 @@ class MessagingManagerImpl extends ConversationClientImpl
 	}
 
 	@Override
-	public String getMessageBody(MessageId m) throws DbException {
+	public String getMessageText(MessageId m) throws DbException {
 		try {
-			// 0: private message body
+			// 0: private message text
 			return clientHelper.getMessageAsList(m).getString(0);
 		} catch (FormatException e) {
 			throw new DbException(e);
diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java
index d3b73f8b5b51d0ca704bec365c219f14f2d5e776..9bb49d275f81571dfbb0b802fa450c9d7050e7e5 100644
--- a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageFactoryImpl.java
@@ -13,7 +13,7 @@ import javax.annotation.concurrent.Immutable;
 import javax.inject.Inject;
 
 import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong;
-import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
 
 @Immutable
 @NotNullByDefault
@@ -28,12 +28,12 @@ class PrivateMessageFactoryImpl implements PrivateMessageFactory {
 
 	@Override
 	public PrivateMessage createPrivateMessage(GroupId groupId, long timestamp,
-			String body) throws FormatException {
+			String text) throws FormatException {
 		// Validate the arguments
-		if (utf8IsTooLong(body, MAX_PRIVATE_MESSAGE_BODY_LENGTH))
+		if (utf8IsTooLong(text, MAX_PRIVATE_MESSAGE_TEXT_LENGTH))
 			throw new IllegalArgumentException();
 		// Serialise the message
-		BdfList message = BdfList.of(body);
+		BdfList message = BdfList.of(text);
 		Message m = clientHelper.createMessage(groupId, timestamp, message);
 		return new PrivateMessage(m);
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageValidator.java b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageValidator.java
index a93218210d51b553395d93f58edbde6e6237f244..bc1bbcddffafe9cb98b2959065c142e9e4c356e1 100644
--- a/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/messaging/PrivateMessageValidator.java
@@ -16,7 +16,7 @@ import javax.annotation.concurrent.Immutable;
 
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
-import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
 import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
 
 @Immutable
@@ -31,11 +31,10 @@ class PrivateMessageValidator extends BdfMessageValidator {
 	@Override
 	protected BdfMessageContext validateMessage(Message m, Group g,
 			BdfList body) throws FormatException {
-		// private message body
+		// Private message text
 		checkSize(body, 1);
-		// Private message body
-		String privateMessageBody = body.getString(0);
-		checkLength(privateMessageBody, 0, MAX_PRIVATE_MESSAGE_BODY_LENGTH);
+		String text = body.getString(0);
+		checkLength(text, 0, MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
 		// Return the metadata
 		BdfDictionary meta = new BdfDictionary();
 		meta.put("timestamp", m.getTimestamp());
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageFactoryImpl.java
index f0138e82e09e2880643acad5d4f9584ffb7ec1ca..a0033ace7b35a144b551e04e0445854939018c3a 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageFactoryImpl.java
@@ -78,7 +78,7 @@ class GroupMessageFactoryImpl implements GroupMessageFactory {
 
 	@Override
 	public GroupMessage createGroupMessage(GroupId groupId, long timestamp,
-			@Nullable MessageId parentId, LocalAuthor member, String content,
+			@Nullable MessageId parentId, LocalAuthor member, String text,
 			MessageId previousMsgId) {
 		try {
 			// Generate the signature
@@ -89,7 +89,7 @@ class GroupMessageFactoryImpl implements GroupMessageFactory {
 					memberList,
 					parentId,
 					previousMsgId,
-					content
+					text
 			);
 			byte[] signature = clientHelper.sign(SIGNING_LABEL_POST, toSign,
 					member.getPrivateKey());
@@ -100,7 +100,7 @@ class GroupMessageFactoryImpl implements GroupMessageFactory {
 					memberList,
 					parentId,
 					previousMsgId,
-					content,
+					text,
 					signature
 			);
 			Message m = clientHelper.createMessage(groupId, timestamp, body);
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageValidator.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageValidator.java
index 525a7216aeb6b5f60eb01bcbe69e4d0cfca02331..0c192911295f4c631aa05b971c9367302a22371e 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/GroupMessageValidator.java
@@ -31,7 +31,7 @@ import static org.briarproject.briar.api.privategroup.GroupMessageFactory.SIGNIN
 import static org.briarproject.briar.api.privategroup.GroupMessageFactory.SIGNING_LABEL_POST;
 import static org.briarproject.briar.api.privategroup.MessageType.JOIN;
 import static org.briarproject.briar.api.privategroup.MessageType.POST;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
 import static org.briarproject.briar.privategroup.GroupConstants.KEY_INITIAL_JOIN_MSG;
 import static org.briarproject.briar.privategroup.GroupConstants.KEY_MEMBER;
@@ -65,7 +65,7 @@ class GroupMessageValidator extends BdfMessageValidator {
 		// Message type (int)
 		int type = body.getLong(0).intValue();
 
-		// Member (list of int, string, raw)
+		// Member (author)
 		BdfList memberList = body.getList(1);
 		Author member = clientHelper.parseAndValidateAuthor(memberList);
 
@@ -144,14 +144,14 @@ class GroupMessageValidator extends BdfMessageValidator {
 	private BdfMessageContext validatePost(Message m, Group g, BdfList body,
 			Author member) throws FormatException {
 		// Message type, member, optional parent ID, previous message ID,
-		// content, signature
+		// text, signature
 		checkSize(body, 6);
 		byte[] parentId = body.getOptionalRaw(2);
 		checkLength(parentId, MessageId.LENGTH);
 		byte[] previousMessageId = body.getRaw(3);
 		checkLength(previousMessageId, MessageId.LENGTH);
-		String content = body.getString(4);
-		checkLength(content, 1, MAX_GROUP_POST_BODY_LENGTH);
+		String text = body.getString(4);
+		checkLength(text, 1, MAX_GROUP_POST_TEXT_LENGTH);
 		byte[] signature = body.getRaw(5);
 		checkLength(signature, 1, MAX_SIGNATURE_LENGTH);
 
@@ -163,7 +163,7 @@ class GroupMessageValidator extends BdfMessageValidator {
 				memberList,
 				parentId,
 				previousMessageId,
-				content
+				text
 		);
 		try {
 			clientHelper.verifySignature(signature, SIGNING_LABEL_POST,
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java
index 4a615fe3430323e138187802c0fb223e42eb28a5..64dbe834bc7be36bbfe63a4027daa1338a699b2d 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java
@@ -299,17 +299,17 @@ class PrivateGroupManagerImpl extends BdfIncomingMessageHook
 	}
 
 	@Override
-	public String getMessageBody(MessageId m) throws DbException {
+	public String getMessageText(MessageId m) throws DbException {
 		try {
-			return getMessageBody(clientHelper.getMessageAsList(m));
+			return getMessageText(clientHelper.getMessageAsList(m));
 		} catch (FormatException e) {
 			throw new DbException(e);
 		}
 	}
 
-	private String getMessageBody(BdfList body) throws FormatException {
+	private String getMessageText(BdfList body) throws FormatException {
 		// Message type (0), member (1), parent ID (2), previous message ID (3),
-		// content (4), signature (5)
+		// text (4), signature (5)
 		return body.getString(4);
 	}
 
@@ -570,8 +570,8 @@ class PrivateGroupManagerImpl extends BdfIncomingMessageHook
 			throws DbException, FormatException {
 		GroupMessageHeader header = getGroupMessageHeader(txn, m.getGroupId(),
 				m.getId(), meta, Collections.emptyMap());
-		String body = getMessageBody(clientHelper.toList(m));
-		txn.attach(new GroupMessageAddedEvent(m.getGroupId(), header, body,
+		String text = getMessageText(clientHelper.toList(m));
+		txn.attach(new GroupMessageAddedEvent(m.getGroupId(), header, text,
 				local));
 	}
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
index d3bd73943c5ae155c905d1dc6c1e69479b9eaa39..aa018042e30094ec8a44b489cc63d1c8de6bb220 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
@@ -107,7 +107,7 @@ abstract class AbstractProtocolEngine<S extends Session>
 	}
 
 	Message sendInviteMessage(Transaction txn, S session,
-			@Nullable String message, long timestamp, byte[] signature)
+			@Nullable String text, long timestamp, byte[] signature)
 			throws DbException {
 		Group g = db.getGroup(txn, session.getPrivateGroupId());
 		PrivateGroup privateGroup;
@@ -119,7 +119,7 @@ abstract class AbstractProtocolEngine<S extends Session>
 		Message m = messageEncoder.encodeInviteMessage(
 				session.getContactGroupId(), privateGroup.getId(),
 				timestamp, privateGroup.getName(), privateGroup.getCreator(),
-				privateGroup.getSalt(), message, signature);
+				privateGroup.getSalt(), text, signature);
 		sendMessage(txn, m, INVITE, privateGroup.getId(), true);
 		return m;
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
index 4ca049b42ec1fc663707d79c810773f937507611..2830db2a24e6321884b54df5cbbe5472c1ea6e5f 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
@@ -51,11 +51,11 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
 
 	@Override
 	public CreatorSession onInviteAction(Transaction txn, CreatorSession s,
-			@Nullable String message, long timestamp, byte[] signature)
+			@Nullable String text, long timestamp, byte[] signature)
 			throws DbException {
 		switch (s.getState()) {
 			case START:
-				return onLocalInvite(txn, s, message, timestamp, signature);
+				return onLocalInvite(txn, s, text, timestamp, signature);
 			case INVITED:
 			case JOINED:
 			case LEFT:
@@ -145,10 +145,10 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
 	}
 
 	private CreatorSession onLocalInvite(Transaction txn, CreatorSession s,
-			@Nullable String message, long timestamp, byte[] signature)
+			@Nullable String text, long timestamp, byte[] signature)
 			throws DbException {
 		// Send an INVITE message
-		Message sent = sendInviteMessage(txn, s, message, timestamp, signature);
+		Message sent = sendInviteMessage(txn, s, text, timestamp, signature);
 		// Track the message
 		messageTracker.trackOutgoingMessage(txn, sent);
 		// Move to the INVITED state
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java
index 1082ec2cf9400e20a5afdb483e6957bc59ad42fb..f6d8a010c639c545e1db02b6a3e8513e0de85690 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java
@@ -260,7 +260,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
 
 	@Override
 	public void sendInvitation(GroupId privateGroupId, ContactId c,
-			@Nullable String message, long timestamp, byte[] signature)
+			@Nullable String text, long timestamp, byte[] signature)
 			throws DbException {
 		SessionId sessionId = getSessionId(privateGroupId);
 		Transaction txn = db.startTransaction(false);
@@ -283,7 +283,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
 				storageId = ss.storageId;
 			}
 			// Handle the invite action
-			session = creatorEngine.onInviteAction(txn, session, message,
+			session = creatorEngine.onInviteAction(txn, session, text,
 					timestamp, signature);
 			// Store the updated session
 			storeSession(txn, storageId, session);
@@ -416,7 +416,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
 		return new GroupInvitationRequest(m, contactGroupId,
 				meta.getTimestamp(), meta.isLocal(), status.isSent(),
 				status.isSeen(), meta.isRead(), sessionId, pg,
-				invite.getMessage(), meta.isAvailableToAnswer(), canBeOpened);
+				invite.getText(), meta.isAvailableToAnswer(), canBeOpened);
 	}
 
 	private GroupInvitationResponse parseInvitationResponse(
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidator.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidator.java
index 251b416a88a5aff44225ae74073b6dfed7fd6eea..8e0505759ee784c74d2c50cf961877a290b7e18d 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidator.java
@@ -27,7 +27,7 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_SIGNATUR
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
 import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT;
@@ -71,15 +71,15 @@ class GroupInvitationValidator extends BdfMessageValidator {
 
 	private BdfMessageContext validateInviteMessage(Message m, BdfList body)
 			throws FormatException {
-		// Message type, creator, group name, salt, optional message, signature
+		// Message type, creator, group name, salt, optional text, signature
 		checkSize(body, 6);
 		BdfList creatorList = body.getList(1);
 		String groupName = body.getString(2);
 		checkLength(groupName, 1, MAX_GROUP_NAME_LENGTH);
 		byte[] salt = body.getRaw(3);
 		checkLength(salt, GROUP_SALT_LENGTH);
-		String message = body.getOptionalString(4);
-		checkLength(message, 1, MAX_GROUP_INVITATION_MSG_LENGTH);
+		String text = body.getOptionalString(4);
+		checkLength(text, 1, MAX_GROUP_INVITATION_TEXT_LENGTH);
 		byte[] signature = body.getRaw(5);
 		checkLength(signature, 1, MAX_SIGNATURE_LENGTH);
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteMessage.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteMessage.java
index b1847aafa141ac73607246b9f588c7e4fe8adfc8..5d97e3f7e562c0cdc4e73fa362909120b623d03d 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteMessage.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteMessage.java
@@ -16,16 +16,16 @@ class InviteMessage extends GroupInvitationMessage {
 	private final Author creator;
 	private final byte[] salt, signature;
 	@Nullable
-	private final String message;
+	private final String text;
 
 	InviteMessage(MessageId id, GroupId contactGroupId, GroupId privateGroupId,
 			long timestamp, String groupName, Author creator, byte[] salt,
-			@Nullable String message, byte[] signature) {
+			@Nullable String text, byte[] signature) {
 		super(id, contactGroupId, privateGroupId, timestamp);
 		this.groupName = groupName;
 		this.creator = creator;
 		this.salt = salt;
-		this.message = message;
+		this.text = text;
 		this.signature = signature;
 	}
 
@@ -42,8 +42,8 @@ class InviteMessage extends GroupInvitationMessage {
 	}
 
 	@Nullable
-	String getMessage() {
-		return message;
+	String getText() {
+		return text;
 	}
 
 	byte[] getSignature() {
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java
index 722b562b865b8a4fa8818f3def300d561bebd20a..2a8d1a859c083f86285308860abd80443b32207d 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java
@@ -56,7 +56,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
 
 	@Override
 	public InviteeSession onInviteAction(Transaction txn, InviteeSession s,
-			@Nullable String message, long timestamp, byte[] signature) {
+			@Nullable String text, long timestamp, byte[] signature) {
 		throw new UnsupportedOperationException(); // Invalid in this role
 	}
 
@@ -330,7 +330,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
 		SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
 		return new GroupInvitationRequest(m.getId(), m.getContactGroupId(),
 				m.getTimestamp(), false, false, true, false, sessionId, pg,
-				m.getMessage(), true, false);
+				m.getText(), true, false);
 	}
 
 }
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoder.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoder.java
index ee6b98a84a475e88ef1a1dc25680c9f66c2653cd..8ba1caaa782d18d96d90cb4fa56fb17bb09c3d86 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoder.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoder.java
@@ -24,7 +24,7 @@ interface MessageEncoder {
 
 	Message encodeInviteMessage(GroupId contactGroupId, GroupId privateGroupId,
 			long timestamp, String groupName, Author creator, byte[] salt,
-			@Nullable String message, byte[] signature);
+			@Nullable String text, byte[] signature);
 
 	Message encodeJoinMessage(GroupId contactGroupId, GroupId privateGroupId,
 			long timestamp, @Nullable MessageId previousMessageId);
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoderImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoderImpl.java
index 0a97145052c44d83f93e684e7c782daff0b407b5..43f208a948cac6dc193e615fd95a606b1b847ee2 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoderImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageEncoderImpl.java
@@ -76,7 +76,7 @@ class MessageEncoderImpl implements MessageEncoder {
 	@Override
 	public Message encodeInviteMessage(GroupId contactGroupId,
 			GroupId privateGroupId, long timestamp, String groupName,
-			Author creator, byte[] salt, @Nullable String message,
+			Author creator, byte[] salt, @Nullable String text,
 			byte[] signature) {
 		BdfList creatorList = clientHelper.toList(creator);
 		BdfList body = BdfList.of(
@@ -84,7 +84,7 @@ class MessageEncoderImpl implements MessageEncoder {
 				creatorList,
 				groupName,
 				salt,
-				message,
+				text,
 				signature
 		);
 		try {
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageParserImpl.java
index aa682fa52fb1b15be9f1c04425e00bed5d5da5c6..d15dda40fff73bae736388ee04188aa9dc4813b0 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageParserImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/MessageParserImpl.java
@@ -98,11 +98,11 @@ class MessageParserImpl implements MessageParser {
 	@Override
 	public InviteMessage parseInviteMessage(Message m, BdfList body)
 			throws FormatException {
-		// Message type, creator, group name, salt, optional message, signature
+		// Message type, creator, group name, salt, optional text, signature
 		BdfList creatorList = body.getList(1);
 		String groupName = body.getString(2);
 		byte[] salt = body.getRaw(3);
-		String message = body.getOptionalString(4);
+		String text = body.getOptionalString(4);
 		byte[] signature = body.getRaw(5);
 
 		// Format version, name, public key
@@ -117,7 +117,7 @@ class MessageParserImpl implements MessageParser {
 				groupName, creator, salt);
 		return new InviteMessage(m.getId(), m.getGroupId(),
 				privateGroup.getId(), m.getTimestamp(), groupName, creator,
-				salt, message, signature);
+				salt, text, signature);
 	}
 
 	@Override
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java
index 9b7096b63b7ac48f2eea99fb5b1522b095f46f06..b7eb293f537c340e1b701baaee307ac37c8bcbd4 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java
@@ -51,8 +51,7 @@ class PeerProtocolEngine extends AbstractProtocolEngine<PeerSession> {
 
 	@Override
 	public PeerSession onInviteAction(Transaction txn, PeerSession s,
-			@Nullable String message, long timestamp, byte[] signature)
-			throws DbException {
+			@Nullable String text, long timestamp, byte[] signature) {
 		throw new UnsupportedOperationException(); // Invalid in this role
 	}
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngine.java
index b0833260d2ae066514a304a2094d4f9d97304cd0..74fa35269f869808f23c4267e8a19e7d227aa499 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngine.java
@@ -10,7 +10,7 @@ import javax.annotation.Nullable;
 @NotNullByDefault
 interface ProtocolEngine<S extends Session> {
 
-	S onInviteAction(Transaction txn, S session, @Nullable String message,
+	S onInviteAction(Transaction txn, S session, @Nullable String text,
 			long timestamp, byte[] signature) throws DbException;
 
 	S onJoinAction(Transaction txn, S session) throws DbException;
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java
index 780f2b7a1046cb12895f72020795bb3e8edcfd16..f8c0a140003ca5270e2f426d3717a468e6647069 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogInvitationFactoryImpl.java
@@ -24,7 +24,7 @@ public class BlogInvitationFactoryImpl
 		SessionId sessionId = new SessionId(m.getShareableId().getBytes());
 		return new BlogInvitationRequest(m.getId(), m.getContactGroupId(),
 				m.getTimestamp(), local, sent, seen, read, sessionId,
-				m.getShareable(), m.getMessage(), available, canBeOpened);
+				m.getShareable(), m.getText(), available, canBeOpened);
 	}
 
 	@Override
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java
index 4259c5cb2428165e12d22f3895897299d06784a3..4566ad04721f644d2bd8380ec838ef82014b39a1 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumInvitationFactoryImpl.java
@@ -24,7 +24,7 @@ public class ForumInvitationFactoryImpl
 		SessionId sessionId = new SessionId(m.getShareableId().getBytes());
 		return new ForumInvitationRequest(m.getId(), m.getContactGroupId(),
 				m.getTimestamp(), local, sent, seen, read, sessionId,
-				m.getShareable(), m.getMessage(), available, canBeOpened);
+				m.getShareable(), m.getText(), available, canBeOpened);
 	}
 
 	@Override
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/InviteMessage.java b/briar-core/src/main/java/org/briarproject/briar/sharing/InviteMessage.java
index f6343cd8db2cb4656af61208fdc248cf3bd16d7b..d94fe4f60c258c7d093a6137cc2566c3f0b63b23 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/InviteMessage.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/InviteMessage.java
@@ -14,17 +14,17 @@ class InviteMessage<S extends Shareable> extends SharingMessage {
 
 	private final S shareable;
 	@Nullable
-	private final String message;
+	private final String text;
 
 	InviteMessage(MessageId id, @Nullable MessageId previousMessageId,
-			GroupId contactGroupId, S shareable, @Nullable String message,
+			GroupId contactGroupId, S shareable, @Nullable String text,
 			long timestamp) {
 		super(id, contactGroupId, shareable.getId(), timestamp,
 				previousMessageId);
-		if (message != null && message.equals(""))
+		if (text != null && text.isEmpty())
 			throw new IllegalArgumentException();
 		this.shareable = shareable;
-		this.message = message;
+		this.text = text;
 	}
 
 	public S getShareable() {
@@ -32,8 +32,8 @@ class InviteMessage<S extends Shareable> extends SharingMessage {
 	}
 
 	@Nullable
-	public String getMessage() {
-		return message;
+	public String getText() {
+		return text;
 	}
 
 }
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoder.java b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoder.java
index b53d4fbadfa1a43bdfd0e5581e54a2ca5b5e5fb7..6723ea0bbc8d96603b31a0413e824d6a2ed76bcf 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoder.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoder.java
@@ -24,7 +24,7 @@ interface MessageEncoder {
 
 	Message encodeInviteMessage(GroupId contactGroupId, long timestamp,
 			@Nullable MessageId previousMessageId, BdfList descriptor,
-			@Nullable String message);
+			@Nullable String text);
 
 	Message encodeAcceptMessage(GroupId contactGroupId, GroupId shareableId,
 			long timestamp, @Nullable MessageId previousMessageId);
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoderImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoderImpl.java
index 17938b8e21188479041889fbe33ab7935252fbcf..295fcf87149dc38996b16bd11249c16d63230256 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoderImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageEncoderImpl.java
@@ -76,14 +76,14 @@ class MessageEncoderImpl implements MessageEncoder {
 	@Override
 	public Message encodeInviteMessage(GroupId contactGroupId, long timestamp,
 			@Nullable MessageId previousMessageId, BdfList descriptor,
-			@Nullable String message) {
-		if (message != null && message.equals(""))
+			@Nullable String text) {
+		if (text != null && text.isEmpty())
 			throw new IllegalArgumentException();
 		BdfList body = BdfList.of(
 				INVITE.getValue(),
 				previousMessageId,
 				descriptor,
-				message
+				text
 		);
 		try {
 			return messageFactory.createMessage(contactGroupId, timestamp,
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java
index 4eaa981143a65d83072f7179c0c5dd2116299f0b..9ad4db67b50657b3311dc307bfe6c43b67628563 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/MessageParserImpl.java
@@ -89,9 +89,9 @@ abstract class MessageParserImpl<S extends Shareable>
 		MessageId previousMessageId = (b == null ? null : new MessageId(b));
 		BdfList descriptor = body.getList(2);
 		S shareable = createShareable(descriptor);
-		String message = body.getOptionalString(3);
+		String text = body.getOptionalString(3);
 		return new InviteMessage<>(m.getId(), previousMessageId,
-				m.getGroupId(), shareable, message, m.getTimestamp());
+				m.getGroupId(), shareable, text, m.getTimestamp());
 	}
 
 	@Override
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngine.java
index 4277303c628cdaf5581e325325ca3f82a7e98fcb..c0c94453c5f4557e38ad0f7a652c68c0ec633669 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngine.java
@@ -12,7 +12,7 @@ import javax.annotation.Nullable;
 interface ProtocolEngine<S extends Shareable> {
 
 	Session onInviteAction(Transaction txn, Session session,
-			@Nullable String message, long timestamp) throws DbException;
+			@Nullable String text, long timestamp) throws DbException;
 
 	Session onAcceptAction(Transaction txn, Session session) throws DbException;
 
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java
index 8b20cdb1059cff1910d82815a9b498a53f67dad0..b5741d031053f484a6d72f3f293cf8fc7d7ae605 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java
@@ -78,10 +78,10 @@ abstract class ProtocolEngineImpl<S extends Shareable>
 
 	@Override
 	public Session onInviteAction(Transaction txn, Session s,
-			@Nullable String message, long timestamp) throws DbException {
+			@Nullable String text, long timestamp) throws DbException {
 		switch (s.getState()) {
 			case START:
-				return onLocalInvite(txn, s, message, timestamp);
+				return onLocalInvite(txn, s, text, timestamp);
 			case LOCAL_INVITED:
 			case REMOTE_INVITED:
 			case SHARING:
@@ -94,9 +94,9 @@ abstract class ProtocolEngineImpl<S extends Shareable>
 	}
 
 	private Session onLocalInvite(Transaction txn, Session s,
-			@Nullable String message, long timestamp) throws DbException {
+			@Nullable String text, long timestamp) throws DbException {
 		// Send an INVITE message
-		Message sent = sendInviteMessage(txn, s, message, timestamp);
+		Message sent = sendInviteMessage(txn, s, text, timestamp);
 		// Track the message
 		messageTracker.trackOutgoingMessage(txn, sent);
 		// Make the shareable visible to the contact
@@ -112,7 +112,7 @@ abstract class ProtocolEngineImpl<S extends Shareable>
 	}
 
 	private Message sendInviteMessage(Transaction txn, Session s,
-			@Nullable String message, long timestamp) throws DbException {
+			@Nullable String text, long timestamp) throws DbException {
 		Group g = db.getGroup(txn, s.getShareableId());
 		BdfList descriptor;
 		try {
@@ -122,7 +122,7 @@ abstract class ProtocolEngineImpl<S extends Shareable>
 		}
 		long localTimestamp = Math.max(timestamp, getLocalTimestamp(s));
 		Message m = messageEncoder.encodeInviteMessage(s.getContactGroupId(),
-				localTimestamp, s.getLastLocalMessageId(), descriptor, message);
+				localTimestamp, s.getLastLocalMessageId(), descriptor, text);
 		sendMessage(txn, m, INVITE, s.getShareableId(), true);
 		return m;
 	}
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java
index d37807953c8b1491866af61ca705a74812c7f7a4..2d638b9a827fa5d3ec5f51446ed50cf7ad9c5109 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java
@@ -252,7 +252,7 @@ abstract class SharingManagerImpl<S extends Shareable>
 
 	@Override
 	public void sendInvitation(GroupId shareableId, ContactId contactId,
-			@Nullable String message, long timestamp) throws DbException {
+			@Nullable String text, long timestamp) throws DbException {
 		SessionId sessionId = getSessionId(shareableId);
 		Transaction txn = db.startTransaction(false);
 		try {
@@ -277,7 +277,7 @@ abstract class SharingManagerImpl<S extends Shareable>
 				storageId = ss.storageId;
 			}
 			// Handle the invite action
-			session = engine.onInviteAction(txn, session, message, timestamp);
+			session = engine.onInviteAction(txn, session, text, timestamp);
 			// Store the updated session
 			storeSession(txn, storageId, session);
 			db.commitTransaction(txn);
diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingValidator.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingValidator.java
index a7eadcd154080582539267018628b8441ec277d3..dcf38bf7b83bb5fa92b0d3c8e758fdd539ed0087 100644
--- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingValidator.java
+++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingValidator.java
@@ -21,7 +21,7 @@ import javax.annotation.concurrent.Immutable;
 
 import static org.briarproject.bramble.util.ValidationUtils.checkLength;
 import static org.briarproject.bramble.util.ValidationUtils.checkSize;
-import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.sharing.MessageType.INVITE;
 
 @Immutable
@@ -60,8 +60,8 @@ abstract class SharingValidator extends BdfMessageValidator {
 		checkLength(previousMessageId, UniqueId.LENGTH);
 		BdfList descriptor = body.getList(2);
 		GroupId shareableId = validateDescriptor(descriptor);
-		String msg = body.getOptionalString(3);
-		checkLength(msg, 1, MAX_INVITATION_MESSAGE_LENGTH);
+		String text = body.getOptionalString(3);
+		checkLength(text, 1, MAX_INVITATION_TEXT_LENGTH);
 
 		BdfDictionary meta = messageEncoder
 				.encodeMetadata(INVITE, shareableId, m.getTimestamp(), false,
diff --git a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java
index 6b2dbc243943146a869939382f993ef9ad069930..40d655114c1c4c27a9b3f990274661300f5dfbad 100644
--- a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java
@@ -312,15 +312,15 @@ public class TestDataCreatorImpl implements TestDataCreator {
 	private void createRandomPrivateMessage(GroupId groupId, int num)
 			throws DbException, FormatException {
 		long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
-		String body = getRandomText();
+		String text = getRandomText();
 		boolean local = random.nextBoolean();
-		createPrivateMessage(groupId, body, timestamp, local);
+		createPrivateMessage(groupId, text, timestamp, local);
 	}
 
-	private void createPrivateMessage(GroupId groupId, String body,
+	private void createPrivateMessage(GroupId groupId, String text,
 			long timestamp, boolean local) throws DbException, FormatException {
 		PrivateMessage m = privateMessageFactory
-				.createPrivateMessage(groupId, timestamp, body);
+				.createPrivateMessage(groupId, timestamp, text);
 		BdfDictionary meta = new BdfDictionary();
 		meta.put("timestamp", timestamp);
 		meta.put("local", local);
@@ -338,10 +338,10 @@ public class TestDataCreatorImpl implements TestDataCreator {
 	}
 
 	@Override
-	public void addPrivateMessage(Contact contact, String body, long time,
+	public void addPrivateMessage(Contact contact, String text, long time,
 			boolean local) throws DbException, FormatException {
 		Group group = messagingManager.getContactGroup(contact);
-		createPrivateMessage(group.getId(), body, time, local);
+		createPrivateMessage(group.getId(), text, time, local);
 	}
 
 	private void createBlogPosts(List<Contact> contacts, int numBlogPosts)
@@ -359,10 +359,10 @@ public class TestDataCreatorImpl implements TestDataCreator {
 	private void addBlogPost(LocalAuthor author, int num) throws DbException {
 		Blog blog = blogManager.getPersonalBlog(author);
 		long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
-		String body = getRandomText();
+		String text = getRandomText();
 		try {
 			BlogPost blogPost = blogPostFactory.createBlogPost(blog.getId(),
-					timestamp, null, author, body);
+					timestamp, null, author, text);
 			blogManager.addLocalPost(blogPost);
 		} catch (FormatException | GeneralSecurityException e) {
 			throw new RuntimeException(e);
@@ -404,14 +404,14 @@ public class TestDataCreatorImpl implements TestDataCreator {
 			Contact contact = contacts.get(random.nextInt(contacts.size()));
 			LocalAuthor author = localAuthors.get(contact);
 			long timestamp = clock.currentTimeMillis() - i * 60 * 1000;
-			String body = getRandomText();
+			String text = getRandomText();
 			MessageId parent = null;
 			if (random.nextBoolean() && posts.size() > 0) {
 				ForumPost parentPost =
 						posts.get(random.nextInt(posts.size()));
 				parent = parentPost.getMessage().getId();
 			}
-			ForumPost post = forumManager.createLocalPost(forum.getId(), body,
+			ForumPost post = forumManager.createLocalPost(forum.getId(), text,
 					timestamp, parent, author);
 			posts.add(post);
 			forumManager.addLocalPost(post);
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
index a4f79f5c104b538565b1bc5c591f67d39f542e5f..a0f16d45b68bfea8e630d472918c66ddbf2d865a 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java
@@ -47,7 +47,7 @@ import static org.briarproject.briar.api.blog.BlogConstants.KEY_RSS_FEED;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TIMESTAMP;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TIME_RECEIVED;
 import static org.briarproject.briar.api.blog.BlogConstants.KEY_TYPE;
-import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_LENGTH;
+import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_TEXT_LENGTH;
 import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID;
 import static org.briarproject.briar.api.blog.BlogManager.MAJOR_VERSION;
 import static org.briarproject.briar.api.blog.MessageType.COMMENT;
@@ -99,7 +99,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 		rssMessageId = rssMessage.getId();
 		timestamp = message.getTimestamp();
 		timeReceived = timestamp + 1;
-		comment = getRandomString(MAX_BLOG_COMMENT_LENGTH);
+		comment = getRandomString(MAX_BLOG_COMMENT_TEXT_LENGTH);
 	}
 
 	@Test
@@ -694,7 +694,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 				new BdfEntry(KEY_TIMESTAMP, timestamp),
 				new BdfEntry(KEY_TIME_RECEIVED, timeReceived)
 		);
-		String localComment = getRandomString(MAX_BLOG_COMMENT_LENGTH);
+		String localComment = getRandomString(MAX_BLOG_COMMENT_TEXT_LENGTH);
 		Message localCommentMsg = getMessage(blog2.getId());
 		MessageId localCommentId = localCommentMsg.getId();
 		BdfDictionary localCommentMeta = BdfDictionary.of(
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
index 11265c8104fa32fa574d17eb05ffabd9f6a50e1f..ffa6ed73413bf86dea27f705a3ce31cd0c73510f 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerIntegrationTest.java
@@ -122,15 +122,14 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogPost() throws Exception {
 		// check that blog0 has no posts
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		Collection<BlogPostHeader> headers0 =
 				blogManager0.getPostHeaders(blog0.getId());
 		assertEquals(0, headers0.size());
 
 		// add a post to blog0
-		BlogPost p = blogPostFactory
-				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+		BlogPost p = blogPostFactory.createBlogPost(blog0.getId(),
+				clock.currentTimeMillis(), null, author0, text);
 		blogManager0.addLocalPost(p);
 
 		// check that post is now in blog0
@@ -138,7 +137,7 @@ public class BlogManagerIntegrationTest
 		assertEquals(1, headers0.size());
 
 		// check that body is there
-		assertEquals(body, blogManager0.getPostBody(p.getMessage().getId()));
+		assertEquals(text, blogManager0.getPostText(p.getMessage().getId()));
 
 		// make sure that blog0 at author1 doesn't have the post yet
 		Collection<BlogPostHeader> headers1 =
@@ -154,16 +153,16 @@ public class BlogManagerIntegrationTest
 		assertEquals(POST, headers1.iterator().next().getType());
 
 		// check that body is there
-		assertEquals(body, blogManager1.getPostBody(p.getMessage().getId()));
+		assertEquals(text, blogManager1.getPostText(p.getMessage().getId()));
 	}
 
 	@Test
 	public void testBlogPostInWrongBlog() throws Exception {
 		// add a post to blog1
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog1.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+						author0, text);
 		blogManager0.addLocalPost(p);
 
 		// check that post is now in blog1
@@ -199,10 +198,10 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogComment() throws Exception {
 		// add a post to blog0
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+						author0, text);
 		blogManager0.addLocalPost(p);
 
 		// sync the post over
@@ -234,7 +233,7 @@ public class BlogManagerIntegrationTest
 		// ensure that body can be retrieved from wrapped post
 		MessageId parentId = h.getParentId();
 		assertNotNull(parentId);
-		assertEquals(body, blogManager0.getPostBody(parentId));
+		assertEquals(text, blogManager0.getPostText(parentId));
 
 		// 1 has only their own comment in their blog
 		headers1 = blogManager1.getPostHeaders(blog1.getId());
@@ -244,10 +243,10 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testBlogCommentOnOwnPost() throws Exception {
 		// add a post to blog0
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+						author0, text);
 		blogManager0.addLocalPost(p);
 
 		// get header of own post
@@ -270,7 +269,7 @@ public class BlogManagerIntegrationTest
 		assertEquals(2, headers1.size());
 		for (BlogPostHeader h : headers1) {
 			if (h.getType() == POST) {
-				assertEquals(body, blogManager1.getPostBody(h.getId()));
+				assertEquals(text, blogManager1.getPostText(h.getId()));
 			} else {
 				assertEquals(comment, ((BlogCommentHeader) h).getComment());
 			}
@@ -280,10 +279,10 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testCommentOnComment() throws Exception {
 		// add a post to blog0
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+						author0, text);
 		blogManager0.addLocalPost(p);
 
 		// sync the post over
@@ -368,10 +367,10 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testCommentOnOwnComment() throws Exception {
 		// add a post to blog0
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(blog0.getId(), clock.currentTimeMillis(), null,
-						author0, body);
+						author0, text);
 		blogManager0.addLocalPost(p);
 
 		// sync the post over
@@ -413,10 +412,10 @@ public class BlogManagerIntegrationTest
 		assertTrue(rssBlog.isRssFeed());
 
 		// add a feed post to rssBlog
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(rssBlog.getId(), clock.currentTimeMillis(),
-						null, author0, body);
+						null, author0, text);
 		blogManager0.addLocalPost(p);
 
 		// make sure it got saved as an RSS feed post
@@ -432,10 +431,10 @@ public class BlogManagerIntegrationTest
 	@Test
 	public void testFeedReblog() throws Exception {
 		// add a feed post to rssBlog
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		BlogPost p = blogPostFactory
 				.createBlogPost(rssBlog.getId(), clock.currentTimeMillis(),
-						null, author0, body);
+						null, author0, text);
 		blogManager0.addLocalPost(p);
 
 		// reblog feed post to own blog
diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
index 5cbe347ae33a52216a33170f6fb5073237bcf35b..884753afabc0739e3c8a9ad79de4228dbbfe3e4e 100644
--- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java
@@ -62,7 +62,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 	private final BlogFactory blogFactory = context.mock(BlogFactory.class);
 	private final ClientHelper clientHelper = context.mock(ClientHelper.class);
 	private final Author author;
-	private final String body = getRandomString(42);
+	private final String text = getRandomString(42);
 
 	public BlogPostValidatorTest() {
 		group = getGroup(CLIENT_ID, MAJOR_VERSION);
@@ -99,9 +99,9 @@ public class BlogPostValidatorTest extends BriarTestCase {
 	private void testValidateProperBlogPost(Blog b, boolean rssFeed)
 			throws IOException, GeneralSecurityException {
 		byte[] sigBytes = getRandomBytes(42);
-		BdfList m = BdfList.of(POST.getInt(), body, sigBytes);
+		BdfList m = BdfList.of(POST.getInt(), text, sigBytes);
 
-		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), body);
+		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), text);
 		expectCrypto(b, SIGNING_LABEL_POST, signed, sigBytes);
 		BdfDictionary result =
 				validator.validateMessage(message, group, m).getDictionary();
@@ -114,7 +114,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testValidateBlogPostWithoutAttachments() throws IOException {
-		BdfList content = BdfList.of(null, null, body);
+		BdfList content = BdfList.of(null, null, text);
 		BdfList m = BdfList.of(POST.getInt(), content, null);
 
 		validator.validateMessage(message, group, m);
@@ -122,7 +122,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 
 	@Test(expected = FormatException.class)
 	public void testValidateBlogPostWithoutSignature() throws IOException {
-		BdfList content = BdfList.of(null, null, body, null);
+		BdfList content = BdfList.of(null, null, text, null);
 		BdfList m = BdfList.of(POST.getInt(), content, null);
 
 		validator.validateMessage(message, group, m);
@@ -191,12 +191,12 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		// group descriptor, timestamp, content, signature
 		byte[] sigBytes = getRandomBytes(42);
 		BdfList m = BdfList.of(WRAPPED_POST.getInt(), descriptor,
-				message.getTimestamp(), body, sigBytes);
+				message.getTimestamp(), text, sigBytes);
 
-		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), body);
+		BdfList signed = BdfList.of(b.getId(), message.getTimestamp(), text);
 		expectCrypto(b, SIGNING_LABEL_POST, signed, sigBytes);
 
-		BdfList originalList = BdfList.of(POST.getInt(), body, sigBytes);
+		BdfList originalList = BdfList.of(POST.getInt(), text, sigBytes);
 		byte[] originalBody = getRandomBytes(42);
 
 		context.checking(new Expectations() {{
diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
index 086db14442242f0fd9ce072f0fdae4e4471fad84..48a20371061285a81ea896c5251de982b38f72a3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
@@ -106,7 +106,7 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 		SyndEntry entry = new SyndEntryImpl();
 		entry.setUpdatedDate(new Date());
 		entries.add(entry);
-		String body = "<p> (" + entry.getUpdatedDate().toString() + ")</p>";
+		String text = "<p> (" + entry.getUpdatedDate().toString() + ")</p>";
 		Message msg = getMessage(blogGroupId);
 		BlogPost post = new BlogPost(msg, null, localAuthor);
 
@@ -116,7 +116,7 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
 			oneOf(clock).currentTimeMillis();
 			will(returnValue(42L));
 			oneOf(blogPostFactory).createBlogPost(feed.getBlogId(), 42L, null,
-					localAuthor, body);
+					localAuthor, text);
 			will(returnValue(post));
 			oneOf(blogManager).addLocalPost(txn, post);
 			oneOf(db).commitTransaction(txn);
diff --git a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
index d53af17304866bd6444963bd1830982ff6e96049..179e4282efb6a1ec83ee100a1123566340eb0166 100644
--- a/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumManagerTest.java
@@ -72,24 +72,24 @@ public class ForumManagerTest
 	}
 
 	private ForumPost createForumPost(GroupId groupId,
-			@Nullable ForumPost parent, String body, long ms) throws Exception {
+			@Nullable ForumPost parent, String text, long ms) throws Exception {
 		return forumPostFactory.createPost(groupId, ms,
 				parent == null ? null : parent.getMessage().getId(),
-				author0, body);
+				author0, text);
 	}
 
 	@Test
 	public void testForumPost() throws Exception {
 		assertEquals(1, forumManager0.getForums().size());
 		long ms1 = clock.currentTimeMillis() - 1000L;
-		String body1 = "some forum text";
+		String text1 = "some forum text";
 		long ms2 = clock.currentTimeMillis();
-		String body2 = "some other forum text";
+		String text2 = "some other forum text";
 		ForumPost post1 =
-				createForumPost(forum0.getGroup().getId(), null, body1, ms1);
+				createForumPost(forum0.getGroup().getId(), null, text1, ms1);
 		assertEquals(ms1, post1.getMessage().getTimestamp());
 		ForumPost post2 =
-				createForumPost(forum0.getGroup().getId(), post1, body2, ms2);
+				createForumPost(forum0.getGroup().getId(), post1, text2, ms2);
 		assertEquals(ms2, post2.getMessage().getTimestamp());
 		forumManager0.addLocalPost(post1);
 		forumManager0.setReadFlag(forum0.getGroup().getId(),
@@ -109,19 +109,19 @@ public class ForumManagerTest
 				forumManager0.getPostHeaders(forum0.getGroup().getId());
 		assertEquals(2, headers.size());
 		for (ForumPostHeader h : headers) {
-			String hBody = forumManager0.getPostBody(h.getId());
+			String hText = forumManager0.getPostText(h.getId());
 
 			boolean isPost1 = h.getId().equals(post1.getMessage().getId());
 			boolean isPost2 = h.getId().equals(post2.getMessage().getId());
 			assertTrue(isPost1 || isPost2);
 			if (isPost1) {
 				assertEquals(h.getTimestamp(), ms1);
-				assertEquals(body1, hBody);
+				assertEquals(text1, hText);
 				assertNull(h.getParentId());
 				assertTrue(h.isRead());
 			} else {
 				assertEquals(h.getTimestamp(), ms2);
-				assertEquals(body2, hBody);
+				assertEquals(text2, hText);
 				assertEquals(h.getParentId(), post2.getParent());
 				assertFalse(h.isRead());
 			}
diff --git a/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
index 6fc64fccb2a2fe9b8be91fe4f5684c08946d4f62..7369c671d61bcf9291f5c26ca8ea3a03d763a3cd 100644
--- a/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/forum/ForumPostValidatorTest.java
@@ -24,7 +24,7 @@ import static org.briarproject.briar.api.blog.BlogConstants.KEY_READ;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_AUTHOR;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_PARENT;
 import static org.briarproject.briar.api.forum.ForumConstants.KEY_TIMESTAMP;
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.forum.ForumPostFactory.SIGNING_LABEL_POST;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -33,7 +33,7 @@ import static org.junit.Assert.assertFalse;
 public class ForumPostValidatorTest extends ValidatorTestCase {
 
 	private final MessageId parentId = new MessageId(getRandomId());
-	private final String content = getRandomString(MAX_FORUM_POST_BODY_LENGTH);
+	private final String text = getRandomString(MAX_FORUM_POST_TEXT_LENGTH);
 	private final byte[] signature = getRandomBytes(MAX_SIGNATURE_LENGTH);
 	private final Author author = getAuthor();
 	private final String authorName = author.getName();
@@ -41,9 +41,9 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 	private final BdfList authorList = BdfList.of(author.getFormatVersion(),
 			authorName, authorPublicKey);
 	private final BdfList signedWithParent = BdfList.of(groupId, timestamp,
-			parentId.getBytes(), authorList, content);
+			parentId.getBytes(), authorList, text);
 	private final BdfList signedWithoutParent = BdfList.of(groupId, timestamp,
-			null, authorList, content);
+			null, authorList, text);
 
 	private final ForumPostValidator v = new ForumPostValidator(clientHelper,
 			metadataEncoder, clock);
@@ -51,13 +51,13 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsTooShortBody() throws Exception {
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content));
+				BdfList.of(parentId, authorList, text));
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsTooLongBody() throws Exception {
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, signature, 123));
+				BdfList.of(parentId, authorList, text, signature, 123));
 	}
 
 	@Test
@@ -69,40 +69,40 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		}});
 
 		BdfMessageContext messageContext = v.validateMessage(message, group,
-				BdfList.of(null, authorList, content, signature));
+				BdfList.of(null, authorList, text, signature));
 		assertExpectedContext(messageContext, false);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsNonRawParentId() throws Exception {
 		v.validateMessage(message, group,
-				BdfList.of(123, authorList, content, signature));
+				BdfList.of(123, authorList, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsTooShortParentId() throws Exception {
 		byte[] invalidParentId = getRandomBytes(UniqueId.LENGTH - 1);
 		v.validateMessage(message, group,
-				BdfList.of(invalidParentId, authorList, content, signature));
+				BdfList.of(invalidParentId, authorList, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsTooLongParentId() throws Exception {
 		byte[] invalidParentId = getRandomBytes(UniqueId.LENGTH + 1);
 		v.validateMessage(message, group,
-				BdfList.of(invalidParentId, authorList, content, signature));
+				BdfList.of(invalidParentId, authorList, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsNullAuthorList() throws Exception {
 		v.validateMessage(message, group,
-				BdfList.of(parentId, null, content, signature));
+				BdfList.of(parentId, null, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsNonListAuthorList() throws Exception {
 		v.validateMessage(message, group,
-				BdfList.of(parentId, 123, content, signature));
+				BdfList.of(parentId, 123, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
@@ -112,11 +112,11 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 			will(throwException(new FormatException()));
 		}});
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, signature));
+				BdfList.of(parentId, authorList, text, signature));
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNullContent() throws Exception {
+	public void testRejectsNullText() throws Exception {
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
@@ -124,7 +124,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNonStringContent() throws Exception {
+	public void testRejectsNonStringText() throws Exception {
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
@@ -132,30 +132,30 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test
-	public void testAcceptsMinLengthContent() throws Exception {
-		String shortContent = "";
-		BdfList signedWithShortContent = BdfList.of(groupId, timestamp,
-				parentId.getBytes(), authorList, shortContent);
+	public void testAcceptsMinLengthText() throws Exception {
+		String shortText = "";
+		BdfList signedWithShortText = BdfList.of(groupId, timestamp,
+				parentId.getBytes(), authorList, shortText);
 
 		expectCreateAuthor();
 		context.checking(new Expectations() {{
 			oneOf(clientHelper).verifySignature(signature, SIGNING_LABEL_POST,
-					signedWithShortContent, authorPublicKey);
+					signedWithShortText, authorPublicKey);
 		}});
 
 		BdfMessageContext messageContext = v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, shortContent, signature));
+				BdfList.of(parentId, authorList, shortText, signature));
 		assertExpectedContext(messageContext, true);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsTooLongContent() throws Exception {
-		String invalidContent = getRandomString(MAX_FORUM_POST_BODY_LENGTH + 1);
+	public void testRejectsTooLongText() throws Exception {
+		String invalidText = getRandomString(MAX_FORUM_POST_TEXT_LENGTH + 1);
 
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, invalidContent, signature));
+				BdfList.of(parentId, authorList, invalidText, signature));
 	}
 
 	@Test(expected = FormatException.class)
@@ -163,7 +163,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, null));
+				BdfList.of(parentId, authorList, text, null));
 	}
 
 	@Test(expected = FormatException.class)
@@ -171,7 +171,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, 123));
+				BdfList.of(parentId, authorList, text, 123));
 	}
 
 	@Test(expected = FormatException.class)
@@ -181,7 +181,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		expectCreateAuthor();
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, invalidSignature));
+				BdfList.of(parentId, authorList, text, invalidSignature));
 	}
 
 	@Test(expected = FormatException.class)
@@ -195,7 +195,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		}});
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, signature));
+				BdfList.of(parentId, authorList, text, signature));
 	}
 
 	@Test(expected = InvalidMessageException.class)
@@ -209,7 +209,7 @@ public class ForumPostValidatorTest extends ValidatorTestCase {
 		}});
 
 		v.validateMessage(message, group,
-				BdfList.of(parentId, authorList, content, signature));
+				BdfList.of(parentId, authorList, text, signature));
 	}
 
 	private void expectCreateAuthor() throws Exception {
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
index 4f52aa4de9f83d9df7cb4e5b735bf3557e82c524..32da49db37416e5340c401772bc62255403e0e5f 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionValidatorTest.java
@@ -19,7 +19,7 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_K
 import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_REQUEST_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_TEXT_LENGTH;
 import static org.briarproject.briar.introduction.MessageType.ABORT;
 import static org.briarproject.briar.introduction.MessageType.ACCEPT;
 import static org.briarproject.briar.introduction.MessageType.ACTIVATE;
@@ -38,7 +38,7 @@ public class IntroductionValidatorTest extends ValidatorTestCase {
 
 	private final SessionId sessionId = new SessionId(getRandomId());
 	private final MessageId previousMsgId = new MessageId(getRandomId());
-	private final String text = getRandomString(MAX_REQUEST_MESSAGE_LENGTH);
+	private final String text = getRandomString(MAX_INTRODUCTION_TEXT_LENGTH);
 	private final BdfDictionary meta = new BdfDictionary();
 	private final long acceptTimestamp = 42;
 	private final BdfDictionary transportProperties = BdfDictionary.of(
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderParserIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderParserIntegrationTest.java
index a29f7944577f3b494ba3eb50a6ea44dcf26290c1..01675c3fcc87020f8de639fac850bd14ee1918d3 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderParserIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderParserIntegrationTest.java
@@ -30,7 +30,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.test.TestUtils.getTransportPropertiesMap;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_REQUEST_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_TEXT_LENGTH;
 import static org.briarproject.briar.api.introduction.IntroductionManager.CLIENT_ID;
 import static org.briarproject.briar.api.introduction.IntroductionManager.MAJOR_VERSION;
 import static org.briarproject.briar.introduction.MessageType.ABORT;
@@ -65,7 +65,7 @@ public class MessageEncoderParserIntegrationTest extends BrambleTestCase {
 	private final SessionId sessionId = new SessionId(getRandomId());
 	private final MessageId previousMsgId = new MessageId(getRandomId());
 	private final Author author;
-	private final String text = getRandomString(MAX_REQUEST_MESSAGE_LENGTH);
+	private final String text = getRandomString(MAX_INTRODUCTION_TEXT_LENGTH);
 	private final byte[] ephemeralPublicKey =
 			getRandomBytes(MAX_PUBLIC_KEY_LENGTH);
 	private final byte[] mac = getRandomBytes(MAC_BYTES);
@@ -128,7 +128,7 @@ public class MessageEncoderParserIntegrationTest extends BrambleTestCase {
 		assertEquals(m.getTimestamp(), rm.getTimestamp());
 		assertEquals(previousMsgId, rm.getPreviousMessageId());
 		assertEquals(author, rm.getAuthor());
-		assertEquals(text, rm.getMessage());
+		assertEquals(text, rm.getText());
 	}
 
 	@Test
@@ -151,7 +151,7 @@ public class MessageEncoderParserIntegrationTest extends BrambleTestCase {
 		RequestMessage rm =
 				messageParser.parseRequestMessage(m, clientHelper.toList(m));
 
-		assertNull(rm.getMessage());
+		assertNull(rm.getText());
 	}
 
 	@Test
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderTest.java
index 6f1af6f746167146797a2ed38ec384944d3117a8..0e06673f50a7e91b93b9c63a6f8afd6d5097198d 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/MessageEncoderTest.java
@@ -16,7 +16,7 @@ import static org.briarproject.bramble.test.TestUtils.getAuthor;
 import static org.briarproject.bramble.test.TestUtils.getMessage;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_REQUEST_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.introduction.IntroductionConstants.MAX_INTRODUCTION_TEXT_LENGTH;
 import static org.briarproject.briar.introduction.MessageType.REQUEST;
 
 public class MessageEncoderTest extends BrambleMockTestCase {
@@ -34,7 +34,7 @@ public class MessageEncoderTest extends BrambleMockTestCase {
 	private final byte[] body = message.getBody();
 	private final Author author = getAuthor();
 	private final BdfList authorList = new BdfList();
-	private final String text = getRandomString(MAX_REQUEST_MESSAGE_LENGTH);
+	private final String text = getRandomString(MAX_INTRODUCTION_TEXT_LENGTH);
 
 	@Test
 	public void testEncodeRequestMessage() throws FormatException {
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
index a3f6c1bc41e35ede5ac2c0f5b33767f90592862b..d9a9733d6a0220dc3c8dba19259f4ff97a001fe7 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java
@@ -29,8 +29,8 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_K
 import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
-import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
 import static org.junit.Assert.assertTrue;
 
 public class MessageSizeIntegrationTest extends BriarTestCase {
@@ -56,13 +56,13 @@ public class MessageSizeIntegrationTest extends BriarTestCase {
 		// Create a maximum-length private message
 		GroupId groupId = new GroupId(getRandomId());
 		long timestamp = Long.MAX_VALUE;
-		String body = getRandomString(MAX_PRIVATE_MESSAGE_BODY_LENGTH);
+		String text = getRandomString(MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
 		PrivateMessage message = privateMessageFactory.createPrivateMessage(
-				groupId, timestamp, body);
+				groupId, timestamp, text);
 		// Check the size of the serialised message
 		int length = message.getMessage().getRawLength();
 		assertTrue(length > UniqueId.LENGTH + 8
-				+ MAX_PRIVATE_MESSAGE_BODY_LENGTH);
+				+ MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
 		assertTrue(length <= MAX_RECORD_PAYLOAD_BYTES);
 	}
 
@@ -79,14 +79,14 @@ public class MessageSizeIntegrationTest extends BriarTestCase {
 		GroupId groupId = new GroupId(getRandomId());
 		long timestamp = Long.MAX_VALUE;
 		MessageId parent = new MessageId(getRandomId());
-		String body = getRandomString(MAX_FORUM_POST_BODY_LENGTH);
+		String text = getRandomString(MAX_FORUM_POST_TEXT_LENGTH);
 		ForumPost post = forumPostFactory.createPost(groupId,
-				timestamp, parent, author, body);
+				timestamp, parent, author, text);
 		// Check the size of the serialised message
 		int length = post.getMessage().getRawLength();
 		assertTrue(length > UniqueId.LENGTH + 8 + UniqueId.LENGTH + 4
 				+ MAX_AUTHOR_NAME_LENGTH + MAX_PUBLIC_KEY_LENGTH
-				+ MAX_FORUM_POST_BODY_LENGTH);
+				+ MAX_FORUM_POST_TEXT_LENGTH);
 		assertTrue(length <= MAX_RECORD_PAYLOAD_BYTES);
 	}
 
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
index 41a52035c8962b7fc408f4f8b7386cf7a899fe4d..9a279afdb733c8b8480a637368822d45a3dcb008 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/PrivateMessageValidatorTest.java
@@ -5,10 +5,10 @@ import org.briarproject.bramble.api.client.BdfMessageContext;
 import org.briarproject.bramble.api.data.BdfDictionary;
 import org.briarproject.bramble.api.data.BdfList;
 import org.briarproject.bramble.test.ValidatorTestCase;
-import org.briarproject.bramble.util.StringUtils;
 import org.junit.Test;
 
-import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH;
+import static org.briarproject.bramble.util.StringUtils.getRandomString;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
 import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -30,41 +30,40 @@ public class PrivateMessageValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNullContent() throws Exception {
+	public void testRejectsNullText() throws Exception {
 		PrivateMessageValidator v = new PrivateMessageValidator(clientHelper,
 				metadataEncoder, clock);
 		v.validateMessage(message, group, BdfList.of((String) null));
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNonStringContent() throws Exception {
+	public void testRejectsNonStringText() throws Exception {
 		PrivateMessageValidator v = new PrivateMessageValidator(clientHelper,
 				metadataEncoder, clock);
 		v.validateMessage(message, group, BdfList.of(123));
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsTooLongContent() throws Exception {
+	public void testRejectsTooLongText() throws Exception {
 		PrivateMessageValidator v = new PrivateMessageValidator(clientHelper,
 				metadataEncoder, clock);
-		String invalidContent =
-				StringUtils.getRandomString(MAX_PRIVATE_MESSAGE_BODY_LENGTH + 1);
-		v.validateMessage(message, group, BdfList.of(invalidContent));
+		String invalidText =
+				getRandomString(MAX_PRIVATE_MESSAGE_TEXT_LENGTH + 1);
+		v.validateMessage(message, group, BdfList.of(invalidText));
 	}
 
 	@Test
-	public void testAcceptsMaxLengthContent() throws Exception {
+	public void testAcceptsMaxLengthText() throws Exception {
 		PrivateMessageValidator v = new PrivateMessageValidator(clientHelper,
 				metadataEncoder, clock);
-		String content =
-				StringUtils.getRandomString(MAX_PRIVATE_MESSAGE_BODY_LENGTH);
+		String text = getRandomString(MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
 		BdfMessageContext messageContext =
-				v.validateMessage(message, group, BdfList.of(content));
+				v.validateMessage(message, group, BdfList.of(text));
 		assertExpectedContext(messageContext);
 	}
 
 	@Test
-	public void testAcceptsMinLengthContent() throws Exception {
+	public void testAcceptsMinLengthText() throws Exception {
 		PrivateMessageValidator v = new PrivateMessageValidator(clientHelper,
 				metadataEncoder, clock);
 		BdfMessageContext messageContext =
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
index 3148da439fe6f99daf90d57e3ae5a5088a2a2dca..b8ed89b16c984e25fe7a8fa605887ec95a9e9744 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/GroupMessageValidatorTest.java
@@ -31,7 +31,7 @@ import static org.briarproject.briar.api.privategroup.MessageType.JOIN;
 import static org.briarproject.briar.api.privategroup.MessageType.POST;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_BODY_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_POST_TEXT_LENGTH;
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
 import static org.briarproject.briar.privategroup.GroupConstants.KEY_INITIAL_JOIN_MSG;
 import static org.briarproject.briar.privategroup.GroupConstants.KEY_MEMBER;
@@ -76,7 +76,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	private final BdfList token = new BdfList();
 	private final MessageId parentId = new MessageId(getRandomId());
 	private final MessageId previousMsgId = new MessageId(getRandomId());
-	private final String content = getRandomString(MAX_GROUP_POST_BODY_LENGTH);
+	private final String text = getRandomString(MAX_GROUP_POST_TEXT_LENGTH);
 
 	private final GroupMessageValidator validator =
 			new GroupMessageValidator(privateGroupFactory, clientHelper,
@@ -432,7 +432,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsTooShortPost() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content);
+				previousMsgId, text);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -440,21 +440,21 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsTooLongPost() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, memberSignature, "");
+				previousMsgId, text, memberSignature, "");
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNullAuthor() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), null, parentId, previousMsgId,
-				content, memberSignature);
+				text, memberSignature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNonListAuthor() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), 123, parentId, previousMsgId,
-				content, memberSignature);
+				text, memberSignature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -462,14 +462,14 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	public void testRejectsPostWithInvalidAuthor() throws Exception {
 		expectRejectAuthor(memberList);
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, memberSignature);
+				previousMsgId, text, memberSignature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooShortParentId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList,
-				getRandomBytes(MessageId.LENGTH - 1), previousMsgId, content,
+				getRandomBytes(MessageId.LENGTH - 1), previousMsgId, text,
 				memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
@@ -478,7 +478,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooLongParentId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList,
-				getRandomBytes(MessageId.LENGTH + 1), previousMsgId, content,
+				getRandomBytes(MessageId.LENGTH + 1), previousMsgId, text,
 				memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
@@ -487,7 +487,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNonRawParentId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, "not raw",
-				previousMsgId, content, memberSignature);
+				previousMsgId, text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -495,7 +495,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooShortPreviousMsgId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				getRandomBytes(MessageId.LENGTH - 1), content, memberSignature);
+				getRandomBytes(MessageId.LENGTH - 1), text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -503,7 +503,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooLongPreviousMsgId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				getRandomBytes(MessageId.LENGTH + 1), content, memberSignature);
+				getRandomBytes(MessageId.LENGTH + 1), text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -511,7 +511,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNullPreviousMsgId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId, null,
-				content, memberSignature);
+				text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -519,13 +519,13 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNonRawPreviousMsgId() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				"not raw", content, memberSignature);
+				"not raw", text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsPostWithTooShortContent() throws Exception {
+	public void testRejectsPostWithTooShortText() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
 				previousMsgId, "", memberSignature);
 		expectParseAuthor(memberList, member);
@@ -533,16 +533,16 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsPostWithTooLongContent() throws Exception {
+	public void testRejectsPostWithTooLongText() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, getRandomString(MAX_GROUP_POST_BODY_LENGTH + 1),
+				previousMsgId, getRandomString(MAX_GROUP_POST_TEXT_LENGTH + 1),
 				memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsPostWithNullContent() throws Exception {
+	public void testRejectsPostWithNullText() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
 				previousMsgId, null, memberSignature);
 		expectParseAuthor(memberList, member);
@@ -550,7 +550,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsPostWithNonStringContent() throws Exception {
+	public void testRejectsPostWithNonStringText() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
 				previousMsgId, getRandomBytes(5), memberSignature);
 		expectParseAuthor(memberList, member);
@@ -560,7 +560,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooShortSignature() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, new byte[0]);
+				previousMsgId, text, new byte[0]);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -568,7 +568,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithTooLongSignature() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content,
+				previousMsgId, text,
 				getRandomBytes(MAX_SIGNATURE_LENGTH + 1));
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
@@ -577,7 +577,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNullSignature() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, null);
+				previousMsgId, text, null);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -585,7 +585,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithNonRawSignature() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, "not raw");
+				previousMsgId, text, "not raw");
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
@@ -593,7 +593,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsPostWithInvalidSignature() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, memberSignature);
+				previousMsgId, text, memberSignature);
 		expectPostMessage(parentId, false);
 		validator.validateMessage(message, group, body);
 	}
@@ -601,7 +601,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test
 	public void testAcceptsPost() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, parentId,
-				previousMsgId, content, memberSignature);
+				previousMsgId, text, memberSignature);
 		expectPostMessage(parentId, true);
 		BdfMessageContext messageContext =
 				validator.validateMessage(message, group, body);
@@ -616,7 +616,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test
 	public void testAcceptsTopLevelPost() throws Exception {
 		BdfList body = BdfList.of(POST.getInt(), memberList, null,
-				previousMsgId, content, memberSignature);
+				previousMsgId, text, memberSignature);
 		expectPostMessage(null, true);
 		BdfMessageContext messageContext =
 				validator.validateMessage(message, group, body);
@@ -636,7 +636,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 				memberList,
 				parentId == null ? null : parentId.getBytes(),
 				previousMsgId.getBytes(),
-				content
+				text
 		);
 		expectParseAuthor(memberList, member);
 		context.checking(new Expectations() {{
@@ -662,7 +662,7 @@ public class GroupMessageValidatorTest extends ValidatorTestCase {
 	@Test(expected = InvalidMessageException.class)
 	public void testRejectsMessageWithUnknownType() throws Exception {
 		BdfList body = BdfList.of(POST.getInt() + 1, memberList,
-				parentId, previousMsgId, content, memberSignature);
+				parentId, previousMsgId, text, memberSignature);
 		expectParseAuthor(memberList, member);
 		validator.validateMessage(message, group, body);
 	}
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
index 2d384dac7e053f51ae7d92074d63b25ee7874bfd..c42fe911f667698ada9253de252b9576ebd41291 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupIntegrationTest.java
@@ -176,10 +176,10 @@ public class PrivateGroupIntegrationTest
 
 		// 2 sends a message to the group
 		long time = clock.currentTimeMillis();
-		String body = "This is a test message!";
+		String text = "This is a test message!";
 		MessageId previousMsgId = groupManager2.getPreviousMsgId(groupId0);
 		GroupMessage msg = groupMessageFactory
-				.createGroupMessage(groupId0, time, null, author2, body,
+				.createGroupMessage(groupId0, time, null, author2, text,
 						previousMsgId);
 		groupManager2.addLocalMessage(msg);
 
@@ -209,13 +209,13 @@ public class PrivateGroupIntegrationTest
 	}
 
 	private void sendInvitation(ContactId c, long timestamp,
-			@Nullable String msg) throws DbException {
+			@Nullable String text) throws DbException {
 		Contact contact = contactManager0.getContact(c);
 		byte[] signature = groupInvitationFactory
 				.signInvitation(contact, groupId0, timestamp,
 						author0.getPrivateKey());
 		groupInvitationManager0
-				.sendInvitation(groupId0, c, msg, timestamp, signature);
+				.sendInvitation(groupId0, c, text, timestamp, signature);
 	}
 
 	private GroupMember getGroupMember(PrivateGroupManager groupManager,
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
index 1723e5f5195575352ec0f5b57d5fa52e95c60271..4c4172741bea3adc3c0024171ca182312494d34e 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/PrivateGroupManagerIntegrationTest.java
@@ -80,11 +80,11 @@ public class PrivateGroupManagerIntegrationTest
 
 		// create and add test message
 		long time = clock.currentTimeMillis();
-		String body = "This is a test message!";
+		String text = "This is a test message!";
 		MessageId previousMsgId =
 				groupManager0.getPreviousMsgId(groupId0);
 		GroupMessage msg = groupMessageFactory
-				.createGroupMessage(groupId0, time, null, author0, body,
+				.createGroupMessage(groupId0, time, null, author0, text,
 						previousMsgId);
 		groupManager0.addLocalMessage(msg);
 		assertEquals(msg.getMessage().getId(),
@@ -108,7 +108,7 @@ public class PrivateGroupManagerIntegrationTest
 		assertEquals(author0, header.getAuthor());
 		assertEquals(time, header.getTimestamp());
 		assertEquals(VERIFIED, header.getAuthorStatus());
-		assertEquals(body, groupManager1.getMessageBody(header.getId()));
+		assertEquals(text, groupManager1.getMessageText(header.getId()));
 		GroupCount count = groupManager1.getGroupCount(groupId0);
 		assertEquals(2, count.getUnreadCount());
 		assertEquals(time, count.getLatestMsgTime());
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
index a831d16ee6ad343aafbb0ef91bb955de3df93379..2c2d1e6354e67fee00dd8b67b71baefa08abd566 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
@@ -34,7 +34,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_ID;
 import static org.briarproject.briar.api.privategroup.PrivateGroupManager.MAJOR_VERSION;
@@ -89,7 +89,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 			new InviteMessage(new MessageId(getRandomId()), contactGroupId,
 					privateGroupId, 0L, privateGroup.getName(),
 					privateGroup.getCreator(), privateGroup.getSalt(),
-					getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH),
+					getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH),
 					signature);
 	final JoinMessage joinMessage =
 			new JoinMessage(new MessageId(getRandomId()), contactGroupId,
@@ -121,12 +121,12 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
 		}});
 	}
 
-	void expectSendInviteMessage(String msg) throws Exception {
+	void expectSendInviteMessage(String text) throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(messageEncoder)
 					.encodeInviteMessage(contactGroupId, privateGroupId,
 							inviteTimestamp, privateGroup.getName(), author,
-							privateGroup.getSalt(), msg, signature);
+							privateGroup.getSalt(), text, signature);
 			will(returnValue(message));
 		}});
 		expectSendMessage(INVITE, true);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
index 19e996e43d0ce80c7dbd7551e373cfc3e5ea58cb..9495b19ec4b99cbfe9497f7eaf0844704d50cd32 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
@@ -15,6 +15,7 @@ import static org.briarproject.briar.privategroup.invitation.CreatorState.JOINED
 import static org.briarproject.briar.privategroup.invitation.CreatorState.LEFT;
 import static org.briarproject.briar.privategroup.invitation.CreatorState.START;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 
@@ -36,15 +37,15 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 	public void testOnInviteActionFromStart() throws Exception {
 		CreatorSession session =
 				new CreatorSession(contactGroupId, privateGroupId);
-		String message = "Invitation Message";
+		String text = "Invitation text";
 
-		expectOnLocalInvite(message);
+		expectOnLocalInvite(text);
 		CreatorSession newSession =
-				engine.onInviteAction(txn, session, message, inviteTimestamp,
+				engine.onInviteAction(txn, session, text, inviteTimestamp,
 						signature);
 		assertEquals(INVITED, newSession.getState());
 		assertEquals(messageId, newSession.getLastLocalMessageId());
-		assertEquals(null, newSession.getLastRemoteMessageId());
+		assertNull(newSession.getLastRemoteMessageId());
 		assertEquals(messageTimestamp, newSession.getLocalTimestamp());
 		assertEquals(inviteTimestamp, newSession.getInviteTimestamp());
 		assertSessionConstantsUnchanged(session, newSession);
@@ -61,13 +62,13 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 						signature);
 		assertEquals(INVITED, newSession.getState());
 		assertEquals(messageId, newSession.getLastLocalMessageId());
-		assertEquals(null, newSession.getLastRemoteMessageId());
+		assertNull(newSession.getLastRemoteMessageId());
 		assertEquals(messageTimestamp, newSession.getLocalTimestamp());
 		assertEquals(inviteTimestamp, newSession.getInviteTimestamp());
 		assertSessionConstantsUnchanged(session, newSession);
 	}
 
-	private void expectOnLocalInvite(String msg) throws Exception {
+	private void expectOnLocalInvite(String text) throws Exception {
 		context.checking(new Expectations() {{
 			oneOf(db).getGroup(txn, privateGroupId);
 			will(returnValue(privateGroupGroup));
@@ -75,7 +76,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 			will(returnValue(privateGroup));
 			oneOf(messageTracker).trackOutgoingMessage(txn, message);
 		}});
-		expectSendInviteMessage(msg);
+		expectSendInviteMessage(text);
 		expectGetLocalTimestamp(messageTimestamp);
 	}
 
@@ -112,7 +113,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 	// onJoinAction
 
 	@Test(expected = UnsupportedOperationException.class)
-	public void testOnJoinActionFails() throws Exception {
+	public void testOnJoinActionFails() {
 		engine.onJoinAction(txn, getDefaultSession(START));
 	}
 
@@ -186,7 +187,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
 	// onMemberAddedAction
 
 	@Test
-	public void testOnMemberAddedAction() throws Exception {
+	public void testOnMemberAddedAction() {
 		CreatorSession session = getDefaultSession(START);
 		assertEquals(session, engine.onMemberAddedAction(txn, session));
 
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java
index be62f3fe99fc043c0a7fb9dc2606493ac7ce2421..acc5e1ea381126272e49d16237844faea3814dfa 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java
@@ -76,8 +76,8 @@ public class GroupInvitationIntegrationTest
 	@Test
 	public void testSendInvitation() throws Exception {
 		long timestamp = clock.currentTimeMillis();
-		String msg = "Hi!";
-		sendInvitation(timestamp, msg);
+		String text = "Hi!";
+		sendInvitation(timestamp, text);
 
 		sync0To1(1, true);
 
@@ -97,7 +97,7 @@ public class GroupInvitationIntegrationTest
 		assertEquals(1, messages.size());
 		GroupInvitationRequest request =
 				(GroupInvitationRequest) messages.iterator().next();
-		assertEquals(msg, request.getMessage());
+		assertEquals(text, request.getText());
 		assertEquals(author0, request.getNameable().getCreator());
 		assertEquals(timestamp, request.getTimestamp());
 		assertEquals(privateGroup0.getName(), request.getNameable().getName());
@@ -442,12 +442,12 @@ public class GroupInvitationIntegrationTest
 		sync1To0(1, true);
 	}
 
-	private void sendInvitation(long timestamp, @Nullable String msg) throws
+	private void sendInvitation(long timestamp, @Nullable String text) throws
 			DbException {
 		byte[] signature = groupInvitationFactory.signInvitation(contact1From0,
 				privateGroup0.getId(), timestamp, author0.getPrivateKey());
 		groupInvitationManager0
-				.sendInvitation(privateGroup0.getId(), contactId1From0, msg,
+				.sendInvitation(privateGroup0.getId(), contactId1From0, text,
 						timestamp, signature);
 	}
 
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
index e9a19ae7feb7a55a00e845a5708a5e3f34d00d65..8c06d942e60d8630998759608589c1473e2a8d08 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java
@@ -464,7 +464,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 
 	@Test
 	public void testSendFirstInvitation() throws Exception {
-		String msg = "Invitation text for first invitation";
+		String text = "Invitation text for first invitation";
 		long time = 42L;
 		byte[] signature = getRandomBytes(42);
 
@@ -481,7 +481,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 		expectCreateStorageId();
 		context.checking(new Expectations() {{
 			oneOf(creatorEngine).onInviteAction(with(txn),
-					with(any(CreatorSession.class)), with(msg), with(time),
+					with(any(CreatorSession.class)), with(text), with(time),
 					with(signature));
 			will(returnValue(creatorSession));
 		}});
@@ -491,12 +491,12 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 			oneOf(db).endTransaction(txn);
 		}});
 		groupInvitationManager.sendInvitation(privateGroup.getId(), contactId,
-				msg, time, signature);
+				text, time, signature);
 	}
 
 	@Test
 	public void testSendSubsequentInvitation() throws Exception {
-		String msg = "Invitation text for subsequent invitation";
+		String text = "Invitation text for subsequent invitation";
 		long time = 43L;
 		byte[] signature = getRandomBytes(43);
 
@@ -513,7 +513,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 					.parseCreatorSession(contactGroup.getId(), bdfSession);
 			will(returnValue(creatorSession));
 			oneOf(creatorEngine).onInviteAction(with(txn),
-					with(any(CreatorSession.class)), with(msg), with(time),
+					with(any(CreatorSession.class)), with(text), with(time),
 					with(signature));
 			will(returnValue(creatorSession));
 		}});
@@ -523,7 +523,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase {
 			oneOf(db).endTransaction(txn);
 		}});
 		groupInvitationManager.sendInvitation(privateGroup.getId(), contactId,
-				msg, time, signature);
+				text, time, signature);
 	}
 
 	@Test(expected = IllegalArgumentException.class)
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
index d68a5edabd4a0f17377547632dec388fe4069a78..386c3544851e03286884116b10c0b35a2500dbf6 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationValidatorTest.java
@@ -22,7 +22,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH;
 import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory.SIGNING_LABEL_INVITE;
 import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT;
@@ -47,8 +47,8 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	);
 	private final String groupName = getRandomString(MAX_GROUP_NAME_LENGTH);
 	private final byte[] salt = getRandomBytes(GROUP_SALT_LENGTH);
-	private final String content =
-			getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH);
+	private final String text =
+			getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH);
 	private final byte[] signature = getRandomBytes(MAX_SIGNATURE_LENGTH);
 	private final PrivateGroup privateGroup =
 			new PrivateGroup(group, groupName, creator, salt);
@@ -64,14 +64,14 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	@Test(expected = FormatException.class)
 	public void testRejectsTooShortInviteMessage() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content);
+				salt, text);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsTooLongInviteMessage() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, signature, "");
+				salt, text, signature, "");
 		validator.validateMessage(message, group, body);
 	}
 
@@ -79,7 +79,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithTooShortGroupName()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, "", salt,
-				content, signature);
+				text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -88,14 +88,14 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 			throws Exception {
 		String tooLongName = getRandomString(MAX_GROUP_NAME_LENGTH + 1);
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, tooLongName,
-				salt, content, signature);
+				salt, text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNullGroupName() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, null, salt,
-				content, signature);
+				text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -103,21 +103,21 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithNonStringGroupName()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList,
-				getRandomBytes(5), salt, content, signature);
+				getRandomBytes(5), salt, text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNullCreator() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), null, groupName, salt,
-				content, signature);
+				text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNonListCreator() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), 123, groupName, salt,
-				content, signature);
+				text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -129,7 +129,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 		}});
 
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, signature);
+				salt, text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -137,7 +137,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithTooShortGroupSalt()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				getRandomBytes(GROUP_SALT_LENGTH - 1), content, signature);
+				getRandomBytes(GROUP_SALT_LENGTH - 1), text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -145,41 +145,41 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithTooLongGroupSalt()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				getRandomBytes(GROUP_SALT_LENGTH + 1), content, signature);
+				getRandomBytes(GROUP_SALT_LENGTH + 1), text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNullGroupSalt() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				null, content, signature);
+				null, text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNonRawGroupSalt() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				"not raw", content, signature);
+				"not raw", text, signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsInviteMessageWithTooShortContent() throws Exception {
+	public void testRejectsInviteMessageWithTooShortText() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
 				salt, "", signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsInviteMessageWithTooLongContent() throws Exception {
+	public void testRejectsInviteMessageWithTooLongText() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH + 1),
+				salt, getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH + 1),
 				signature);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test
-	public void testAcceptsInviteMessageWithNullContent() throws Exception {
+	public void testAcceptsInviteMessageWithNullText() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
 				salt, null, signature);
 		expectInviteMessage(false);
@@ -187,7 +187,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsInviteMessageWithNonStringContent()
+	public void testRejectsInviteMessageWithNonStringText()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
 				salt, getRandomBytes(5), signature);
@@ -198,7 +198,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithTooShortSignature()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, new byte[0]);
+				salt, text, new byte[0]);
 		validator.validateMessage(message, group, body);
 	}
 
@@ -206,21 +206,21 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithTooLongSignature()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, getRandomBytes(MAX_SIGNATURE_LENGTH + 1));
+				salt, text, getRandomBytes(MAX_SIGNATURE_LENGTH + 1));
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNullSignature() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, null);
+				salt, text, null);
 		validator.validateMessage(message, group, body);
 	}
 
 	@Test(expected = FormatException.class)
 	public void testRejectsInviteMessageWithNonRawSignature() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, "not raw");
+				salt, text, "not raw");
 		validator.validateMessage(message, group, body);
 	}
 
@@ -228,7 +228,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	public void testRejectsInviteMessageWithInvalidSignature()
 			throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, signature);
+				salt, text, signature);
 		expectInviteMessage(true);
 		validator.validateMessage(message, group, body);
 	}
@@ -236,7 +236,7 @@ public class GroupInvitationValidatorTest extends ValidatorTestCase {
 	@Test
 	public void testAcceptsValidInviteMessage() throws Exception {
 		BdfList body = BdfList.of(INVITE.getValue(), creatorList, groupName,
-				salt, content, signature);
+				salt, text, signature);
 		expectInviteMessage(false);
 		BdfMessageContext messageContext =
 				validator.validateMessage(message, group, body);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
index abbb912deb7cd0c10c7729a8d075548c67f895f7..4937695b2a67d6143a84d3b13222ae2480d49939 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
@@ -21,7 +21,7 @@ import static org.briarproject.bramble.test.TestUtils.getAuthor;
 import static org.briarproject.bramble.test.TestUtils.getLocalAuthor;
 import static org.briarproject.bramble.test.TestUtils.getRandomId;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH;
+import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.privategroup.invitation.InviteeState.ACCEPTED;
 import static org.briarproject.briar.privategroup.invitation.InviteeState.DISSOLVED;
 import static org.briarproject.briar.privategroup.invitation.InviteeState.ERROR;
@@ -327,7 +327,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
 						privateGroupId, session.getInviteTimestamp() + 1,
 						privateGroup.getName(), privateGroup.getCreator(),
 						privateGroup.getSalt(),
-						getRandomString(MAX_GROUP_INVITATION_MSG_LENGTH),
+						getRandomString(MAX_GROUP_INVITATION_TEXT_LENGTH),
 						signature);
 		Author notCreator = getAuthor();
 		Contact notCreatorContact = new Contact(contactId, notCreator,
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
index 8987eeb21fdd4376c4c5e4abf2c9bb8ee895f44c..bcb6475e440bce28a433382200c7443898cc8cc0 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java
@@ -159,7 +159,7 @@ public class BlogSharingIntegrationTest
 				assertEquals(blog2.getAuthor().getName(),
 						invitation.getName());
 				assertFalse(invitation.getNameable().isRssFeed());
-				assertEquals("Hi!", invitation.getMessage());
+				assertEquals("Hi!", invitation.getText());
 			} else {
 				BlogInvitationResponse response = (BlogInvitationResponse) m;
 				assertEquals(blog2.getId(), response.getShareableId());
@@ -232,7 +232,7 @@ public class BlogSharingIntegrationTest
 				assertEquals(rssBlog.getAuthor().getName(),
 						invitation.getName());
 				assertTrue(invitation.getNameable().isRssFeed());
-				assertEquals("Hi!", invitation.getMessage());
+				assertEquals("Hi!", invitation.getText());
 			} else {
 				BlogInvitationResponse response = (BlogInvitationResponse) m;
 				assertEquals(rssBlog.getId(), response.getShareableId());
@@ -293,7 +293,7 @@ public class BlogSharingIntegrationTest
 				assertTrue(invitation.wasAnswered());
 				assertEquals(blog2.getAuthor().getName(),
 						invitation.getName());
-				assertNull(invitation.getMessage());
+				assertNull(invitation.getText());
 			} else {
 				BlogInvitationResponse response = (BlogInvitationResponse) m;
 				assertEquals(blog2.getId(), response.getShareableId());
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
index 9e20390830cf6112f9e1a6a3841a2f45a914ba82..01b0ffd2a1d54ae9691571be0dbea3b4111ab67e 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingValidatorTest.java
@@ -10,7 +10,7 @@ import org.junit.Test;
 
 import static org.briarproject.bramble.test.TestUtils.getAuthor;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
-import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.sharing.MessageType.INVITE;
 
 public class BlogSharingValidatorTest extends SharingValidatorTest {
@@ -20,8 +20,7 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 	private final BdfList authorList = BdfList.of(author.getFormatVersion(),
 			author.getName(), author.getPublicKey());
 	private final BdfList descriptor = BdfList.of(authorList, false);
-	private final String content =
-			getRandomString(MAX_INVITATION_MESSAGE_LENGTH);
+	private final String text = getRandomString(MAX_INVITATION_TEXT_LENGTH);
 
 	@Override
 	SharingValidator getValidator() {
@@ -30,17 +29,16 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 	}
 
 	@Test
-	public void testAcceptsInvitationWithContent() throws Exception {
+	public void testAcceptsInvitationWithText() throws Exception {
 		expectCreateBlog();
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
-				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						content));
+				BdfList.of(INVITE.getValue(), previousMsgId, descriptor, text));
 		assertExpectedContext(context, previousMsgId);
 	}
 
 	@Test
-	public void testAcceptsInvitationWithNullContent() throws Exception {
+	public void testAcceptsInvitationWithNullText() throws Exception {
 		expectCreateBlog();
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
@@ -53,7 +51,7 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 		expectCreateBlog();
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
-				BdfList.of(INVITE.getValue(), null, descriptor, content));
+				BdfList.of(INVITE.getValue(), null, descriptor, text));
 		assertExpectedContext(context, null);
 	}
 
@@ -64,7 +62,7 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 		BdfList rssDescriptor = BdfList.of(authorList, true);
 		BdfMessageContext context = validator.validateMessage(message, group,
 				BdfList.of(INVITE.getValue(), previousMsgId, rssDescriptor,
-						content));
+						text));
 		assertExpectedContext(context, previousMsgId);
 	}
 
@@ -85,32 +83,30 @@ public class BlogSharingValidatorTest extends SharingValidatorTest {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNonStringContent() throws Exception {
+	public void testRejectsNonStringText() throws Exception {
 		expectCreateBlog();
 		validator.validateMessage(message, group,
-				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						123));
+				BdfList.of(INVITE.getValue(), previousMsgId, descriptor, 123));
 	}
 
 	@Test
-	public void testAcceptsMinLengthContent() throws Exception {
-		String shortContent = getRandomString(1);
+	public void testAcceptsMinLengthText() throws Exception {
+		String shortText = getRandomString(1);
 		expectCreateBlog();
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
 				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						shortContent));
+						shortText));
 		assertExpectedContext(context, previousMsgId);
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsTooLongContent() throws Exception {
-		String invalidContent =
-				getRandomString(MAX_INVITATION_MESSAGE_LENGTH + 1);
+	public void testRejectsTooLongText() throws Exception {
+		String invalidText = getRandomString(MAX_INVITATION_TEXT_LENGTH + 1);
 		expectCreateBlog();
 		validator.validateMessage(message, group,
 				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						invalidContent));
+						invalidText));
 	}
 
 	private void expectCreateBlog() throws Exception {
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
index 3a6c3dc3824d1c890babfaae1324ba3717d20e44..c4b20eceb98d9bb71e81e34130be325f5a24b264 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingIntegrationTest.java
@@ -139,7 +139,7 @@ public class ForumSharingIntegrationTest
 				assertTrue(invitation.wasAnswered());
 				assertEquals(forum0.getName(), invitation.getName());
 				assertEquals(forum0, invitation.getNameable());
-				assertEquals("Hi!", invitation.getMessage());
+				assertEquals("Hi!", invitation.getText());
 				assertTrue(invitation.canBeOpened());
 			} else {
 				ForumInvitationResponse response = (ForumInvitationResponse) m;
@@ -195,7 +195,7 @@ public class ForumSharingIntegrationTest
 				assertEquals(forum0, invitation.getNameable());
 				assertTrue(invitation.wasAnswered());
 				assertEquals(forum0.getName(), invitation.getName());
-				assertNull(invitation.getMessage());
+				assertNull(invitation.getText());
 				assertFalse(invitation.canBeOpened());
 			} else {
 				ForumInvitationResponse response = (ForumInvitationResponse) m;
@@ -635,10 +635,9 @@ public class ForumSharingIntegrationTest
 
 		// sharer posts into the forum
 		long time = clock.currentTimeMillis();
-		String body = getRandomString(42);
+		String text = getRandomString(42);
 		ForumPost p = forumPostFactory
-				.createPost(forum0.getId(), time, null, author0,
-						body);
+				.createPost(forum0.getId(), time, null, author0, text);
 		forumManager0.addLocalPost(p);
 
 		// sync forum post
@@ -654,10 +653,9 @@ public class ForumSharingIntegrationTest
 
 		// now invitee creates a post
 		time = clock.currentTimeMillis();
-		body = getRandomString(42);
+		text = getRandomString(42);
 		p = forumPostFactory
-				.createPost(forum0.getId(), time, null, author1,
-						body);
+				.createPost(forum0.getId(), time, null, author1, text);
 		forumManager1.addLocalPost(p);
 
 		// sync forum post
@@ -697,10 +695,9 @@ public class ForumSharingIntegrationTest
 
 		// now invitee creates a post
 		time = clock.currentTimeMillis();
-		body = getRandomString(42);
+		text = getRandomString(42);
 		p = forumPostFactory
-				.createPost(forum0.getId(), time, null, author1,
-						body);
+				.createPost(forum0.getId(), time, null, author1, text);
 		forumManager1.addLocalPost(p);
 
 		// sync forum post
diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
index 6197287742ac04aaba09607904619abcc103bcab..69e626d2480fba0d7d16a0e3c4bdf5932675081a 100644
--- a/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/sharing/ForumSharingValidatorTest.java
@@ -11,7 +11,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
 import static org.briarproject.bramble.util.StringUtils.getRandomString;
 import static org.briarproject.briar.api.forum.ForumConstants.FORUM_SALT_LENGTH;
 import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH;
-import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_MESSAGE_LENGTH;
+import static org.briarproject.briar.api.sharing.SharingConstants.MAX_INVITATION_TEXT_LENGTH;
 import static org.briarproject.briar.sharing.MessageType.INVITE;
 
 public class ForumSharingValidatorTest extends SharingValidatorTest {
@@ -20,8 +20,7 @@ public class ForumSharingValidatorTest extends SharingValidatorTest {
 	private final byte[] salt = getRandomBytes(FORUM_SALT_LENGTH);
 	private final Forum forum = new Forum(group, forumName, salt);
 	private final BdfList descriptor = BdfList.of(forumName, salt);
-	private final String content =
-			getRandomString(MAX_INVITATION_MESSAGE_LENGTH);
+	private final String text = getRandomString(MAX_INVITATION_TEXT_LENGTH);
 
 	@Override
 	SharingValidator getValidator() {
@@ -30,17 +29,16 @@ public class ForumSharingValidatorTest extends SharingValidatorTest {
 	}
 
 	@Test
-	public void testAcceptsInvitationWithContent() throws Exception {
+	public void testAcceptsInvitationWithText() throws Exception {
 		expectCreateForum(forumName);
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
-				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						content));
+				BdfList.of(INVITE.getValue(), previousMsgId, descriptor, text));
 		assertExpectedContext(context, previousMsgId);
 	}
 
 	@Test
-	public void testAcceptsInvitationWithNullContent() throws Exception {
+	public void testAcceptsInvitationWithNullText() throws Exception {
 		expectCreateForum(forumName);
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
@@ -137,14 +135,14 @@ public class ForumSharingValidatorTest extends SharingValidatorTest {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsNonStringContent() throws Exception {
+	public void testRejectsNonStringText() throws Exception {
 		expectCreateForum(forumName);
 		validator.validateMessage(message, group,
 				BdfList.of(INVITE.getValue(), previousMsgId, descriptor, 123));
 	}
 
 	@Test
-	public void testAcceptsMinLengthContent() throws Exception {
+	public void testAcceptsMinLengthText() throws Exception {
 		expectCreateForum(forumName);
 		expectEncodeMetadata(INVITE);
 		BdfMessageContext context = validator.validateMessage(message, group,
@@ -153,13 +151,12 @@ public class ForumSharingValidatorTest extends SharingValidatorTest {
 	}
 
 	@Test(expected = FormatException.class)
-	public void testRejectsTooLongContent() throws Exception {
-		String invalidContent =
-				getRandomString(MAX_INVITATION_MESSAGE_LENGTH + 1);
+	public void testRejectsTooLongText() throws Exception {
+		String invalidText = getRandomString(MAX_INVITATION_TEXT_LENGTH + 1);
 		expectCreateForum(forumName);
 		validator.validateMessage(message, group,
 				BdfList.of(INVITE.getValue(), previousMsgId, descriptor,
-						invalidContent));
+						invalidText));
 	}
 
 	private void expectCreateForum(String name) {
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/BlogControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/BlogControllerImpl.kt
index 5f1dc01420a135f64ac5854c1f8012ed2d5ab495..87e4debc6db865d9dfdb7dd2233f84687529f849 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/BlogControllerImpl.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/BlogControllerImpl.kt
@@ -4,8 +4,8 @@ import io.javalin.BadRequestResponse
 import io.javalin.Context
 import org.briarproject.bramble.api.identity.IdentityManager
 import org.briarproject.bramble.api.system.Clock
-import org.briarproject.bramble.util.StringUtils
-import org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH
+import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
+import org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH
 import org.briarproject.briar.api.blog.BlogManager
 import org.briarproject.briar.api.blog.BlogPostFactory
 import org.briarproject.briar.headless.getFromJson
@@ -29,15 +29,15 @@ constructor(
             .flatMap { blog -> blogManager.getPostHeaders(blog.id) }
             .asSequence()
             .sortedBy { it.timeReceived }
-            .map { header -> header.output(blogManager.getPostBody(header.id)) }
+            .map { header -> header.output(blogManager.getPostText(header.id)) }
             .toList()
         return ctx.json(posts)
     }
 
     override fun createPost(ctx: Context): Context {
         val text = ctx.getFromJson("text")
-        if (StringUtils.utf8IsTooLong(text, MAX_BLOG_POST_BODY_LENGTH))
-            throw BadRequestResponse("Too long blog post text")
+        if (utf8IsTooLong(text, MAX_BLOG_POST_TEXT_LENGTH))
+            throw BadRequestResponse("Blog post text is too long")
 
         val author = identityManager.localAuthor
         val blog = blogManager.getPersonalBlog(author)
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/OutputBlogPost.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/OutputBlogPost.kt
index 65d3f1296c39b33279f47361d655b02bbec041ae..0a8b2ccc737f78d2d537407014bfbd8afdba0a79 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/OutputBlogPost.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/blogs/OutputBlogPost.kt
@@ -5,8 +5,8 @@ import org.briarproject.briar.api.blog.BlogPostHeader
 import org.briarproject.briar.api.blog.MessageType
 import org.briarproject.briar.headless.json.JsonDict
 
-internal fun BlogPostHeader.output(body: String) = JsonDict(
-        "text" to body,
+internal fun BlogPostHeader.output(text: String) = JsonDict(
+        "text" to text,
         "author" to author.output(),
         "authorStatus" to authorStatus.output(),
         "type" to type.output(),
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/event/OutputEvent.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/event/OutputEvent.kt
index dc68c5c93441495668c3796c01d1e0cda61ba64c..cda92ebd1fe05f9989eceb04f62eecd2ab31c59a 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/event/OutputEvent.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/event/OutputEvent.kt
@@ -9,5 +9,5 @@ internal class OutputEvent(val name: String, val data: Any) {
     val type = "event"
 }
 
-internal fun PrivateMessageReceivedEvent<*>.output(body: String) =
-    messageHeader.output(contactId, body)
+internal fun PrivateMessageReceivedEvent<*>.output(text: String) =
+    messageHeader.output(contactId, text)
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/forums/ForumControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/forums/ForumControllerImpl.kt
index af1ab391ae3b18ada237d2bb76d01844a064dc5f..d57ed4f0c614ed116377ebf99c5c234cc0f79eef 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/forums/ForumControllerImpl.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/forums/ForumControllerImpl.kt
@@ -2,7 +2,7 @@ package org.briarproject.briar.headless.forums
 
 import io.javalin.BadRequestResponse
 import io.javalin.Context
-import org.briarproject.bramble.util.StringUtils
+import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
 import org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH
 import org.briarproject.briar.api.forum.ForumManager
 import org.briarproject.briar.headless.getFromJson
@@ -22,7 +22,7 @@ constructor(private val forumManager: ForumManager) : ForumController {
 
     override fun create(ctx: Context): Context {
         val name = ctx.getFromJson("name")
-        if (StringUtils.utf8IsTooLong(name, MAX_FORUM_NAME_LENGTH))
+        if (utf8IsTooLong(name, MAX_FORUM_NAME_LENGTH))
             throw BadRequestResponse("Forum name is too long")
         return ctx.json(forumManager.addForum(name).output())
     }
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt
index 6fb20b682520a42747b2faa37f58920f88795245..cecd345d763af2c2a12c63f9abbaf5e92778388b 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt
@@ -19,7 +19,7 @@ import org.briarproject.briar.api.forum.ForumInvitationResponse
 import org.briarproject.briar.api.introduction.IntroductionRequest
 import org.briarproject.briar.api.introduction.IntroductionResponse
 import org.briarproject.briar.api.messaging.*
-import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH
+import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH
 import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent
 import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
 import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
@@ -61,8 +61,8 @@ constructor(
         val contact = getContact(ctx)
 
         val message = ctx.getFromJson("text")
-        if (utf8IsTooLong(message, MAX_PRIVATE_MESSAGE_BODY_LENGTH))
-            throw BadRequestResponse("Message text too large")
+        if (utf8IsTooLong(message, MAX_PRIVATE_MESSAGE_TEXT_LENGTH))
+            throw BadRequestResponse("Message text is too long")
 
         val group = messagingManager.getContactGroup(contact)
         val now = clock.currentTimeMillis()
@@ -75,8 +75,8 @@ constructor(
     override fun eventOccurred(e: Event) {
         when (e) {
             is PrivateMessageReceivedEvent<*> -> dbExecutor.execute {
-                val body = messagingManager.getMessageBody(e.messageHeader.id)
-                webSocketController.sendEvent(EVENT_PRIVATE_MESSAGE, e.output(body))
+                val text = messagingManager.getMessageText(e.messageHeader.id)
+                webSocketController.sendEvent(EVENT_PRIVATE_MESSAGE, e.output(text))
             }
         }
     }
@@ -103,7 +103,7 @@ private class JsonVisitor(
 ) : PrivateMessageVisitor<JsonDict> {
 
     override fun visitPrivateMessageHeader(h: PrivateMessageHeader) =
-        h.output(contactId, messagingManager.getMessageBody(h.id))
+        h.output(contactId, messagingManager.getMessageText(h.id))
 
     override fun visitBlogInvitationRequest(r: BlogInvitationRequest) = r.output(contactId)
 
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt
index dcefdc13e4791789bf503ea903a9a41c422f8fff..65748015c4102b13af67098e6efd95decd34893d 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateMessage.kt
@@ -17,16 +17,16 @@ internal fun PrivateMessageHeader.output(contactId: ContactId) = JsonDict(
     "groupId" to groupId.bytes
 )
 
-internal fun PrivateMessageHeader.output(contactId: ContactId, body: String?): JsonDict {
+internal fun PrivateMessageHeader.output(contactId: ContactId, text: String?): JsonDict {
     val dict = output(contactId)
-    dict["text"] = body
+    dict["text"] = text
     return dict
 }
 
 /**
  * Use only for outgoing messages that were just sent
  */
-internal fun PrivateMessage.output(contactId: ContactId, body: String) = JsonDict(
+internal fun PrivateMessage.output(contactId: ContactId, text: String) = JsonDict(
     "type" to "PrivateMessage",
     "contactId" to contactId.int,
     "timestamp" to message.timestamp,
@@ -36,5 +36,5 @@ internal fun PrivateMessage.output(contactId: ContactId, body: String) = JsonDic
     "local" to true,
     "id" to message.id.bytes,
     "groupId" to message.groupId.bytes,
-    "text" to body
+    "text" to text
 )
diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt
index 2e956f6275885c467a41e31e5c3b67106454c244..d7762d52c9a28b98f1cae42365672a120820e47a 100644
--- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt
+++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputPrivateRequest.kt
@@ -11,7 +11,7 @@ import org.briarproject.briar.api.sharing.InvitationRequest
 import org.briarproject.briar.headless.json.JsonDict
 
 internal fun PrivateRequest<*>.output(contactId: ContactId): JsonDict {
-    val dict = (this as PrivateMessageHeader).output(contactId, message)
+    val dict = (this as PrivateMessageHeader).output(contactId, text)
     dict.putAll(
         "sessionId" to sessionId.bytes,
         "name" to name,
diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/ControllerTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/ControllerTest.kt
index b0a27244e54fd6d9e2d35c299c9b106e134a4250..56d3fed27b3256f5d013de023d6163b7e2a4c4be 100644
--- a/briar-headless/src/test/java/org/briarproject/briar/headless/ControllerTest.kt
+++ b/briar-headless/src/test/java/org/briarproject/briar/headless/ControllerTest.kt
@@ -35,7 +35,7 @@ abstract class ControllerTest {
     protected val localAuthor: LocalAuthor = getLocalAuthor()
     protected val contact = Contact(ContactId(1), author, localAuthor.id, true, true)
     protected val message: Message = getMessage(group.id)
-    protected val body: String = getRandomString(5)
+    protected val text: String = getRandomString(5)
     protected val timestamp = 42L
 
     protected fun assertJsonEquals(json: String, obj: Any) {
diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/blogs/BlogControllerTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/blogs/BlogControllerTest.kt
index 48a07025d5dae967602892aaac360a0536eb8834..3390ee00cf337473970c58fc15fc9200ec7d0a0d 100644
--- a/briar-headless/src/test/java/org/briarproject/briar/headless/blogs/BlogControllerTest.kt
+++ b/briar-headless/src/test/java/org/briarproject/briar/headless/blogs/BlogControllerTest.kt
@@ -11,7 +11,7 @@ import org.briarproject.bramble.api.sync.MessageId
 import org.briarproject.bramble.identity.output
 import org.briarproject.bramble.util.StringUtils.getRandomString
 import org.briarproject.briar.api.blog.*
-import org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_BODY_LENGTH
+import org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_POST_TEXT_LENGTH
 import org.briarproject.briar.api.blog.MessageType.POST
 import org.briarproject.briar.headless.ControllerTest
 import org.junit.jupiter.api.Assertions.assertThrows
@@ -38,7 +38,7 @@ internal class BlogControllerTest : ControllerTest() {
     fun testCreate() {
         val post = BlogPost(message, null, localAuthor)
 
-        every { ctx.body() } returns """{"text": "$body"}"""
+        every { ctx.body() } returns """{"text": "$text"}"""
         every { identityManager.localAuthor } returns localAuthor
         every { blogManager.getPersonalBlog(localAuthor) } returns blog
         every { clock.currentTimeMillis() } returns message.timestamp
@@ -48,12 +48,12 @@ internal class BlogControllerTest : ControllerTest() {
                 message.timestamp,
                 parentId,
                 localAuthor,
-                body
+                text
             )
         } returns post
         every { blogManager.addLocalPost(post) } just Runs
         every { blogManager.getPostHeader(post.message.groupId, post.message.id) } returns header
-        every { ctx.json(header.output(body)) } returns ctx
+        every { ctx.json(header.output(text)) } returns ctx
 
         controller.createPost(ctx)
     }
@@ -74,7 +74,7 @@ internal class BlogControllerTest : ControllerTest() {
 
     @Test
     fun testCreateTooLongText() {
-        every { ctx.body() } returns """{"text": "${getRandomString(MAX_BLOG_POST_BODY_LENGTH + 1)}"}"""
+        every { ctx.body() } returns """{"text": "${getRandomString(MAX_BLOG_POST_TEXT_LENGTH + 1)}"}"""
 
         assertThrows(BadRequestResponse::class.java) { controller.createPost(ctx) }
     }
@@ -83,8 +83,8 @@ internal class BlogControllerTest : ControllerTest() {
     fun testList() {
         every { blogManager.blogs } returns listOf(blog)
         every { blogManager.getPostHeaders(group.id) } returns listOf(header)
-        every { blogManager.getPostBody(message.id) } returns body
-        every { ctx.json(listOf(header.output(body))) } returns ctx
+        every { blogManager.getPostText(message.id) } returns text
+        every { ctx.json(listOf(header.output(text))) } returns ctx
 
         controller.listPosts(ctx)
     }
@@ -102,7 +102,7 @@ internal class BlogControllerTest : ControllerTest() {
     fun testOutputBlogPost() {
         val json = """
             {
-                "text": "$body",
+                "text": "$text",
                 "author": ${toJson(author.output())},
                 "authorStatus": "ourselves",
                 "type": "post",
@@ -114,7 +114,7 @@ internal class BlogControllerTest : ControllerTest() {
                 "timestampReceived": $timestamp
             }
         """
-        assertJsonEquals(json, header.output(body))
+        assertJsonEquals(json, header.output(text))
     }
 
 }
diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/event/WebSocketControllerTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/event/WebSocketControllerTest.kt
index 53f7e5eb9e5ea822a66d6d667115e0cb2ae98236..72c803bff3a9e6109ef1e1b466b8f3a012db7626 100644
--- a/briar-headless/src/test/java/org/briarproject/briar/headless/event/WebSocketControllerTest.kt
+++ b/briar-headless/src/test/java/org/briarproject/briar/headless/event/WebSocketControllerTest.kt
@@ -23,7 +23,7 @@ internal class WebSocketControllerTest : ControllerTest() {
     private val header =
         PrivateMessageHeader(message.id, group.id, timestamp, true, true, true, true)
     private val event = PrivateMessageReceivedEvent(header, contact.id)
-    private val outputEvent = OutputEvent(EVENT_PRIVATE_MESSAGE, event.output(body))
+    private val outputEvent = OutputEvent(EVENT_PRIVATE_MESSAGE, event.output(text))
 
     @Test
     fun testSendEvent() {
@@ -32,7 +32,7 @@ internal class WebSocketControllerTest : ControllerTest() {
         every { session1.send(capture(slot)) } just Runs
 
         controller.sessions.add(session1)
-        controller.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(body))
+        controller.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(text))
 
         assertJsonEquals(slot.captured, outputEvent)
     }
@@ -55,7 +55,7 @@ internal class WebSocketControllerTest : ControllerTest() {
 
         controller.sessions.add(session1)
         controller.sessions.add(session2)
-        controller.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(body))
+        controller.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(text))
 
         verify { session2.send(slot.captured) }
     }
@@ -66,7 +66,7 @@ internal class WebSocketControllerTest : ControllerTest() {
         {
             "type": "event",
             "name": "PrivateMessageReceivedEvent",
-            "data": ${toJson(header.output(contact.id, body))}
+            "data": ${toJson(header.output(contact.id, text))}
         }
         """
         assertJsonEquals(json, outputEvent)
diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt
index 83e04523c9295b0aa5d6e0ded0ea48b8cf864614..99488b9a17b0eb3db1b40944e228cd60f7b38ad6 100644
--- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt
+++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt
@@ -13,7 +13,7 @@ import org.briarproject.bramble.util.StringUtils.getRandomString
 import org.briarproject.briar.api.client.SessionId
 import org.briarproject.briar.api.introduction.IntroductionRequest
 import org.briarproject.briar.api.messaging.*
-import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_BODY_LENGTH
+import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH
 import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent
 import org.briarproject.briar.headless.ControllerTest
 import org.briarproject.briar.headless.event.WebSocketController
@@ -50,8 +50,8 @@ internal class MessagingControllerImplTest : ControllerTest() {
     fun list() {
         expectGetContact()
         every { conversationManager.getMessageHeaders(contact.id) } returns listOf(header)
-        every { messagingManager.getMessageBody(message.id) } returns body
-        every { ctx.json(listOf(header.output(contact.id, body))) } returns ctx
+        every { messagingManager.getMessageText(message.id) } returns text
+        every { ctx.json(listOf(header.output(contact.id, text))) } returns ctx
 
         controller.list(ctx)
     }
@@ -59,7 +59,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
     @Test
     fun listIntroductionRequest() {
         val request = IntroductionRequest(
-            message.id, group.id, timestamp, true, true, false, true, sessionId, author, body,
+            message.id, group.id, timestamp, true, true, false, true, sessionId, author, text,
             false, false
         )
 
@@ -95,14 +95,14 @@ internal class MessagingControllerImplTest : ControllerTest() {
         val slot = CapturingSlot<JsonDict>()
 
         expectGetContact()
-        every { ctx.body() } returns """{"text": "$body"}"""
+        every { ctx.body() } returns """{"text": "$text"}"""
         every { messagingManager.getContactGroup(contact) } returns group
         every { clock.currentTimeMillis() } returns timestamp
         every {
             privateMessageFactory.createPrivateMessage(
                 group.id,
                 timestamp,
-                body
+                text
             )
         } returns privateMessage
         every { messagingManager.addLocalMessage(privateMessage) } just runs
@@ -110,7 +110,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
 
         controller.write(ctx)
 
-        assertEquals(privateMessage.output(contact.id, body), slot.captured)
+        assertEquals(privateMessage.output(contact.id, text), slot.captured)
     }
 
     @Test
@@ -124,7 +124,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
     }
 
     @Test
-    fun writeNonexistentBody() {
+    fun writeNonexistentText() {
         expectGetContact()
         every { ctx.body() } returns """{"foo": "bar"}"""
 
@@ -132,7 +132,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
     }
 
     @Test
-    fun writeEmptyBody() {
+    fun writeEmptyText() {
         expectGetContact()
         every { ctx.body() } returns """{"text": ""}"""
 
@@ -140,9 +140,9 @@ internal class MessagingControllerImplTest : ControllerTest() {
     }
 
     @Test
-    fun writeTooLongBody() {
+    fun writeTooLongText() {
         expectGetContact()
-        every { ctx.body() } returns """{"text": "${getRandomString(MAX_PRIVATE_MESSAGE_BODY_LENGTH + 1)}"}"""
+        every { ctx.body() } returns """{"text": "${getRandomString(MAX_PRIVATE_MESSAGE_TEXT_LENGTH + 1)}"}"""
 
         assertThrows(BadRequestResponse::class.java) { controller.write(ctx) }
     }
@@ -151,8 +151,8 @@ internal class MessagingControllerImplTest : ControllerTest() {
     fun privateMessageEvent() {
         val event = PrivateMessageReceivedEvent(header, contact.id)
 
-        every { messagingManager.getMessageBody(message.id) } returns body
-        every { webSocketController.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(body)) } just runs
+        every { messagingManager.getMessageText(message.id) } returns text
+        every { webSocketController.sendEvent(EVENT_PRIVATE_MESSAGE, event.output(text)) } just runs
 
         controller.eventOccurred(event)
     }
@@ -161,7 +161,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
     fun testOutputPrivateMessageHeader() {
         val json = """
             {
-                "text": "$body",
+                "text": "$text",
                 "type": "PrivateMessage",
                 "timestamp": $timestamp,
                 "groupId": ${toJson(header.groupId.bytes)},
@@ -173,14 +173,14 @@ internal class MessagingControllerImplTest : ControllerTest() {
                 "id": ${toJson(header.id.bytes)}
             }
         """
-        assertJsonEquals(json, header.output(contact.id, body))
+        assertJsonEquals(json, header.output(contact.id, text))
     }
 
     @Test
     fun testOutputPrivateMessage() {
         val json = """
             {
-                "text": "$body",
+                "text": "$text",
                 "type": "PrivateMessage",
                 "timestamp": ${message.timestamp},
                 "groupId": ${toJson(message.groupId.bytes)},
@@ -192,11 +192,11 @@ internal class MessagingControllerImplTest : ControllerTest() {
                 "id": ${toJson(message.id.bytes)}
             }
         """
-        assertJsonEquals(json, privateMessage.output(contact.id, body))
+        assertJsonEquals(json, privateMessage.output(contact.id, text))
     }
 
     @Test
-    fun testIntroductionRequestWithEmptyBody() {
+    fun testIntroductionRequestWithNullText() {
         val request = IntroductionRequest(
             message.id, group.id, timestamp, true, true, false, true, sessionId, author, null,
             false, false