diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml
index 18b68762941190ca4fd64fa65ec023047cd0a2b3..476229541dce9930b1f0b791d91df133d86c4b6c 100644
--- a/briar-android/AndroidManifest.xml
+++ b/briar-android/AndroidManifest.xml
@@ -105,25 +105,6 @@
 				android:value=".android.contact.ContactListActivity"
 			/>
 		</activity>
-		<activity
-			android:name=".android.contact.ReadPrivateMessageActivity"
-			android:label="@string/app_name"
-			android:parentActivityName=".android.contact.ContactListActivity" >
-			<meta-data
-				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.contact.ContactListActivity"
-			/>
-		</activity>
-		<activity
-			android:name=".android.contact.WritePrivateMessageActivity"
-			android:label="@string/app_name"
-			android:windowSoftInputMode="stateVisible"
-			android:parentActivityName=".android.contact.ContactListActivity" >
-			<meta-data
-				android:name="android.support.PARENT_ACTIVITY"
-				android:value=".android.contact.ContactListActivity"
-			/>
-		</activity>
 		<activity
 			android:name=".android.forum.AvailableForumsActivity"
 			android:label="@string/available_forums_title"
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index e50540bc2982039a166cd8eb11c5f41608d46c6d..4b79ce4389c2e29951ba8b05f10b055fcab7c2f7 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -37,7 +37,6 @@ import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
 import org.briarproject.api.event.MessagesAckedEvent;
 import org.briarproject.api.event.MessagesSentEvent;
-import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.messaging.MessagingManager;
 import org.briarproject.api.messaging.PrivateConversation;
 import org.briarproject.api.messaging.PrivateMessageFactory;
@@ -67,14 +66,12 @@ import javax.inject.Inject;
 import static android.widget.Toast.LENGTH_SHORT;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.contact.ReadPrivateMessageActivity.RESULT_PREV_NEXT;
 import static org.briarproject.api.messaging.PrivateMessageHeader.Status.DELIVERED;
 import static org.briarproject.api.messaging.PrivateMessageHeader.Status.SENT;
 
 public class ConversationActivity extends BriarActivity
 		implements EventListener, OnClickListener {
 
-	private static final int REQUEST_READ = 2;
 	private static final Logger LOG =
 			Logger.getLogger(ConversationActivity.class.getName());
 
@@ -96,7 +93,6 @@ public class ConversationActivity extends BriarActivity
 	private volatile String contactName = null;
 	private volatile GroupId groupId = null;
 	private volatile PrivateConversation conversation = null;
-	private volatile AuthorId localAuthorId = null;
 	private volatile boolean connected;
 
 	@Override
@@ -108,10 +104,6 @@ public class ConversationActivity extends BriarActivity
 		if (id == -1) throw new IllegalStateException();
 		contactId = new ContactId(id);
 
-		Intent data = new Intent();
-		data.putExtra("briar.CONTACT_ID", id);
-		setResult(RESULT_OK, data);
-
 		setContentView(R.layout.activity_conversation);
 
 		adapter = new ConversationAdapter(this);
@@ -141,23 +133,13 @@ public class ConversationActivity extends BriarActivity
 		if (isFinishing()) markMessagesRead();
 	}
 
-	@Override
-	protected void onActivityResult(int request, int result, Intent data) {
-		super.onActivityResult(request, result, data);
-		if (request == REQUEST_READ && result == RESULT_PREV_NEXT) {
-			int position = data.getIntExtra("briar.POSITION", -1);
-			if (position >= 0 && position < adapter.getItemCount())
-				displayMessage(position);
-		}
-	}
-
 	@Override
 	public boolean onCreateOptionsMenu(Menu menu) {
 		// Inflate the menu items for use in the action bar
 		MenuInflater inflater = getMenuInflater();
 		inflater.inflate(R.menu.contact_actions, menu);
 
-		// adapt icon color to dark action bar
+		// Adapt icon color to dark action bar
 		menu.findItem(R.id.action_social_remove_person).getIcon().setColorFilter(
 				getResources().getColor(R.color.action_bar_text),
 				PorterDuff.Mode.SRC_IN);
@@ -171,7 +153,6 @@ public class ConversationActivity extends BriarActivity
 		switch (item.getItemId()) {
 			case R.id.action_social_remove_person:
 				askToRemoveContact();
-
 				return true;
 			default:
 				return super.onOptionsItemSelected(item);
@@ -185,7 +166,6 @@ public class ConversationActivity extends BriarActivity
 					long now = System.currentTimeMillis();
 					Contact contact = contactManager.getContact(contactId);
 					contactName = contact.getAuthor().getName();
-					localAuthorId = contact.getLocalAuthorId();
 					groupId = messagingManager.getConversationId(contactId);
 					conversation = messagingManager.getConversation(groupId);
 					connected = connectionRegistry.isConnected(contactId);
@@ -458,23 +438,6 @@ public class ConversationActivity extends BriarActivity
 		});
 	}
 
-	private void displayMessage(int position) {
-		ConversationItem item = adapter.getItem(position);
-		PrivateMessageHeader header = item.getHeader();
-		Intent i = new Intent(this, ReadPrivateMessageActivity.class);
-		i.putExtra("briar.CONTACT_ID", contactId.getInt());
-		i.putExtra("briar.CONTACT_NAME", contactName);
-		i.putExtra("briar.GROUP_ID", groupId.getBytes());
-		i.putExtra("briar.LOCAL_AUTHOR_ID", localAuthorId.getBytes());
-		i.putExtra("briar.AUTHOR_NAME", header.getAuthor().getName());
-		i.putExtra("briar.MESSAGE_ID", header.getId().getBytes());
-		i.putExtra("briar.CONTENT_TYPE", header.getContentType());
-		i.putExtra("briar.TIMESTAMP", header.getTimestamp());
-		i.putExtra("briar.MIN_TIMESTAMP", getMinTimestampForNewMessage());
-		i.putExtra("briar.POSITION", position);
-		startActivityForResult(i, REQUEST_READ);
-	}
-
 	private void askToRemoveContact() {
 		runOnUiThread(new Runnable() {
 			@Override
@@ -523,10 +486,8 @@ public class ConversationActivity extends BriarActivity
 				String deleted = getString(R.string.contact_deleted_toast);
 				Toast.makeText(ConversationActivity.this, deleted, LENGTH_SHORT)
 						.show();
-
 				finish();
 			}
 		});
 	}
-
 }
diff --git a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
deleted file mode 100644
index 01ba0030336eb2ae066eca735caa921fe5b447bf..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.briarproject.android.contact;
-
-import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.text.format.DateUtils;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
-
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.util.AuthorView;
-import org.briarproject.android.util.ElasticHorizontalSpace;
-import org.briarproject.android.util.HorizontalBorder;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchMessageException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.util.StringUtils;
-
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_VERTICAL;
-import static android.widget.LinearLayout.HORIZONTAL;
-import static android.widget.LinearLayout.VERTICAL;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
-import static org.briarproject.api.identity.Author.Status.VERIFIED;
-
-@Deprecated
-public class ReadPrivateMessageActivity extends BriarActivity
-implements OnClickListener {
-
-	static final int RESULT_REPLY = RESULT_FIRST_USER;
-	static final int RESULT_PREV_NEXT = RESULT_FIRST_USER + 1;
-
-	private static final Logger LOG =
-			Logger.getLogger(ReadPrivateMessageActivity.class.getName());
-
-	private String contactName = null;
-	private AuthorId localAuthorId = null;
-	private long timestamp = -1, minTimestamp = -1;
-	private ImageButton prevButton = null, nextButton = null;
-	private ImageButton replyButton = null;
-	private TextView content = null;
-	private int position = -1;
-
-	// Fields that are accessed from background threads must be volatile
-	@Inject private volatile MessagingManager messagingManager;
-	private volatile MessageId messageId = null;
-	private volatile GroupId groupId = null;
-
-	@Override
-	public void onCreate(Bundle state) {
-		super.onCreate(state);
-
-		Intent i = getIntent();
-		contactName = i.getStringExtra("briar.CONTACT_NAME");
-		if (contactName == null) throw new IllegalStateException();
-		setTitle(contactName);
-		byte[] b = i.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
-		if (b == null) throw new IllegalStateException();
-		localAuthorId = new AuthorId(b);
-		String authorName = i.getStringExtra("briar.AUTHOR_NAME");
-		if (authorName == null) throw new IllegalStateException();
-		b = i.getByteArrayExtra("briar.MESSAGE_ID");
-		if (b == null) throw new IllegalStateException();
-		messageId = new MessageId(b);
-		b = i.getByteArrayExtra("briar.GROUP_ID");
-		if (b == null) throw new IllegalStateException();
-		groupId = new GroupId(b);
-		String contentType = i.getStringExtra("briar.CONTENT_TYPE");
-		if (contentType == null) throw new IllegalStateException();
-		timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
-		if (timestamp == -1) throw new IllegalStateException();
-		minTimestamp = i.getLongExtra("briar.MIN_TIMESTAMP", -1);
-		if (minTimestamp == -1) throw new IllegalStateException();
-		position = i.getIntExtra("briar.POSITION", -1);
-		if (position == -1) throw new IllegalStateException();
-
-		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(MATCH_WRAP);
-		layout.setOrientation(VERTICAL);
-
-		ScrollView scrollView = new ScrollView(this);
-		scrollView.setLayoutParams(MATCH_WRAP_1);
-
-		LinearLayout message = new LinearLayout(this);
-		message.setOrientation(VERTICAL);
-
-		LinearLayout header = new LinearLayout(this);
-		header.setLayoutParams(MATCH_WRAP);
-		header.setOrientation(HORIZONTAL);
-		header.setGravity(CENTER_VERTICAL);
-
-		AuthorView author = new AuthorView(this);
-		author.setLayoutParams(WRAP_WRAP_1);
-		author.init(authorName, VERIFIED);
-		header.addView(author);
-
-		int pad = LayoutUtils.getPadding(this);
-
-		TextView date = new TextView(this);
-		date.setPadding(0, pad, pad, pad);
-		date.setText(DateUtils.getRelativeTimeSpanString(this, timestamp));
-		header.addView(date);
-		message.addView(header);
-
-		if (contentType.equals("text/plain")) {
-			// Load and display the message body
-			content = new TextView(this);
-			content.setPadding(pad, 0, pad, pad);
-			message.addView(content);
-			loadMessageBody();
-		}
-		scrollView.addView(message);
-		layout.addView(scrollView);
-
-		layout.addView(new HorizontalBorder(this));
-
-		LinearLayout footer = new LinearLayout(this);
-		footer.setLayoutParams(MATCH_WRAP);
-		footer.setOrientation(HORIZONTAL);
-		footer.setGravity(CENTER);
-		Resources res = getResources();
-		footer.setBackgroundColor(res.getColor(R.color.button_bar_background));
-
-		prevButton = new ImageButton(this);
-		prevButton.setBackgroundResource(0);
-		prevButton.setImageResource(R.drawable.navigation_previous_item);
-		prevButton.setOnClickListener(this);
-		footer.addView(prevButton);
-		footer.addView(new ElasticHorizontalSpace(this));
-
-		nextButton = new ImageButton(this);
-		nextButton.setBackgroundResource(0);
-		nextButton.setImageResource(R.drawable.navigation_next_item);
-		nextButton.setOnClickListener(this);
-		footer.addView(nextButton);
-		footer.addView(new ElasticHorizontalSpace(this));
-
-		replyButton = new ImageButton(this);
-		replyButton.setBackgroundResource(0);
-		replyButton.setImageResource(R.drawable.social_reply);
-		replyButton.setOnClickListener(this);
-		footer.addView(replyButton);
-		layout.addView(footer);
-
-		setContentView(layout);
-	}
-
-	@Override
-	public void onPause() {
-		super.onPause();
-		if (isFinishing()) markMessageRead();
-	}
-
-	private void markMessageRead() {
-		runOnDbThread(new Runnable() {
-			public void run() {
-				try {
-					long now = System.currentTimeMillis();
-					messagingManager.setReadFlag(messageId, true);
-					long duration = System.currentTimeMillis() - now;
-					if (LOG.isLoggable(INFO))
-						LOG.info("Marking read took " + duration + " ms");
-				} catch (DbException e) {
-					if (LOG.isLoggable(WARNING))
-						LOG.log(WARNING, e.toString(), e);
-				}
-			}
-		});
-	}
-
-	private void loadMessageBody() {
-		runOnDbThread(new Runnable() {
-			public void run() {
-				try {
-					long now = System.currentTimeMillis();
-					byte[] body = messagingManager.getMessageBody(messageId);
-					long duration = System.currentTimeMillis() - now;
-					if (LOG.isLoggable(INFO))
-						LOG.info("Loading message took " + duration + " ms");
-					displayMessageBody(StringUtils.fromUtf8(body));
-				} catch (NoSuchMessageException e) {
-					finishOnUiThread();
-				} catch (DbException e) {
-					if (LOG.isLoggable(WARNING))
-						LOG.log(WARNING, e.toString(), e);
-				}
-			}
-		});
-	}
-
-	private void displayMessageBody(final String body) {
-		runOnUiThread(new Runnable() {
-			public void run() {
-				content.setText(body);
-			}
-		});
-	}
-
-	public void onClick(View view) {
-		if (view == prevButton) {
-			Intent i = new Intent();
-			i.putExtra("briar.POSITION", position - 1);
-			setResult(RESULT_PREV_NEXT, i);
-			finish();
-		} else if (view == nextButton) {
-			Intent i = new Intent();
-			i.putExtra("briar.POSITION", position + 1);
-			setResult(RESULT_PREV_NEXT, i);
-			finish();
-		} else if (view == replyButton) {
-			Intent i = new Intent(this, WritePrivateMessageActivity.class);
-			i.putExtra("briar.CONTACT_NAME", contactName);
-			i.putExtra("briar.GROUP_ID", groupId.getBytes());
-			i.putExtra("briar.LOCAL_AUTHOR_ID",
-					localAuthorId.getBytes());
-			i.putExtra("briar.PARENT_ID", messageId.getBytes());
-			i.putExtra("briar.MIN_TIMESTAMP", minTimestamp);
-			startActivity(i);
-			setResult(RESULT_REPLY);
-			finish();
-		}
-	}
-}
diff --git a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
deleted file mode 100644
index 74623463e43d026a5aa4d332bf6034d284eb6aba..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
+++ /dev/null
@@ -1,224 +0,0 @@
-package org.briarproject.android.contact;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.InputType;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.util.CommonLayoutParams;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.db.DbException;
-import org.briarproject.api.db.NoSuchContactException;
-import org.briarproject.api.db.NoSuchSubscriptionException;
-import org.briarproject.api.identity.AuthorId;
-import org.briarproject.api.identity.IdentityManager;
-import org.briarproject.api.identity.LocalAuthor;
-import org.briarproject.api.messaging.MessagingManager;
-import org.briarproject.api.messaging.PrivateConversation;
-import org.briarproject.api.messaging.PrivateMessageFactory;
-import org.briarproject.api.sync.GroupId;
-import org.briarproject.api.sync.Message;
-import org.briarproject.api.sync.MessageId;
-import org.briarproject.util.StringUtils;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import static android.text.InputType.TYPE_CLASS_TEXT;
-import static android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
-import static android.text.TextUtils.TruncateAt.END;
-import static android.widget.LinearLayout.VERTICAL;
-import static android.widget.RelativeLayout.ALIGN_PARENT_LEFT;
-import static android.widget.RelativeLayout.ALIGN_PARENT_RIGHT;
-import static android.widget.RelativeLayout.CENTER_VERTICAL;
-import static android.widget.RelativeLayout.LEFT_OF;
-import static android.widget.Toast.LENGTH_LONG;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-
-public class WritePrivateMessageActivity extends BriarActivity
-implements OnClickListener {
-
-	private static final Logger LOG =
-			Logger.getLogger(WritePrivateMessageActivity.class.getName());
-
-	@Inject @CryptoExecutor private Executor cryptoExecutor;
-	private TextView from = null;
-	private ImageButton sendButton = null;
-	private EditText content = null;
-
-	// Fields that are accessed from background threads must be volatile
-	@Inject private volatile IdentityManager identityManager;
-	@Inject private volatile MessagingManager messagingManager;
-	@Inject private volatile PrivateMessageFactory privateMessageFactory;
-	private volatile GroupId groupId = null;
-	private volatile AuthorId localAuthorId = null;
-	private volatile MessageId parentId = null;
-	private volatile long minTimestamp = -1;
-	private volatile LocalAuthor localAuthor = null;
-	private volatile PrivateConversation conversation = null;
-
-	@Override
-	public void onCreate(Bundle state) {
-		super.onCreate(state);
-
-		Intent i = getIntent();
-		String contactName = i.getStringExtra("briar.CONTACT_NAME");
-		if (contactName == null) throw new IllegalStateException();
-		setTitle(contactName);
-		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
-		if (b == null) throw new IllegalStateException();
-		groupId = new GroupId(b);
-		b = i.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
-		if (b == null) throw new IllegalStateException();
-		minTimestamp = i.getLongExtra("briar.MIN_TIMESTAMP", -1);
-		if (minTimestamp == -1) throw new IllegalStateException();
-		localAuthorId = new AuthorId(b);
-		b = i.getByteArrayExtra("briar.PARENT_ID");
-		if (b != null) parentId = new MessageId(b);
-
-		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(MATCH_WRAP);
-		layout.setOrientation(VERTICAL);
-		int pad = LayoutUtils.getPadding(this);
-		layout.setPadding(pad, 0, pad, pad);
-
-		RelativeLayout header = new RelativeLayout(this);
-
-		from = new TextView(this);
-		from.setId(1);
-		from.setTextSize(18);
-		from.setSingleLine();
-		from.setEllipsize(END);
-		from.setPadding(0, 0, pad, 0);
-		from.setText(R.string.from);
-		RelativeLayout.LayoutParams leftOf = CommonLayoutParams.relative();
-		leftOf.addRule(ALIGN_PARENT_LEFT);
-		leftOf.addRule(CENTER_VERTICAL);
-		leftOf.addRule(LEFT_OF, 2);
-		header.addView(from, leftOf);
-
-		sendButton = new ImageButton(this);
-		sendButton.setId(2);
-		sendButton.setBackgroundResource(0);
-		sendButton.setImageResource(R.drawable.social_send_now);
-		sendButton.setEnabled(false); // Enabled after loading the conversation
-		sendButton.setOnClickListener(this);
-		RelativeLayout.LayoutParams right = CommonLayoutParams.relative();
-		right.addRule(ALIGN_PARENT_RIGHT);
-		right.addRule(CENTER_VERTICAL);
-		header.addView(sendButton, right);
-		layout.addView(header);
-
-		content = new EditText(this);
-		content.setId(3);
-		int inputType = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE
-				| TYPE_TEXT_FLAG_CAP_SENTENCES;
-		content.setInputType(inputType);
-		content.setHint(R.string.private_message_hint);
-		layout.addView(content);
-
-		setContentView(layout);
-	}
-
-	@Override
-	public void onResume() {
-		super.onResume();
-		if (localAuthor == null || conversation == null)
-			loadAuthorAndConversation();
-	}
-
-	private void loadAuthorAndConversation() {
-		runOnDbThread(new Runnable() {
-			public void run() {
-				try {
-					long now = System.currentTimeMillis();
-					localAuthor = identityManager.getLocalAuthor(localAuthorId);
-					conversation = messagingManager.getConversation(groupId);
-					long duration = System.currentTimeMillis() - now;
-					if (LOG.isLoggable(INFO))
-						LOG.info("Load took " + duration + " ms");
-					displayLocalAuthor();
-				} catch (NoSuchContactException e) {
-					finishOnUiThread();
-				} catch (NoSuchSubscriptionException e) {
-					finishOnUiThread();
-				} catch (DbException e) {
-					if (LOG.isLoggable(WARNING))
-						LOG.log(WARNING, e.toString(), e);
-				}
-			}
-		});
-	}
-
-	private void displayLocalAuthor() {
-		runOnUiThread(new Runnable() {
-			public void run() {
-				String format = getString(R.string.format_from);
-				String name = localAuthor.getName();
-				from.setText(String.format(format, name));
-				sendButton.setEnabled(true);
-			}
-		});
-	}
-
-	public void onClick(View view) {
-		String message = content.getText().toString();
-		if (message.equals("")) return;
-		createMessage(StringUtils.toUtf8(message));
-		Toast.makeText(this, R.string.message_sent_toast, LENGTH_LONG).show();
-		finish();
-	}
-
-	private void createMessage(final byte[] body) {
-		cryptoExecutor.execute(new Runnable() {
-			public void run() {
-				// Don't use an earlier timestamp than the newest message
-				long timestamp = System.currentTimeMillis();
-				timestamp = Math.max(timestamp, minTimestamp);
-				try {
-					Message m = privateMessageFactory.createPrivateMessage(
-							parentId, conversation, "text/plain", timestamp,
-							body);
-					storeMessage(m);
-				} catch (GeneralSecurityException e) {
-					throw new RuntimeException(e);
-				} catch (IOException e) {
-					throw new RuntimeException(e);
-				}
-			}
-		});
-	}
-
-	private void storeMessage(final Message m) {
-		runOnDbThread(new Runnable() {
-			public void run() {
-				try {
-					long now = System.currentTimeMillis();
-					messagingManager.addLocalMessage(m);
-					long duration = System.currentTimeMillis() - now;
-					if (LOG.isLoggable(INFO))
-						LOG.info("Storing message took " + duration + " ms");
-				} catch (DbException e) {
-					if (LOG.isLoggable(WARNING))
-						LOG.log(WARNING, e.toString(), e);
-				}
-			}
-		});
-	}
-}