diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt
index b3bce311e4aa1512c3d75115b1b5b5736054a54b..b843087f7374f5f771a74e448b790da784aab99a 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt
@@ -7,6 +7,7 @@ import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
@@ -68,6 +69,7 @@ fun ContactCard(
     contactItem: BaseContactItem,
     onSel: () -> Unit,
     selected: Boolean,
+    padding: PaddingValues = PaddingValues(0.dp),
 ) {
     val bgColor = if (selected) MaterialTheme.colors.selectedCard else MaterialTheme.colors.surfaceVariant
     val outlineColor = MaterialTheme.colors.outline
@@ -80,7 +82,7 @@ fun ContactCard(
         backgroundColor = bgColor,
         contentColor = MaterialTheme.colors.onSurface
     ) {
-        Row(horizontalArrangement = Arrangement.SpaceBetween) {
+        Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.padding(padding)) {
             Row(modifier = Modifier.align(Alignment.CenterVertically).padding(horizontal = 16.dp)) {
                 when (contactItem) {
                     is ContactItem -> {
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
index 81711cb521e6c7519a8dfaee216e995d1d9a2668..658601133ddbc98b769213c8f45a4d5875e05bf0 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt
@@ -1,12 +1,19 @@
 package org.briarproject.briar.desktop.contact
 
+import androidx.compose.foundation.VerticalScrollbar
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.rememberScrollbarAdapter
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Scaffold
 import androidx.compose.runtime.Composable
@@ -14,6 +21,7 @@ import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.dp
 import org.briarproject.briar.desktop.contact.add.remote.AddContactDialog
@@ -31,6 +39,9 @@ fun ContactList(
 ) {
     var isContactDialogVisible by remember { mutableStateOf(false) }
     if (isContactDialogVisible) AddContactDialog(onClose = { isContactDialogVisible = false })
+
+    val scrollState = rememberLazyListState()
+
     Scaffold(
         modifier = Modifier.fillMaxHeight().width(CONTACTLIST_WIDTH),
         backgroundColor = MaterialTheme.colors.surfaceVariant,
@@ -45,15 +56,23 @@ fun ContactList(
                 )
             }
         },
-        content = {
-            LazyColumn {
-                items(contactList) { contactItem ->
-                    ContactCard(
-                        contactItem,
-                        { selectContact(contactItem) },
-                        isSelected(contactItem)
-                    )
+        content = { padding ->
+            Box(modifier = Modifier.padding(padding).fillMaxSize()) {
+                LazyColumn(state = scrollState) {
+                    items(contactList) { contactItem ->
+                        ContactCard(
+                            contactItem,
+                            { selectContact(contactItem) },
+                            isSelected(contactItem),
+                            PaddingValues(end = 12.dp)
+                        )
+                    }
                 }
+
+                VerticalScrollbar(
+                    adapter = rememberScrollbarAdapter(scrollState),
+                    modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight()
+                )
             }
         },
     )