diff --git a/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt b/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt
index 721c6fb7e49158766a86fd0f442556df458c60f2..96421379a9de135ad2c67e9f3af966a743e6c864 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt
@@ -2,6 +2,8 @@ package org.briarproject.briar.desktop
 
 import androidx.compose.desktop.Window
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.compositionLocalOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
@@ -31,6 +33,9 @@ interface BriarService {
     fun stop()
 }
 
+val CM = compositionLocalOf<ConversationManager> { error("Undefined ConversationManager") }
+val MM = compositionLocalOf<MessagingManager> { error("Undefined MessagingManager") }
+
 @Immutable
 @Singleton
 internal class BriarServiceImpl
@@ -91,7 +96,12 @@ constructor(
                     )
 
                 is Screen.Main ->
-                    BriarUIStateManager(contacts, conversationManager, messagingManager)
+                    CompositionLocalProvider(
+                        CM provides conversationManager,
+                        MM provides messagingManager
+                    ) {
+                        BriarUIStateManager(contacts)
+                    }
             }
         }
     }
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt
index fd973e48e1013a48f44c206c50948bc9ca7924a8..4088522fe3f5dae930e9574998b6d0bf6ff6e500 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt
@@ -24,9 +24,7 @@ import org.briarproject.briar.desktop.paul.theme.briarBlack
  */
 @Composable
 fun BriarUIStateManager(
-    contacts: List<Contact>,
-    conversationManager: ConversationManager,
-    messagingManager: MessagingManager
+    contacts: List<Contact>
 ) {
     // current selected mode, changed using the sidebar buttons
     val (uiMode, onModeChange) = remember { mutableStateOf("Contacts") }
@@ -50,9 +48,7 @@ fun BriarUIStateManager(
         when (uiMode) {
             "Contacts" -> PrivateMessageView(
                 contacts,
-                uiContact,
-                conversationManager,
-                messagingManager
+                uiContact
             )
             else -> Box(modifier = Modifier.fillMaxSize().background(briarBlack)) {
                 Text("TBD", modifier = Modifier.align(Alignment.Center), color = Color.White)
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt
index a0626f2e578beda6fff1e4f2abb3318cdd12222a..1dedb69725c182cf674837c05347bc477f780ffb 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt
@@ -55,9 +55,9 @@ import androidx.compose.ui.unit.sp
 import androidx.compose.ui.window.v1.DialogProperties
 import org.briarproject.bramble.api.contact.Contact
 import org.briarproject.bramble.api.contact.ContactId
-import org.briarproject.briar.api.conversation.ConversationManager
 import org.briarproject.briar.api.conversation.ConversationMessageHeader
-import org.briarproject.briar.api.messaging.MessagingManager
+import org.briarproject.briar.desktop.CM
+import org.briarproject.briar.desktop.MM
 import org.briarproject.briar.desktop.chat.Chat
 import org.briarproject.briar.desktop.chat.ChatHistoryConversationVisitor
 import org.briarproject.briar.desktop.chat.ConversationMessageHeaderComparator
@@ -80,9 +80,7 @@ val HEADER_SIZE = 66.dp
 @Composable
 fun PrivateMessageView(
     contacts: List<Contact>,
-    uiContact: MutableState<Contact>,
-    conversationManager: ConversationManager,
-    messagingManager: MessagingManager
+    uiContact: MutableState<Contact>
 ) {
     // Local State for managing the Add Contact Popup
     val (AddContactDialog, onCancelAdd) = remember { mutableStateOf(false) }
@@ -117,7 +115,7 @@ fun PrivateMessageView(
             }
             Divider(color = divider, modifier = Modifier.fillMaxHeight().width(1.dp))
             Column(modifier = Modifier.weight(1f).fillMaxHeight().background(color = darkGray)) {
-                DrawMessageRow(uiContact.value, conversationManager, messagingManager)
+                DrawMessageRow(uiContact.value)
             }
         }
     }
@@ -352,11 +350,7 @@ fun Loader() {
 }
 
 @Composable
-fun DrawMessageRow(
-    uiContact: Contact,
-    conversationManager: ConversationManager,
-    messagingManager: MessagingManager
-) {
+fun DrawMessageRow(uiContact: Contact) {
     Box(Modifier.fillMaxHeight()) {
         Box(modifier = Modifier.fillMaxWidth().height(HEADER_SIZE + 1.dp)) {
             Row(modifier = Modifier.align(Alignment.Center)) {
@@ -388,7 +382,7 @@ fun DrawMessageRow(
             )
         }
         Box(Modifier.padding(top = HEADER_SIZE + 1.dp, bottom = HEADER_SIZE)) {
-            val chat = ChatState(uiContact.id, conversationManager, messagingManager)
+            val chat = ChatState(uiContact.id)
             DrawTextBubbles(chat.value)
         }
         var text by remember { mutableStateOf(TextFieldValue("")) }
@@ -410,12 +404,10 @@ fun DrawMessageRow(
 }
 
 @Composable
-fun ChatState(
-    id: ContactId,
-    conversationManager: ConversationManager,
-    messagingManager: MessagingManager
-): MutableState<UiState<Chat>> {
+fun ChatState(id: ContactId): MutableState<UiState<Chat>> {
     val state: MutableState<UiState<Chat>> = remember { mutableStateOf(UiState.Loading) }
+    val messagingManager = MM.current
+    val conversationManager = CM.current
 
     DisposableEffect(id) {
         state.value = UiState.Loading