diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiCallerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiCallerImpl.java
index ce08b2f2522019587ba56132ed6e990334c9abdf..368c7ed7c67647d315ac0bbd58b1bbce72976d9d 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiCallerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiCallerImpl.java
@@ -20,12 +20,15 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
 class MailboxApiCallerImpl implements MailboxApiCaller {
 
 	private final TaskScheduler taskScheduler;
+	private final MailboxConfig mailboxConfig;
 	private final Executor ioExecutor;
 
 	@Inject
 	MailboxApiCallerImpl(TaskScheduler taskScheduler,
+			MailboxConfig mailboxConfig,
 			@IoExecutor Executor ioExecutor) {
 		this.taskScheduler = taskScheduler;
+		this.mailboxConfig = mailboxConfig;
 		this.ioExecutor = ioExecutor;
 	}
 
@@ -49,7 +52,8 @@ class MailboxApiCallerImpl implements MailboxApiCaller {
 		private boolean cancelled = false;
 
 		@GuardedBy("lock")
-		private long retryIntervalMs = MIN_RETRY_INTERVAL_MS;
+		private long retryIntervalMs =
+				mailboxConfig.getApiCallerMinRetryInterval();
 
 		private Task(ApiCall apiCall) {
 			this.apiCall = apiCall;
@@ -74,8 +78,9 @@ class MailboxApiCallerImpl implements MailboxApiCaller {
 					scheduledTask = taskScheduler.schedule(this::callApi,
 							ioExecutor, retryIntervalMs, MILLISECONDS);
 					// Increase the retry interval each time we retry
-					retryIntervalMs =
-							min(MAX_RETRY_INTERVAL_MS, retryIntervalMs * 2);
+					retryIntervalMs = min(
+							mailboxConfig.getApiCallerMaxRetryInterval(),
+							retryIntervalMs * 2);
 				}
 			} else {
 				synchronized (lock) {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfig.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f03dff6dd35712799377a1243b4a4bc80b52fb3
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfig.java
@@ -0,0 +1,24 @@
+package org.briarproject.bramble.mailbox;
+
+import org.briarproject.bramble.api.plugin.Plugin;
+
+interface MailboxConfig {
+
+	/**
+	 * The minimum interval between API call retries in milliseconds.
+	 */
+	long getApiCallerMinRetryInterval();
+
+	/**
+	 * The maximum interval between API call retries in milliseconds.
+	 */
+	long getApiCallerMaxRetryInterval();
+
+	/**
+	 * How long (in milliseconds) the Tor plugin needs to be continuously
+	 * {@link Plugin.State#ACTIVE active} before we assume our contacts can
+	 * reach our hidden service.
+	 */
+	long getTorReachabilityPeriod();
+
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfigImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfigImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa6a1f528b9357fd973af5cdac763af26b69f95d
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxConfigImpl.java
@@ -0,0 +1,30 @@
+package org.briarproject.bramble.mailbox;
+
+import org.briarproject.nullsafety.NotNullByDefault;
+
+import javax.annotation.concurrent.Immutable;
+import javax.inject.Inject;
+
+@Immutable
+@NotNullByDefault
+class MailboxConfigImpl implements MailboxConfig {
+
+	@Inject
+	MailboxConfigImpl() {
+	}
+
+	@Override
+	public long getApiCallerMinRetryInterval() {
+		return MailboxApiCaller.MIN_RETRY_INTERVAL_MS;
+	}
+
+	@Override
+	public long getApiCallerMaxRetryInterval() {
+		return MailboxApiCaller.MAX_RETRY_INTERVAL_MS;
+	}
+
+	@Override
+	public long getTorReachabilityPeriod() {
+		return TorReachabilityMonitor.REACHABILITY_PERIOD_MS;
+	}
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/UrlConverterModule.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ModularMailboxModule.java
similarity index 58%
rename from bramble-core/src/main/java/org/briarproject/bramble/mailbox/UrlConverterModule.java
rename to bramble-core/src/main/java/org/briarproject/bramble/mailbox/ModularMailboxModule.java
index cc9d4469875b2674696a0f6e56dd8d3ae32be79d..8ddbd782466cb56cc60ee3edf9793ec4b40cfdab 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/UrlConverterModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ModularMailboxModule.java
@@ -4,7 +4,11 @@ import dagger.Module;
 import dagger.Provides;
 
 @Module
-public class UrlConverterModule {
+public class ModularMailboxModule {
+	@Provides
+	MailboxConfig provideMailboxConfig(MailboxConfigImpl mailboxConfig) {
+		return mailboxConfig;
+	}
 
 	@Provides
 	UrlConverter provideUrlConverter(UrlConverterImpl urlConverter) {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImpl.java
index 359e70460538cc8eb0fb29ad8bad8d439ed7feea..20afebe30f2862b230d66c3bc7e175b81f5e7dc2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImpl.java
@@ -32,6 +32,7 @@ class TorReachabilityMonitorImpl
 
 	private final Executor ioExecutor;
 	private final TaskScheduler taskScheduler;
+	private final MailboxConfig mailboxConfig;
 	private final PluginManager pluginManager;
 	private final EventBus eventBus;
 	private final Object lock = new Object();
@@ -50,10 +51,12 @@ class TorReachabilityMonitorImpl
 	TorReachabilityMonitorImpl(
 			@IoExecutor Executor ioExecutor,
 			TaskScheduler taskScheduler,
+			MailboxConfig mailboxConfig,
 			PluginManager pluginManager,
 			EventBus eventBus) {
 		this.ioExecutor = ioExecutor;
 		this.taskScheduler = taskScheduler;
+		this.mailboxConfig = mailboxConfig;
 		this.pluginManager = pluginManager;
 		this.eventBus = eventBus;
 	}
@@ -110,7 +113,7 @@ class TorReachabilityMonitorImpl
 		synchronized (lock) {
 			if (destroyed || task != null) return;
 			task = taskScheduler.schedule(this::onTorReachable, ioExecutor,
-					REACHABILITY_PERIOD_MS, MILLISECONDS);
+					mailboxConfig.getTorReachabilityPeriod(), MILLISECONDS);
 		}
 	}
 
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTestComponent.java
index becb74db811a8b8cf2b57b0b656bf7fecb85c0ed..f01e365f1dda5f503d0a9ab8ffcf239c0888a08b 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTestComponent.java
@@ -9,7 +9,7 @@ import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.identity.IdentityManager;
 import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -25,7 +25,7 @@ import dagger.Component;
 @Component(modules = {
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiCallerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiCallerImplTest.java
index 2612fe16abcbc21aaf8beddf19bdf5f411d77f64..b625a94a8e65e95ced4e593da5f63e5ac754af1e 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiCallerImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiCallerImplTest.java
@@ -21,12 +21,13 @@ public class MailboxApiCallerImplTest extends BrambleMockTestCase {
 
 	private final TaskScheduler taskScheduler =
 			context.mock(TaskScheduler.class);
+	private final MailboxConfig mailboxConfig = new MailboxConfigImpl();
 	private final Executor ioExecutor = context.mock(Executor.class);
 	private final ApiCall apiCall = context.mock(ApiCall.class);
 	private final Cancellable scheduledTask = context.mock(Cancellable.class);
 
 	private final MailboxApiCallerImpl caller =
-			new MailboxApiCallerImpl(taskScheduler, ioExecutor);
+			new MailboxApiCallerImpl(taskScheduler, mailboxConfig, ioExecutor);
 
 	@Test
 	public void testSubmitsTaskImmediately() {
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImplTest.java
index 032095cd6bd798ab4246bf7df48fe94de5bb5b51..547041a1f2538a22c13ce040f46c3aa62bb9e163 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/TorReachabilityMonitorImplTest.java
@@ -29,6 +29,7 @@ public class TorReachabilityMonitorImplTest extends BrambleMockTestCase {
 	private final Executor ioExecutor = context.mock(Executor.class);
 	private final TaskScheduler taskScheduler =
 			context.mock(TaskScheduler.class);
+	private final MailboxConfig mailboxConfig = new MailboxConfigImpl();
 	private final PluginManager pluginManager =
 			context.mock(PluginManager.class);
 	private final EventBus eventBus = context.mock(EventBus.class);
@@ -39,7 +40,7 @@ public class TorReachabilityMonitorImplTest extends BrambleMockTestCase {
 
 	private final TorReachabilityMonitorImpl monitor =
 			new TorReachabilityMonitorImpl(ioExecutor, taskScheduler,
-					pluginManager, eventBus);
+					mailboxConfig, pluginManager, eventBus);
 
 	@Test
 	public void testSchedulesTaskWhenStartedIfTorIsActive() {
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/file/RemovableDriveIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/file/RemovableDriveIntegrationTestComponent.java
index 59435bdb0fe248beb76a0acf6c77868aa8e0ea0a..a353f6fcbe73d57627ec7edc5e13e36b19569bfb 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/file/RemovableDriveIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/file/RemovableDriveIntegrationTestComponent.java
@@ -9,7 +9,7 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.plugin.file.RemovableDriveManager;
 import org.briarproject.bramble.battery.DefaultBatteryManagerModule;
 import org.briarproject.bramble.event.DefaultEventExecutorModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.system.DefaultWakefulIoExecutorModule;
 import org.briarproject.bramble.system.TimeTravelModule;
 import org.briarproject.bramble.test.TestDatabaseConfigModule;
@@ -35,7 +35,7 @@ import dagger.Component;
 		TestMailboxDirectoryModule.class,
 		RemovableDriveIntegrationTestModule.class,
 		RemovableDriveModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestSecureRandomModule.class,
 		TimeTravelModule.class,
 		TestSocksModule.class,
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
index d6571298e3af75d67320e4bed974a848d14216a4..8a4cda6548753b2020e210c6885e986ae0d87539 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTestComponent.java
@@ -2,7 +2,7 @@ package org.briarproject.bramble.sync;
 
 import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
 import org.briarproject.bramble.BrambleCoreModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -16,7 +16,7 @@ import dagger.Component;
 @Component(modules = {
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleIntegrationTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleIntegrationTestComponent.java
index db5ef337be3c0d30d1bf5a109aec60cfc4082acc..9544d7e9bfc732405c9d447737cb5cf5d7d88f0e 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleIntegrationTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/test/BrambleIntegrationTestComponent.java
@@ -6,7 +6,7 @@ import org.briarproject.bramble.api.client.ClientHelper;
 import org.briarproject.bramble.api.connection.ConnectionManager;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.identity.IdentityManager;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 
 import javax.inject.Singleton;
 
@@ -16,7 +16,7 @@ import dagger.Component;
 @Component(modules = {
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/transport/agreement/TransportKeyAgreementTestComponent.java b/bramble-core/src/test/java/org/briarproject/bramble/transport/agreement/TransportKeyAgreementTestComponent.java
index 88a4747a2137d4479eb904e905c9a5e8fd835452..64dfa6f2caa542555a820f90c750337437b5efa9 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/transport/agreement/TransportKeyAgreementTestComponent.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/transport/agreement/TransportKeyAgreementTestComponent.java
@@ -7,7 +7,7 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.properties.TransportPropertyManager;
 import org.briarproject.bramble.api.transport.KeyManager;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.BrambleIntegrationTestComponent;
 import org.briarproject.bramble.test.TestDnsModule;
@@ -22,7 +22,7 @@ import dagger.Component;
 @Component(modules = {
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/bramble-java/src/main/java/org/briarproject/bramble/BrambleJavaModule.java b/bramble-java/src/main/java/org/briarproject/bramble/BrambleJavaModule.java
index 001c44d634f367ec42a3b0dd13abf417a39d24b0..d627025ab616d509d852161c06c880bf27d26a77 100644
--- a/bramble-java/src/main/java/org/briarproject/bramble/BrambleJavaModule.java
+++ b/bramble-java/src/main/java/org/briarproject/bramble/BrambleJavaModule.java
@@ -1,7 +1,7 @@
 package org.briarproject.bramble;
 
 import org.briarproject.bramble.io.DnsModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.network.JavaNetworkModule;
 import org.briarproject.bramble.plugin.tor.CircumventionModule;
 import org.briarproject.bramble.socks.SocksModule;
@@ -14,7 +14,7 @@ import dagger.Module;
 		DnsModule.class,
 		JavaNetworkModule.class,
 		JavaSystemModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		SocksModule.class
 })
 public class BrambleJavaModule {
diff --git a/bramble-java/src/test/java/org/briarproject/bramble/test/BrambleJavaIntegrationTestComponent.java b/bramble-java/src/test/java/org/briarproject/bramble/test/BrambleJavaIntegrationTestComponent.java
index 8003bb7e55dae1743be26e4b2bedf518b6395855..3f47a3541cf8bfab23440048b13777db29bf860b 100644
--- a/bramble-java/src/test/java/org/briarproject/bramble/test/BrambleJavaIntegrationTestComponent.java
+++ b/bramble-java/src/test/java/org/briarproject/bramble/test/BrambleJavaIntegrationTestComponent.java
@@ -3,7 +3,7 @@ package org.briarproject.bramble.test;
 import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
 import org.briarproject.bramble.BrambleCoreModule;
 import org.briarproject.bramble.BrambleJavaModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.plugin.tor.BridgeTest;
 import org.briarproject.bramble.plugin.tor.CircumventionProvider;
 
@@ -16,7 +16,7 @@ import dagger.Component;
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
 		BrambleJavaModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestTorPortsModule.class,
 		TestPluginConfigModule.class,
 })
diff --git a/briar-android/src/androidTestOfficial/java/org/briarproject/briar/android/BriarUiTestComponent.java b/briar-android/src/androidTestOfficial/java/org/briarproject/briar/android/BriarUiTestComponent.java
index 6216e241a2a846ebbff311eac68ab30b4d073336..df1d043c34d4e285861a5119239f365130969f70 100644
--- a/briar-android/src/androidTestOfficial/java/org/briarproject/briar/android/BriarUiTestComponent.java
+++ b/briar-android/src/androidTestOfficial/java/org/briarproject/briar/android/BriarUiTestComponent.java
@@ -3,7 +3,7 @@ package org.briarproject.briar.android;
 import org.briarproject.bramble.BrambleAndroidModule;
 import org.briarproject.bramble.BrambleCoreModule;
 import org.briarproject.bramble.account.BriarAccountModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.plugin.file.RemovableDriveModule;
 import org.briarproject.bramble.system.ClockModule;
 import org.briarproject.briar.BriarCoreModule;
@@ -28,7 +28,7 @@ import dagger.Component;
 		BrambleAndroidModule.class,
 		BriarAccountModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class
+		ModularMailboxModule.class
 })
 public interface BriarUiTestComponent extends AndroidComponent {
 
diff --git a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
index a12e480d23d59457201b785aa2b95339fc093b12..e597363786151ffb0485c668b077f088d83b2242 100644
--- a/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
+++ b/briar-android/src/androidTestScreenshot/java/org/briarproject/briar/android/BriarUiTestComponent.java
@@ -3,7 +3,7 @@ package org.briarproject.briar.android;
 import org.briarproject.bramble.BrambleAndroidModule;
 import org.briarproject.bramble.BrambleCoreModule;
 import org.briarproject.bramble.account.BriarAccountModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.plugin.file.RemovableDriveModule;
 import org.briarproject.bramble.system.ClockModule;
 import org.briarproject.briar.BriarCoreModule;
@@ -27,7 +27,7 @@ import dagger.Component;
 		BrambleAndroidModule.class,
 		BriarAccountModule.class,
 		BrambleCoreModule.class,
-		UrlConverterModule.class
+		ModularMailboxModule.class
 })
 public interface BriarUiTestComponent extends AndroidComponent {
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
index c1ec805a6220505c598174473449b3c3034f4d3f..468782cd495bd79397cb3e080033664c1bd0fbd2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
@@ -28,7 +28,7 @@ import org.briarproject.bramble.api.system.AndroidExecutor;
 import org.briarproject.bramble.api.system.AndroidWakeLockManager;
 import org.briarproject.bramble.api.system.Clock;
 import org.briarproject.bramble.api.system.LocationUtils;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.plugin.file.RemovableDriveModule;
 import org.briarproject.bramble.plugin.tor.CircumventionProvider;
 import org.briarproject.bramble.system.ClockModule;
@@ -102,7 +102,7 @@ import dagger.Component;
 		AttachmentModule.class,
 		ClockModule.class,
 		MediaModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		RemovableDriveModule.class
 })
 public interface AndroidComponent
diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerIntegrationTestComponent.java
index fe4afa241cfac6197354ce131680a0d4a4127cbd..896df814abc2d6acf79e635a560f9981e3b7eca6 100644
--- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerIntegrationTestComponent.java
@@ -4,7 +4,7 @@ import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
 import org.briarproject.bramble.BrambleCoreModule;
 import org.briarproject.bramble.api.identity.IdentityManager;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -29,7 +29,7 @@ import dagger.Component;
 		BriarClientModule.class,
 		FeedModule.class,
 		IdentityModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
index 69f7bdc4d1a253453bee24725a9b61d40ef3b364..f054a55cb3c7605279f0fcf69caba0bbb08929ab 100644
--- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java
@@ -1,7 +1,7 @@
 package org.briarproject.briar.introduction;
 
 import org.briarproject.bramble.BrambleCoreModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -41,7 +41,7 @@ import dagger.Component;
 		MessagingModule.class,
 		PrivateGroupModule.class,
 		SharingModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
index 6b4083adef945972385f5f658da36410c5a40bd1..c01400b8206e041713a4d315ee4be1f3a4da0d99 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java
@@ -2,7 +2,7 @@ package org.briarproject.briar.messaging;
 
 import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
 import org.briarproject.bramble.BrambleCoreModule;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -29,7 +29,7 @@ import dagger.Component;
 		ForumModule.class,
 		IdentityModule.class,
 		MessagingModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
index e3498608dd18b0127640266f772ffb68d4fb26a0..f929bab690aa355c811665caa16d11f4b88a83a2 100644
--- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java
@@ -7,7 +7,7 @@ import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.identity.IdentityManager;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.TestDnsModule;
 import org.briarproject.bramble.test.TestPluginConfigModule;
@@ -30,7 +30,7 @@ import dagger.Component;
 		BriarClientModule.class,
 		ConversationModule.class,
 		MessagingModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
index a2486c3470255e8f2b7993f69912e990f47932e0..c2010c345894c5e3c903b9dc98225e5b183dce83 100644
--- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
+++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java
@@ -8,7 +8,7 @@ import org.briarproject.bramble.api.identity.AuthorFactory;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.properties.TransportPropertyManager;
 import org.briarproject.bramble.api.system.Clock;
-import org.briarproject.bramble.mailbox.UrlConverterModule;
+import org.briarproject.bramble.mailbox.ModularMailboxModule;
 import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
 import org.briarproject.bramble.test.BrambleIntegrationTestComponent;
 import org.briarproject.bramble.test.TestDnsModule;
@@ -66,7 +66,7 @@ import dagger.Component;
 		MessagingModule.class,
 		PrivateGroupModule.class,
 		SharingModule.class,
-		UrlConverterModule.class,
+		ModularMailboxModule.class,
 		TestDnsModule.class,
 		TestSocksModule.class,
 		TestPluginConfigModule.class,
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java
index 34cb73948b60c9e725da16c9133a72eeea79c70d..02fa6bfc9934d542f7d3263d10b574209ba1c5ce 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java
@@ -21,7 +21,8 @@ public class MailboxIntegrationTest extends AbstractMailboxIntegrationTest {
 		// c1 one pairs the mailbox
 		MailboxProperties props1 = pair(c1, mailbox);
 
-		// Check for number of contacts on mailbox via API every 100ms
+		// Check for number of contacts on mailbox via API every 100ms.
+		// This should be quick and will succeed with first call.
 		retryUntilSuccessOrTimeout(1_000, 100, () -> {
 			Collection<ContactId> contacts = api.getContacts(props1);
 			return contacts.size() == 1;
@@ -39,20 +40,17 @@ public class MailboxIntegrationTest extends AbstractMailboxIntegrationTest {
 		// send message and wait for it to arrive via mailbox
 		sendMessage(c1, contact2From1.getId(), "test");
 
-		// restart Tor for c1 to cause an immediate upload
-		// and wait until file arrived on mailbox
-		restartTor(c1);
-		retryUntilSuccessOrTimeout(5_000, 100, () -> {
+		// wait until file arrived on mailbox
+		retryUntilSuccessOrTimeout(5_000, 500, () -> {
 			List<MailboxFile> files = api.getFiles(props2, props2.getInboxId());
-			return files.size() > 0;
+			return files.size() > 1;
 		});
 
-		// restart Tor for c2 to cause an immediate download
-		// and wait for message to arrive
-		restartTor(c2);
-		awaitPendingMessageDelivery(1, 5_000);
+		// wait for message to arrive
+		// this might require 2nd download cycle after Tor reachability period
+		awaitPendingMessageDelivery(1);
 
-		// private message arrived for c2
+		// assert that private message arrived for c2
 		int size = getFromDb(c2, txn -> c2.getMessagingManager()
 				.getMessageHeaders(txn, contact1From2.getId()).size());
 		assertEquals(1, size);
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestComponent.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestComponent.java
index 278fa75fe6e0f32f7d904f52923359ee9e46aae4..7ead8faccc221c7b53886e1324505a33de8f01a0 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestComponent.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestComponent.java
@@ -24,7 +24,7 @@ import dagger.Component;
 		BrambleCoreIntegrationTestModule.class,
 		BrambleCoreModule.class,
 		BriarCoreModule.class,
-		TestUrlConverterModule.class,
+		TestModularMailboxModule.class,
 		MailboxTestPluginConfigModule.class,
 		TestSocksModule.class,
 		TestDnsModule.class,
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
index 9fd708fcda03d73cbd123a477a8e6d53c1be645b..bcea13ea363ddc4c4830879724ab455f842bd056 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTestUtils.java
@@ -4,7 +4,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import static java.lang.System.currentTimeMillis;
 import static org.briarproject.bramble.mailbox.MailboxTestUtils.createHttpClientProvider;
-import static org.briarproject.bramble.mailbox.TestUrlConverterModule.urlConverter;
+import static org.briarproject.bramble.mailbox.TestModularMailboxModule.urlConverter;
 import static org.junit.Assert.fail;
 
 class MailboxIntegrationTestUtils {
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestMailboxConfigImpl.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestMailboxConfigImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2744913cfd6321e081cdca2ac764478f72099de
--- /dev/null
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestMailboxConfigImpl.java
@@ -0,0 +1,30 @@
+package org.briarproject.bramble.mailbox;
+
+import org.briarproject.nullsafety.NotNullByDefault;
+
+import javax.annotation.concurrent.Immutable;
+import javax.inject.Inject;
+
+@Immutable
+@NotNullByDefault
+class TestMailboxConfigImpl implements MailboxConfig {
+
+	@Inject
+	TestMailboxConfigImpl() {
+	}
+
+	@Override
+	public long getApiCallerMinRetryInterval() {
+		return 1000; // MailboxApiCaller.MIN_RETRY_INTERVAL_MS;
+	}
+
+	@Override
+	public long getApiCallerMaxRetryInterval() {
+		return 2000; // MailboxApiCaller.MAX_RETRY_INTERVAL_MS;
+	}
+
+	@Override
+	public long getTorReachabilityPeriod() {
+		return 5000; // TorReachabilityMonitor.REACHABILITY_PERIOD_MS;
+	}
+}
diff --git a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestUrlConverterModule.java b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestModularMailboxModule.java
similarity index 72%
rename from mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestUrlConverterModule.java
rename to mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestModularMailboxModule.java
index a47ac069a2b53da5f7364f208cd860390e479b97..22e001bae8d17375c2eeedc7f573e26b207c92f4 100644
--- a/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestUrlConverterModule.java
+++ b/mailbox-integration-tests/src/test/java/org/briarproject/bramble/mailbox/TestModularMailboxModule.java
@@ -9,7 +9,12 @@ import static org.briarproject.bramble.mailbox.AbstractMailboxIntegrationTest.UR
 
 @Module
 @NotNullByDefault
-class TestUrlConverterModule {
+class TestModularMailboxModule {
+
+	@Provides
+	MailboxConfig provideMailboxConfig(TestMailboxConfigImpl mailboxConfig) {
+		return mailboxConfig;
+	}
 
 	static UrlConverter urlConverter = onion -> URL_BASE;