diff --git a/src/test/kotlin/org/briarproject/briar/desktop/GroupCountHelper.kt b/src/test/kotlin/org/briarproject/briar/desktop/GroupCountHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b753e73b06dd32a20ec07be284391237fee41114
--- /dev/null
+++ b/src/test/kotlin/org/briarproject/briar/desktop/GroupCountHelper.kt
@@ -0,0 +1,43 @@
+package org.briarproject.briar.desktop
+
+import org.briarproject.bramble.api.FormatException
+import org.briarproject.bramble.api.client.ClientHelper
+import org.briarproject.bramble.api.contact.ContactId
+import org.briarproject.bramble.api.data.BdfDictionary
+import org.briarproject.bramble.api.data.BdfEntry
+import org.briarproject.bramble.api.db.DbException
+import org.briarproject.bramble.api.db.Transaction
+import org.briarproject.bramble.api.sync.GroupId
+import org.briarproject.briar.api.client.MessageTracker.GroupCount
+import org.briarproject.briar.api.messaging.MessagingManager
+import org.briarproject.briar.client.MessageTrackerConstants
+
+object GroupCountHelper {
+
+    internal fun resetGroupTimestamp(
+        txn: Transaction,
+        contactId: ContactId,
+        messagingManager: MessagingManager,
+        clientHelper: ClientHelper,
+        timestamp: Long,
+    ) {
+        val gc = messagingManager.getGroupCount(txn, contactId)
+        val groupId = messagingManager.getConversationId(txn, contactId)
+        val copy = GroupCount(gc.msgCount, gc.unreadCount, timestamp)
+        storeGroupCount(clientHelper, txn, groupId, copy)
+    }
+
+    @Throws(DbException::class)
+    private fun storeGroupCount(clientHelper: ClientHelper, txn: Transaction, g: GroupId, c: GroupCount) {
+        try {
+            val d = BdfDictionary.of(
+                BdfEntry(MessageTrackerConstants.GROUP_KEY_MSG_COUNT, c.msgCount),
+                BdfEntry(MessageTrackerConstants.GROUP_KEY_UNREAD_COUNT, c.unreadCount),
+                BdfEntry(MessageTrackerConstants.GROUP_KEY_LATEST_MSG, c.latestMsgTime)
+            )
+            clientHelper.mergeGroupMetadata(txn, g, d)
+        } catch (e: FormatException) {
+            throw DbException(e)
+        }
+    }
+}
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreator.kt b/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreator.kt
index bb89f14f70f1061890c1b7fec42ff661d27f04ef..a896931e16342cd11a2f82d2dab1fa6d3a1d84b8 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreator.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreator.kt
@@ -1,9 +1,5 @@
 package org.briarproject.briar.desktop.testdata
 
-import org.briarproject.bramble.api.contact.Contact
-import org.briarproject.bramble.api.db.DbException
-import org.briarproject.bramble.api.lifecycle.IoExecutor
-
 interface DeterministicTestDataCreator {
     /**
      * Create fake test data on the IoExecutor
@@ -22,8 +18,4 @@ interface DeterministicTestDataCreator {
         numPrivateGroups: Int,
         numPrivateGroupPosts: Int,
     )
-
-    @IoExecutor
-    @Throws(DbException::class)
-    fun addContact(name: String, alias: String?, avatar: Boolean): Contact
 }
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt b/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
index b75891546e680b61b1b0741b972dcf24c4cde003..113125fe5eef9d04c3e376f188a4159c293cc5fc 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
@@ -2,6 +2,7 @@ package org.briarproject.briar.desktop.testdata
 
 import mu.KotlinLogging
 import org.briarproject.bramble.api.FormatException
+import org.briarproject.bramble.api.client.ClientHelper
 import org.briarproject.bramble.api.contact.Contact
 import org.briarproject.bramble.api.contact.ContactId
 import org.briarproject.bramble.api.contact.ContactManager
@@ -9,6 +10,7 @@ import org.briarproject.bramble.api.crypto.SecretKey
 import org.briarproject.bramble.api.db.DatabaseComponent
 import org.briarproject.bramble.api.db.DbException
 import org.briarproject.bramble.api.db.Transaction
+import org.briarproject.bramble.api.event.EventBus
 import org.briarproject.bramble.api.identity.AuthorFactory
 import org.briarproject.bramble.api.identity.AuthorId
 import org.briarproject.bramble.api.identity.IdentityManager
@@ -28,6 +30,7 @@ import org.briarproject.bramble.api.system.Clock
 import org.briarproject.briar.api.autodelete.AutoDeleteConstants
 import org.briarproject.briar.api.avatar.AvatarManager
 import org.briarproject.briar.api.avatar.AvatarMessageEncoder
+import org.briarproject.briar.api.conversation.ConversationManager
 import org.briarproject.briar.api.messaging.MessagingManager
 import org.briarproject.briar.api.messaging.PrivateMessageFactory
 import org.briarproject.briar.api.privategroup.GroupMessageFactory
@@ -35,8 +38,10 @@ import org.briarproject.briar.api.privategroup.PrivateGroup
 import org.briarproject.briar.api.privategroup.PrivateGroupFactory
 import org.briarproject.briar.api.privategroup.PrivateGroupManager
 import org.briarproject.briar.api.test.TestAvatarCreator
+import org.briarproject.briar.desktop.GroupCountHelper
 import java.io.IOException
 import java.io.InputStream
+import java.time.LocalDateTime
 import java.time.ZoneOffset
 import java.util.Random
 import java.util.UUID
@@ -56,9 +61,12 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
     private val privateGroupManager: PrivateGroupManager,
     private val privateGroupFactory: PrivateGroupFactory,
     private val transportPropertyManager: TransportPropertyManager,
+    private val conversationManager: ConversationManager,
     private val messagingManager: MessagingManager,
     private val testAvatarCreator: TestAvatarCreator,
     private val avatarMessageEncoder: AvatarMessageEncoder,
+    private val clientHelper: ClientHelper,
+    private val eventBus: EventBus,
     @field:IoExecutor @param:IoExecutor private val ioExecutor: Executor
 ) : DeterministicTestDataCreator {
 
@@ -119,7 +127,9 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
         for (i in 0 until min(numContacts, conversations.persons.size)) {
             val person = conversations.persons[i]
             val remote = authorFactory.createLocalAuthor(person.name)
-            val contact = addContact(localAuthor.id, remote, null, avatarPercent)
+
+            val date = person.messages.map { it.date }.sorted().last()
+            val contact = addContact(localAuthor.id, remote, null, avatarPercent, date)
             contacts.add(contact)
         }
         return contacts
@@ -130,7 +140,8 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
         localAuthorId: AuthorId,
         remote: LocalAuthor,
         alias: String?,
-        avatarPercent: Int
+        avatarPercent: Int,
+        date: LocalDateTime,
     ): Contact {
         // prepare to add contact
         val secretKey = secretKey
@@ -147,7 +158,10 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
                 contactManager.setContactAlias(txn, contactId, alias)
             }
             transportPropertyManager.addRemoteProperties(txn, contactId, props)
-            db.getContact(txn, contactId)
+            val contact = db.getContact(txn, contactId)
+            val timestamp = date.toEpochSecond(ZoneOffset.UTC) * 1000
+            GroupCountHelper.resetGroupTimestamp(txn, contactId, messagingManager, clientHelper, timestamp)
+            contact
         }
         if (random.nextInt(100) + 1 <= avatarPercent) addAvatar(contact)
         LOG.info { "Added contact ${remote.name} with transport properties: $props" }
@@ -155,14 +169,6 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
         return contact
     }
 
-    @Throws(DbException::class)
-    override fun addContact(name: String, alias: String?, avatar: Boolean): Contact {
-        val localAuthor = identityManager.localAuthor
-        val remote = authorFactory.createLocalAuthor(name)
-        val avatarPercent = if (avatar) 100 else 0
-        return addContact(localAuthor.id, remote, alias, avatarPercent)
-    }
-
     private val secretKey: SecretKey
         get() {
             val b = ByteArray(SecretKey.LENGTH)