diff --git a/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java b/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7ca755f3da933c883e3657d9c053376a22445fd
--- /dev/null
+++ b/briar-api/src/net/sf/briar/api/reliability/ReliabilityExecutor.java
@@ -0,0 +1,15 @@
+package net.sf.briar.api.reliability;
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+/** Annotation for injecting the executor used by reliability layers. */
+@BindingAnnotation
+@Target({ PARAMETER })
+@Retention(RUNTIME)
+public @interface ReliabilityExecutor {}
\ No newline at end of file
diff --git a/briar-core/src/net/sf/briar/plugins/PluginsModule.java b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
index 968fb2425f5ed11a3ca24c041c8b01be874b2aac..d4c192d763403c7ae92827f7f37b2c4e548bd131 100644
--- a/briar-core/src/net/sf/briar/plugins/PluginsModule.java
+++ b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
@@ -2,7 +2,6 @@ package net.sf.briar.plugins;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -44,7 +43,7 @@ public class PluginsModule extends AbstractModule {
 
 	@Provides
 	SimplexPluginConfig getSimplexPluginConfig(
-			@PluginExecutor Executor pluginExecutor) {
+			@PluginExecutor ExecutorService pluginExecutor) {
 		final Collection<SimplexPluginFactory> factories =
 				new ArrayList<SimplexPluginFactory>();
 		if(!OsUtils.isAndroid()) {
@@ -61,7 +60,7 @@ public class PluginsModule extends AbstractModule {
 
 	@Provides
 	DuplexPluginConfig getDuplexPluginConfig(
-			@PluginExecutor Executor pluginExecutor,
+			@PluginExecutor ExecutorService pluginExecutor,
 			AndroidExecutor androidExecutor, Context appContext,
 			ReliabilityLayerFactory reliabilityFactory,
 			ShutdownManager shutdownManager) {
diff --git a/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
index 25437bcffc58175549e0c72870c5936fb55697ed..411f817b0737682cb00b447573d266f16f713681 100644
--- a/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
@@ -4,16 +4,20 @@ import java.util.concurrent.Executor;
 
 import net.sf.briar.api.clock.Clock;
 import net.sf.briar.api.clock.SystemClock;
+import net.sf.briar.api.reliability.ReliabilityExecutor;
 import net.sf.briar.api.reliability.ReliabilityLayer;
 import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 import net.sf.briar.api.reliability.WriteHandler;
 
+import com.google.inject.Inject;
+
 class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
 
 	private final Executor executor;
 	private final Clock clock;
 
-	ReliabilityLayerFactoryImpl(Executor executor) {
+	@Inject
+	ReliabilityLayerFactoryImpl(@ReliabilityExecutor Executor executor) {
 		this.executor = executor;
 		clock = new SystemClock();
 	}
diff --git a/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
index 9f8e20034de8273318fa5408e4e6084d06744c2c..784d14360bfb097498fb5fc1058e084568dbd707 100644
--- a/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
@@ -1,5 +1,9 @@
 package net.sf.briar.reliability;
 
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+import net.sf.briar.api.reliability.ReliabilityExecutor;
 import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 
 import com.google.inject.AbstractModule;
@@ -8,6 +12,10 @@ public class ReliabilityModule extends AbstractModule {
 
 	@Override
 	protected void configure() {
+		// The executor is unbounded - tasks are expected to be long-lived
+		bind(Executor.class).annotatedWith(
+				ReliabilityExecutor.class).toInstance(
+						Executors.newCachedThreadPool());
 		bind(ReliabilityLayerFactory.class).to(
 				ReliabilityLayerFactoryImpl.class);
 	}