diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactViewModel.kt
index 1ce5e996ca81a2688f7c8a1b93f6155be72b8f45..7f3d638f713a134fb585b9dee72862b62fe53694 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactViewModel.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactViewModel.kt
@@ -1,6 +1,7 @@
 package org.briarproject.briar.desktop.contact.add.remote
 
 import androidx.compose.runtime.mutableStateOf
+import mu.KotlinLogging
 import org.briarproject.bramble.api.FormatException
 import org.briarproject.bramble.api.contact.ContactManager
 import org.briarproject.bramble.api.contact.HandshakeLinkConstants
@@ -25,6 +26,10 @@ constructor(
     private val contactManager: ContactManager,
 ) : DbViewModel(briarExecutors, lifecycleManager, db) {
 
+    companion object {
+        private val LOG = KotlinLogging.logger {}
+    }
+
     override fun onInit() {
         super.onInit()
         fetchHandshakeLink()
@@ -59,15 +64,18 @@ constructor(
 
     private fun addPendingContact(link: String, alias: String) {
         if (_handshakeLink.value == link) {
-            println("Please enter contact's link, not your own")
+            LOG.warn { "Please enter contact's link, not your own" }
+            // TODO: show warning to user
             return
         }
         if (remoteHandshakeLinkIsInvalid(link)) {
-            println("Remote handshake link is invalid")
+            LOG.warn { "Remote handshake link is invalid" }
+            // TODO: show message to user
             return
         }
         if (aliasIsInvalid(alias)) {
-            println("Alias is invalid")
+            LOG.warn { "Alias is invalid" }
+            // TODO: show message to user
             return
         }
 
@@ -75,11 +83,11 @@ constructor(
             try {
                 contactManager.addPendingContact(txn, link, alias)
             } catch (e: FormatException) {
-                println("Link is invalid")
-                println(e.stackTrace)
+                LOG.warn(e) { "Link is invalid" }
+                // TODO: show error to user
             } catch (e: GeneralSecurityException) {
-                println("Public key is invalid")
-                println(e.stackTrace)
+                LOG.warn(e) { "Public key is invalid" }
+                // TODO: show error to user
             }
             /*
             TODO: Warn user that the following two errors might be an attack
@@ -89,11 +97,11 @@ constructor(
 
             */
             catch (e: ContactExistsException) {
-                println("Contact already exists")
-                println(e.stackTrace)
+                LOG.warn(e) { "Contact already exists" }
+                // TODO: show error to user
             } catch (e: PendingContactExistsException) {
-                println("Pending Contact already exists")
-                println(e.stackTrace)
+                LOG.warn(e) { "Pending Contact already exists" }
+                // TODO: show error to user
             }
         }
     }
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt b/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt
index 7c927125c771b30658be792fee9a7cb2c4d172c4..d1fc82c8c3202470d1b18e8295e67216b44a9eb7 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/RunWithMultipleTemporaryAccounts.kt
@@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.window.ApplicationScope
 import androidx.compose.ui.window.application
+import mu.KotlinLogging
 import org.briarproject.bramble.BrambleCoreEagerSingletons
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT
@@ -11,7 +12,6 @@ import org.briarproject.briar.BriarCoreEagerSingletons
 import org.briarproject.briar.desktop.TestUtils.getDataDir
 import org.briarproject.briar.desktop.utils.LogUtils
 import java.util.logging.Level.ALL
-import java.util.logging.Logger
 
 internal class RunWithMultipleTemporaryAccounts(
     private val names: List<String>,
@@ -19,7 +19,7 @@ internal class RunWithMultipleTemporaryAccounts(
 ) {
 
     companion object {
-        private val LOG = Logger.getLogger(RunWithMultipleTemporaryAccounts::class.java.name)
+        private val LOG = KotlinLogging.logger {}
     }
 
     private val apps = mutableListOf<BriarDesktopTestApp>()