diff --git a/briar b/briar
index 8a4fe7ca493285a136127f08e60303347d849cd2..85dc27ed77e8b1a94ce4bccf2e9dd0e4e9660e00 160000
--- a/briar
+++ b/briar
@@ -1 +1 @@
-Subproject commit 8a4fe7ca493285a136127f08e60303347d849cd2
+Subproject commit 85dc27ed77e8b1a94ce4bccf2e9dd0e4e9660e00
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
index 7d18451058b97330b16cdc3074fa6d918c3a496b..d169ac99ef21cfb9103a2be8feba887fda723b2b 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
@@ -2,7 +2,6 @@ package org.briarproject.briar.desktop.contact
 
 import org.briarproject.bramble.api.contact.Contact
 import org.briarproject.briar.api.client.MessageTracker
-import org.briarproject.briar.api.conversation.ConversationMessageHeader
 import kotlin.math.max
 
 data class ContactItem(
@@ -21,13 +20,12 @@ data class ContactItem(
             timestamp = groupCount.latestMsgTime
         )
 
-    fun updateFromMessageHeader(h: ConversationMessageHeader): ContactItem {
-        return copy(
+    fun updateTimestampAndUnread(timestamp: Long, read: Boolean): ContactItem =
+        copy(
             isEmpty = false,
-            unread = if (h.isRead) unread else unread + 1,
-            timestamp = max(h.timestamp, timestamp)
+            unread = if (read) unread else unread + 1,
+            timestamp = max(timestamp, this.timestamp)
         )
-    }
 
     fun updateIsConnected(c: Boolean): ContactItem {
         return copy(isConnected = c)
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
index 09029da0ca85838535c58f720027c940b8a6008f..6cd88d2945616bc263f7c851b6c575bc467dace8 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
@@ -11,8 +11,7 @@ import org.briarproject.bramble.api.contact.event.ContactAliasChangedEvent
 import org.briarproject.bramble.api.event.Event
 import org.briarproject.bramble.api.event.EventBus
 import org.briarproject.briar.api.conversation.ConversationManager
-import org.briarproject.briar.api.conversation.event.ConversationMessageReceivedEvent
-import org.briarproject.briar.desktop.conversation.ConversationMessageToBeSentEvent
+import org.briarproject.briar.api.conversation.event.ConversationMessageTrackedEvent
 import javax.inject.Inject
 
 class ContactListViewModel
@@ -67,13 +66,9 @@ constructor(
     override fun eventOccurred(e: Event?) {
         super.eventOccurred(e)
         when (e) {
-            is ConversationMessageReceivedEvent<*> -> {
-                LOG.info("Conversation message received, updating item")
-                updateItem(e.contactId) { it.updateFromMessageHeader(e.messageHeader) }
-            }
-            is ConversationMessageToBeSentEvent -> {
-                LOG.info("Conversation message added, updating item")
-                updateItem(e.contactId) { it.updateFromMessageHeader(e.messageHeader) }
+            is ConversationMessageTrackedEvent -> {
+                LOG.info { "Conversation message tracked, updating item" }
+                updateItem(e.contactId) { it.updateTimestampAndUnread(e.timestamp, e.read) }
             }
             // is AvatarUpdatedEvent -> {}
             is ContactAliasChangedEvent -> {
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationMessageToBeSentEvent.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationMessageToBeSentEvent.kt
deleted file mode 100644
index e79b0362858cb663877bbf919806ae176372f403..0000000000000000000000000000000000000000
--- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationMessageToBeSentEvent.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.briarproject.briar.desktop.conversation
-
-import org.briarproject.bramble.api.contact.ContactId
-import org.briarproject.bramble.api.event.Event
-import org.briarproject.briar.api.conversation.ConversationMessageHeader
-
-/**
- * An event that is broadcast when a new conversation message to be sent is added.
- */
-data class ConversationMessageToBeSentEvent(
-    val messageHeader: ConversationMessageHeader,
-    val contactId: ContactId
-) : Event()
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
index 3092b4e8a16519aa3413400a61eafa65fe3790f8..e157bf065fc5194d0894285f3f7df21f3211fc9e 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
@@ -101,7 +101,6 @@ constructor(
                 m.autoDeleteTimer
             )
             _messages.add(0, messageHeaderToItem(h))
-            eventBus.broadcast(ConversationMessageToBeSentEvent(h, _contactId.value!!))
         } catch (e: UnexpectedTimerException) {
             LOG.warn(e) {}
         } catch (e: DbException) {