diff --git a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
index 1edbd2d2a08f86a59102b9c1bc9b9ebcd6a59441..7f9298089cf30789cc3e0efa486453b565e784d4 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
@@ -227,10 +227,11 @@ public class ContactListActivity extends BriarActivity
 			final Collection<PrivateMessageHeader> headers) {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				ContactListItem item = adapter.findItem(c);
+				int position = adapter.findItemPosition(c);
+				ContactListItem item = adapter.getItem(position);
 				if (item != null) {
 					item.setHeaders(headers);
-					adapter.notifyDataSetChanged();
+					adapter.updateItem(position, item);
 				}
 			}
 		});
@@ -255,10 +256,11 @@ public class ContactListActivity extends BriarActivity
 	private void setConnected(final ContactId c, final boolean connected) {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				ContactListItem item = adapter.findItem(c);
+				int position = adapter.findItemPosition(c);
+				ContactListItem item = adapter.getItem(position);
 				if (item != null) {
 					item.setConnected(connected);
-					adapter.notifyDataSetChanged();
+					adapter.notifyItemChanged(position);
 				}
 			}
 		});
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
index 7e511ea9a431c4e914bd4f8e88d5a245f78cb140..2abe5e6ffcf4d6d40c279c976108060c1e98624e 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
@@ -48,8 +48,13 @@ public class ContactListAdapter
 						@Override
 						public int compare(ContactListItem c1,
 								ContactListItem c2) {
-							return (int) (c1.getTimestamp() -
-									c2.getTimestamp());
+							// sort items by time
+							// and do not take unread messages into account
+							long time1 = c1.getTimestamp();
+							long time2 = c2.getTimestamp();
+							if (time1 < time2) return 1;
+							if (time1 > time2) return -1;
+							return 0;
 						}
 
 						@Override
@@ -145,6 +150,10 @@ public class ContactListAdapter
 		return contacts.get(position);
 	}
 
+	public void updateItem(int position, ContactListItem item) {
+		contacts.updateItemAt(position, item);
+	}
+
 	public ContactListItem findItem(ContactId c) {
 		int count = getItemCount();
 		for (int i = 0; i < count; i++) {
@@ -154,6 +163,15 @@ public class ContactListAdapter
 		return null; // Not found
 	}
 
+	public int findItemPosition(ContactId c) {
+		int count = getItemCount();
+		for (int i = 0; i < count; i++) {
+			ContactListItem item = getItem(i);
+			if (item.getContact().getId().equals(c)) return i;
+		}
+		return -1; // Not found
+	}
+
 	public void addAll(final List<ContactListItem> contacts) {
 		this.contacts.addAll(contacts);
 	}
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java b/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java
deleted file mode 100644
index db41a3ef52be317d5cc77df42369b448c023435b..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.briarproject.android.contact;
-
-import java.util.Comparator;
-
-class ContactListItemComparator implements Comparator<ContactListItem> {
-
-	static final ContactListItemComparator INSTANCE =
-			new ContactListItemComparator();
-
-	public int compare(ContactListItem a, ContactListItem b) {
-		String aName = a.getContact().getAuthor().getName();
-		String bName = b.getContact().getAuthor().getName();
-		return String.CASE_INSENSITIVE_ORDER.compare(aName, bName);
-	}
-}