diff --git a/briar b/briar
index bf091ef8547c25b5065eea9114931ebf88562c78..8a4fe7ca493285a136127f08e60303347d849cd2 160000
--- a/briar
+++ b/briar
@@ -1 +1 @@
-Subproject commit bf091ef8547c25b5065eea9114931ebf88562c78
+Subproject commit 8a4fe7ca493285a136127f08e60303347d849cd2
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
index 73c16fd05fde3c46a2437154378094891b83fc58..5d6a320667c7949181f88c414653a5198caa2401 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
@@ -9,15 +9,15 @@ import org.briarproject.bramble.api.db.DatabaseConfig
 import org.briarproject.bramble.api.plugin.PluginConfig
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT
+import org.briarproject.bramble.api.plugin.TorControlPort
 import org.briarproject.bramble.api.plugin.TorDirectory
+import org.briarproject.bramble.api.plugin.TorSocksPort
 import org.briarproject.bramble.api.plugin.TransportId
 import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory
 import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory
 import org.briarproject.bramble.battery.DefaultBatteryManagerModule
 import org.briarproject.bramble.event.DefaultEventExecutorModule
 import org.briarproject.bramble.network.JavaNetworkModule
-import org.briarproject.bramble.plugin.TorPorts
-import org.briarproject.bramble.plugin.TorPortsImpl
 import org.briarproject.bramble.plugin.tor.CircumventionModule
 import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
 import org.briarproject.bramble.socks.SocksModule
@@ -68,18 +68,22 @@ internal class DesktopModule(
         return DesktopDatabaseConfig(dbDir, keyDir)
     }
 
-    @Provides
-    @Singleton
-    fun provideTorPorts(): TorPorts {
-        return TorPortsImpl(socksPort, controlPort)
-    }
-
     @Provides
     @TorDirectory
     internal fun provideTorDirectory(): File {
         return appDir.resolve("tor").toFile()
     }
 
+    @Provides
+    @Singleton
+    @TorSocksPort
+    internal fun provideTorSocksPort() = socksPort
+
+    @Provides
+    @Singleton
+    @TorControlPort
+    internal fun provideTorControlPort() = controlPort
+
     @Provides
     internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig {
         val duplex: List<DuplexPluginFactory> =
@@ -101,7 +105,5 @@ internal class DesktopModule(
         override fun shouldEnableImageAttachments() = false
         override fun shouldEnableProfilePictures() = false
         override fun shouldEnableDisappearingMessages() = false
-        override fun shouldEnableTransferData() = false
-        override fun shouldEnableShareAppViaOfflineHotspot() = false
     }
 }
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
index 562d13bba90aeb55d380e06e1cda0fa07afefd45..d555e054aab0d8794362a069b5fdebd54833beb1 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
@@ -9,15 +9,15 @@ import org.briarproject.bramble.api.db.DatabaseConfig
 import org.briarproject.bramble.api.plugin.PluginConfig
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT
 import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT
+import org.briarproject.bramble.api.plugin.TorControlPort
 import org.briarproject.bramble.api.plugin.TorDirectory
+import org.briarproject.bramble.api.plugin.TorSocksPort
 import org.briarproject.bramble.api.plugin.TransportId
 import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory
 import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory
 import org.briarproject.bramble.battery.DefaultBatteryManagerModule
 import org.briarproject.bramble.event.DefaultEventExecutorModule
 import org.briarproject.bramble.network.JavaNetworkModule
-import org.briarproject.bramble.plugin.TorPorts
-import org.briarproject.bramble.plugin.TorPortsImpl
 import org.briarproject.bramble.plugin.tor.CircumventionModule
 import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
 import org.briarproject.bramble.socks.SocksModule
@@ -73,18 +73,22 @@ internal class DesktopTestModule(
         return DesktopDatabaseConfig(dbDir, keyDir)
     }
 
-    @Provides
-    @Singleton
-    fun provideTorPorts(): TorPorts {
-        return TorPortsImpl(socksPort, controlPort)
-    }
-
     @Provides
     @TorDirectory
     internal fun provideTorDirectory(): File {
         return appDir.resolve("tor").toFile()
     }
 
+    @Provides
+    @Singleton
+    @TorSocksPort
+    internal fun provideTorSocksPort() = socksPort
+
+    @Provides
+    @Singleton
+    @TorControlPort
+    internal fun provideTorControlPort() = controlPort
+
     @Provides
     internal fun providePluginConfig(tor: UnixTorPluginFactory): PluginConfig {
         val duplex: List<DuplexPluginFactory> =
@@ -106,8 +110,6 @@ internal class DesktopTestModule(
         override fun shouldEnableImageAttachments() = false
         override fun shouldEnableProfilePictures() = false
         override fun shouldEnableDisappearingMessages() = false
-        override fun shouldEnableTransferData() = false
-        override fun shouldEnableShareAppViaOfflineHotspot() = false
     }
 
     @Provides