diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
index 3888c516a8d1d22f94ca8b5b5d4d61737ec6b988..afbfcbf6dad2a8c744bbca395b963e781b200c85 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt
@@ -45,10 +45,7 @@ data class ContactItem(
     override val timestamp: Long,
     val avatar: ImageBitmap?,
 ) : ContactListItem {
-
-    data class Id(val id: ContactId) : ContactListItemId
-
-    override val wrapperId = Id(id)
+    override val uniqueId: ByteArray = ByteArray(4) { i -> (id.int shr (i * 8)).toByte() }
     override val displayName = getContactDisplayName(name, alias)
 
     constructor(
@@ -56,7 +53,7 @@ data class ContactItem(
         authorInfo: AuthorInfo,
         isConnected: Boolean,
         groupCount: MessageTracker.GroupCount,
-        avatar: ImageBitmap?
+        avatar: ImageBitmap?,
     ) : this(
         id = contact.id,
         authorId = contact.author.id,
@@ -96,7 +93,7 @@ fun loadContactItem(
     authorManager: AuthorManager,
     connectionRegistry: ConnectionRegistry,
     conversationManager: ConversationManager,
-    attachmentReader: AttachmentReader
+    attachmentReader: AttachmentReader,
 ): ContactItem {
     val authorInfo = authorManager.getAuthorInfo(txn, contact)
     return ContactItem(
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
index 61ecfb57f6234659881a1d8cfce989035ec14dfb..759db1864af83c247c9ac92e16cf68a17eede07e 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
@@ -157,7 +157,7 @@ fun ContactList(
                 ) {
                     items(
                         items = contactList,
-                        key = { item -> item.wrapperId },
+                        key = { item -> item.uniqueId },
                         contentType = { item -> item::class }
                     ) { item ->
                         ListItemView(
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt
index 76a3a924115239f4f99224bb868a7f57bf28af10..e9aab94218c17718266a84d563d7595999c3d92e 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt
@@ -21,7 +21,5 @@ package org.briarproject.briar.desktop.contact
 interface ContactListItem {
     val displayName: String
     val timestamp: Long
-    val wrapperId: ContactListItemId
+    val uniqueId: ByteArray
 }
-
-interface ContactListItemId
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
index 78a1934d843c807825e2acd350bee9a7e787f445..85ef4586a7b0249305085d3bc415535bff24f793 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt
@@ -81,7 +81,7 @@ constructor(
     private val _pendingContactList = mutableStateListOf<PendingContactItem>()
 
     private val _filterBy = mutableStateOf("")
-    private val _selectedContactId = mutableStateOf<ContactListItemId?>(null)
+    private val _selectedContactListItem = mutableStateOf<ContactListItem?>(null)
     private val _contactIdToBeRemoved = mutableStateOf<PendingContactId?>(null)
 
     // todo: check impact on performance due to reconstructing whole list on every change
@@ -97,13 +97,13 @@ constructor(
     }
 
     val filterBy = _filterBy.asState()
-    val selectedContactId = derivedStateOf {
+    val selectedContactListItem = derivedStateOf {
         // reset selected contact to null if not part of list after filtering
-        val wrapperId = _selectedContactId.value
-        if (wrapperId == null || combinedContactList.value.find { it.wrapperId == wrapperId } != null) {
-            wrapperId
+        val item = _selectedContactListItem.value
+        if (item == null || combinedContactList.value.find { it.uniqueId.contentEquals(item.uniqueId) } != null) {
+            item
         } else {
-            _selectedContactId.value = null
+            _selectedContactListItem.value = null
             null
         }
     }
@@ -123,10 +123,11 @@ constructor(
     }
 
     fun selectContact(contactItem: ContactListItem) {
-        _selectedContactId.value = contactItem.wrapperId
+        _selectedContactListItem.value = contactItem
     }
 
-    fun isSelected(contactItem: ContactListItem) = _selectedContactId.value == contactItem.wrapperId
+    fun isSelected(contactItem: ContactListItem) =
+        _selectedContactListItem.value?.uniqueId.contentEquals(contactItem.uniqueId)
 
     fun removePendingContact(contactItem: PendingContactItem) {
         if (contactItem.state == PendingContactState.FAILED) {
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt
index 5f7965c6eed87410477c01a060e178b11c30b742..97015cb8968ae756f99732384c5b8046e9cee8b8 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt
@@ -22,7 +22,6 @@ import org.briarproject.bramble.api.contact.PendingContact
 import org.briarproject.bramble.api.contact.PendingContactId
 import org.briarproject.bramble.api.contact.PendingContactState
 import org.briarproject.briar.desktop.contact.ContactListItem
-import org.briarproject.briar.desktop.contact.ContactListItemId
 
 data class PendingContactItem(
     val id: PendingContactId,
@@ -30,9 +29,8 @@ data class PendingContactItem(
     override val timestamp: Long,
     val state: PendingContactState,
 ) : ContactListItem {
-    data class Id(val id: PendingContactId) : ContactListItemId
 
-    override val wrapperId = Id(id)
+    override val uniqueId: ByteArray = id.bytes
     override val displayName = alias
 
     constructor(contact: PendingContact, state: PendingContactState) : this(
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt
index 5f4b2bd7984d9307fdfd702be7129c4ffdc736fc..cafa8ef3eb0e6381dbfff46023eba7cca4212a0c 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt
@@ -80,14 +80,14 @@ fun PrivateMessageScreen(
         )
         VerticalDivider()
         Column(modifier = Modifier.weight(1f).fillMaxHeight()) {
-            val wrapperId = viewModel.selectedContactId.value
-            if (wrapperId == null) {
+            val item = viewModel.selectedContactListItem.value
+            if (item == null) {
                 NoContactSelected()
-            } else when (wrapperId) {
-                is ContactItem.Id -> {
-                    ConversationScreen(wrapperId.id)
+            } else when (item) {
+                is ContactItem -> {
+                    ConversationScreen(item.id)
                 }
-                is PendingContactItem.Id -> {
+                is PendingContactItem -> {
                     PendingContactSelected()
                 }
             }