diff --git a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
index be68f6b9b60d3fe85074073491424f5d6a86972a..895332d354d9340c9271ed7a60033e8eea395716 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
@@ -2,9 +2,11 @@ package org.briarproject.android.contact;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.Menu.NONE;
 import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
 import static android.widget.LinearLayout.VERTICAL;
+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.util.CommonLayoutParams.MATCH_MATCH;
@@ -41,19 +43,26 @@ import org.briarproject.api.transport.ConnectionRegistry;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.View.OnCreateContextMenuListener;
 import android.widget.AdapterView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 public class ContactListActivity extends BriarActivity
-implements OnClickListener, OnItemClickListener, EventListener,
-ConnectionListener {
+implements OnClickListener, OnItemClickListener, OnCreateContextMenuListener,
+EventListener, ConnectionListener {
 
+	private static final int MENU_ITEM_DELETE = 1;
 	private static final Logger LOG =
 			Logger.getLogger(ContactListActivity.class.getName());
 
@@ -88,6 +97,7 @@ ConnectionListener {
 		list.setLayoutParams(MATCH_WRAP_1);
 		list.setAdapter(adapter);
 		list.setOnItemClickListener(this);
+		list.setOnCreateContextMenuListener(this);
 		list.setVisibility(GONE);
 		layout.addView(list);
 
@@ -223,13 +233,45 @@ ConnectionListener {
 		startActivity(i);
 	}
 
+	@Override
+	public void onCreateContextMenu(ContextMenu menu, View view,
+			ContextMenu.ContextMenuInfo info) {
+		String delete = getString(R.string.delete_contact);
+		menu.add(NONE, MENU_ITEM_DELETE, NONE, delete);
+	}
+
+	@Override
+	public boolean onContextItemSelected(MenuItem menuItem) {
+		if(menuItem.getItemId() == MENU_ITEM_DELETE) {
+			ContextMenuInfo info = menuItem.getMenuInfo();
+			int position = ((AdapterContextMenuInfo) info).position;
+			ContactListItem item = adapter.getItem(position);
+			removeContact(item.getContact().getId());
+			String deleted = getString(R.string.contact_deleted_toast);
+			Toast.makeText(this, deleted, LENGTH_SHORT).show();
+		}
+		return true;
+	}
+
+	private void removeContact(final ContactId c) {
+		runOnDbThread(new Runnable() {
+			public void run() {
+				try {
+					db.removeContact(c);
+				} catch(DbException e) {
+					if(LOG.isLoggable(WARNING))
+						LOG.log(WARNING, e.toString(), e);
+				}
+			}
+		});
+	}
+
 	public void eventOccurred(Event e) {
 		if(e instanceof ContactAddedEvent) {
 			loadContacts();
 		} else if(e instanceof ContactRemovedEvent) {
-			// Reload the conversation, expecting NoSuchContactException
-			LOG.info("Contact removed, reloading");
-			reloadContact(((ContactRemovedEvent) e).getContactId());
+			LOG.info("Contact removed");
+			removeItem(((ContactRemovedEvent) e).getContactId());
 		} else if(e instanceof MessageAddedEvent) {
 			LOG.info("Message added, reloading");
 			ContactId source = ((MessageAddedEvent) e).getContactId();