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 50880edef5b022245e70228144161499c43ea0e2..ac6638a5ce86f1f424ed7686c9940206cac3fe36 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt
@@ -56,6 +56,7 @@ import org.briarproject.briar.api.messaging.MessagingManager
 import org.briarproject.briar.api.messaging.PrivateMessage
 import org.briarproject.briar.api.messaging.PrivateMessageFactory
 import org.briarproject.briar.api.messaging.PrivateMessageHeader
+import org.briarproject.briar.desktop.DesktopFeatureFlags
 import org.briarproject.briar.desktop.attachment.media.ImageCompressor
 import org.briarproject.briar.desktop.contact.ContactItem
 import org.briarproject.briar.desktop.conversation.ConversationRequestItem.RequestType.INTRODUCTION
@@ -88,6 +89,7 @@ constructor(
     db: TransactionManager,
     private val attachmentReader: AttachmentReader,
     private val imageCompressor: ImageCompressor,
+    private val desktopFeatureFlags: DesktopFeatureFlags,
     private val eventBus: EventBus,
 ) : EventListenerDbViewModel(briarExecutors, lifecycleManager, db, eventBus) {
 
@@ -185,7 +187,13 @@ constructor(
                         m.autoDeleteTimer
                     )
                     val visitor =
-                        ConversationVisitor(contactItem.value!!.name, messagingManager, attachmentReader, txn)
+                        ConversationVisitor(
+                            contactItem.value!!.name,
+                            messagingManager,
+                            attachmentReader,
+                            desktopFeatureFlags,
+                            txn
+                        )
                     val msg = h.accept(visitor)!!
                     txn.attach { addMessage(msg) }
                 } catch (e: UnexpectedTimerException) {
@@ -290,7 +298,8 @@ constructor(
             // Sort headers by timestamp in *ascending* order
             val sorted = headers.sortedBy { it.timestamp }
             start = LogUtils.now()
-            val visitor = ConversationVisitor(contact.name, messagingManager, attachmentReader, txn)
+            val visitor =
+                ConversationVisitor(contact.name, messagingManager, attachmentReader, desktopFeatureFlags, txn)
             val messages = sorted.map { h -> h.accept(visitor)!! }
             LOG.logDuration("Loading messages", start)
             txn.attach {
@@ -314,7 +323,13 @@ constructor(
                     // insert at start of list according to descending sort order
                     runOnDbThreadWithTransaction(true) { txn ->
                         val visitor =
-                            ConversationVisitor(contactItem.value!!.name, messagingManager, attachmentReader, txn)
+                            ConversationVisitor(
+                                contactItem.value!!.name,
+                                messagingManager,
+                                attachmentReader,
+                                desktopFeatureFlags,
+                                txn
+                            )
                         val msg = h.accept(visitor)!!
                         txn.attach { addMessage(msg) }
                     }
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationVisitor.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationVisitor.kt
index 0b4bc866d52682395b1c1cee9c02ffbcd3f01cb5..4b6516761039bf72d2a020ce671f51e321d19718 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationVisitor.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationVisitor.kt
@@ -35,6 +35,7 @@ import org.briarproject.briar.api.messaging.MessagingManager
 import org.briarproject.briar.api.messaging.PrivateMessageHeader
 import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
 import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
+import org.briarproject.briar.desktop.DesktopFeatureFlags
 import org.briarproject.briar.desktop.utils.ImageUtils
 import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18n
 import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18nF
@@ -44,6 +45,7 @@ internal class ConversationVisitor(
     private val contactName: String,
     private val messagingManager: MessagingManager,
     private val attachmentReader: AttachmentReader,
+    private val desktopFeatureFlags: DesktopFeatureFlags,
     private val txn: Transaction,
 ) : ConversationMessageVisitor<ConversationItem?> {
 
@@ -87,8 +89,7 @@ internal class ConversationVisitor(
             )
         else {
             val notice = i18nF("blog.invitation.received", contactName, r.name)
-            // todo: add proper check for feature support
-            if (false)
+            if (desktopFeatureFlags.shouldEnableBlogs())
                 ConversationRequestItem(
                     notice,
                     ConversationRequestItem.RequestType.BLOG, r
@@ -131,8 +132,7 @@ internal class ConversationVisitor(
             )
         else {
             val notice = i18nF("forum.invitation.received", contactName, r.name)
-            // todo: add proper check for feature support
-            if (false)
+            if (desktopFeatureFlags.shouldEnableForums())
                 ConversationRequestItem(
                     notice,
                     ConversationRequestItem.RequestType.FORUM, r
@@ -175,8 +175,7 @@ internal class ConversationVisitor(
             )
         else {
             val notice = i18nF("group.invitation.received", contactName, r.name)
-            // todo: add proper check for feature support
-            if (false)
+            if (desktopFeatureFlags.shouldEnablePrivateGroups())
                 ConversationRequestItem(
                     notice,
                     ConversationRequestItem.RequestType.GROUP, r