diff --git a/api/net/sf/briar/api/plugins/BatchPluginFactory.java b/api/net/sf/briar/api/plugins/BatchPluginFactory.java
index 314497fd4073071a8f38b53e56ece5dd5972cf6e..d0d1be9fbd46dbb3b55d494f8e1f98c28669595e 100644
--- a/api/net/sf/briar/api/plugins/BatchPluginFactory.java
+++ b/api/net/sf/briar/api/plugins/BatchPluginFactory.java
@@ -1,9 +1,9 @@
 package net.sf.briar.api.plugins;
 
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 public interface BatchPluginFactory {
 
-	BatchPlugin createPlugin(ScheduledExecutorService pluginExecutor,
+	BatchPlugin createPlugin(Executor pluginExecutor,
 			BatchPluginCallback callback);
 }
diff --git a/api/net/sf/briar/api/plugins/StreamPluginFactory.java b/api/net/sf/briar/api/plugins/StreamPluginFactory.java
index 6dae0df700204d941aaba868361f517be98ebcfa..7102305704023f8ff3fd7adf9217bc23b37bb66b 100644
--- a/api/net/sf/briar/api/plugins/StreamPluginFactory.java
+++ b/api/net/sf/briar/api/plugins/StreamPluginFactory.java
@@ -1,9 +1,9 @@
 package net.sf.briar.api.plugins;
 
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 public interface StreamPluginFactory {
 
-	StreamPlugin createPlugin(ScheduledExecutorService pluginExecutor,
+	StreamPlugin createPlugin(Executor pluginExecutor,
 			StreamPluginCallback callback);
 }
diff --git a/components/net/sf/briar/plugins/PluginManagerImpl.java b/components/net/sf/briar/plugins/PluginManagerImpl.java
index 5d16299efbed81f19e73710628f1d70e1d331b02..bd4e198fe9a2e3bfe702c233447dc8f9267f067e 100644
--- a/components/net/sf/briar/plugins/PluginManagerImpl.java
+++ b/components/net/sf/briar/plugins/PluginManagerImpl.java
@@ -7,7 +7,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ExecutorService;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -51,7 +51,7 @@ class PluginManagerImpl implements PluginManager {
 		"net.sf.briar.plugins.socket.SimpleSocketPluginFactory"
 	};
 
-	private final ScheduledExecutorService pluginExecutor;
+	private final ExecutorService pluginExecutor;
 	private final DatabaseComponent db;
 	private final Poller poller;
 	private final ConnectionDispatcher dispatcher;
@@ -60,7 +60,7 @@ class PluginManagerImpl implements PluginManager {
 	private final List<StreamPlugin> streamPlugins; // Locking: this
 
 	@Inject
-	PluginManagerImpl(@PluginExecutor ScheduledExecutorService pluginExecutor,
+	PluginManagerImpl(@PluginExecutor ExecutorService pluginExecutor,
 			DatabaseComponent db, Poller poller,
 			ConnectionDispatcher dispatcher, UiCallback uiCallback) {
 		this.pluginExecutor = pluginExecutor;
diff --git a/components/net/sf/briar/plugins/PluginsModule.java b/components/net/sf/briar/plugins/PluginsModule.java
index 1fcf8d3a9d87f291b3c3baaf67ad64ca6d9ae010..9ade114d1356db8f223c57f2b10f61ec3371d083 100644
--- a/components/net/sf/briar/plugins/PluginsModule.java
+++ b/components/net/sf/briar/plugins/PluginsModule.java
@@ -1,7 +1,7 @@
 package net.sf.briar.plugins;
 
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
 
 import net.sf.briar.api.plugins.PluginExecutor;
 import net.sf.briar.api.plugins.PluginManager;
@@ -13,9 +13,9 @@ public class PluginsModule extends AbstractModule {
 
 	@Override
 	protected void configure() {
-		bind(ScheduledExecutorService.class).annotatedWith(
+		bind(ExecutorService.class).annotatedWith(
 				PluginExecutor.class).toInstance(
-						Executors.newScheduledThreadPool(1));
+						Executors.newCachedThreadPool());
 		bind(PluginManager.class).to(
 				PluginManagerImpl.class).in(Singleton.class);
 		bind(Poller.class).to(PollerImpl.class);
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
index 653119a80cc467bc9d7a165af57b8d1294a5839c..510035c9648520cacc6905e2cfb94686fa46d96d 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
@@ -4,10 +4,11 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Random;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
@@ -41,23 +42,25 @@ class BluetoothPlugin implements StreamPlugin {
 	private static final Logger LOG =
 		Logger.getLogger(BluetoothPlugin.class.getName());
 
-	private final ScheduledExecutorService pluginExecutor;
+	private final Executor pluginExecutor;
 	private final StreamPluginCallback callback;
 	private final long pollingInterval;
 	private final Object discoveryLock = new Object();
+	private final ScheduledExecutorService scheduler;
 	// Locking: this
-	private final Collection<StreamConnectionNotifier> invitationSockets;
+	private final Map<StreamConnectionNotifier, ScheduledFuture<?>> sockets;
 
 	private boolean running = false; // Locking: this
 	private LocalDevice localDevice = null; // Locking: this
 	private StreamConnectionNotifier socket = null; // Locking: this
 
-	BluetoothPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
+	BluetoothPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback, long pollingInterval) {
 		this.pluginExecutor = pluginExecutor;
 		this.callback = callback;
 		this.pollingInterval = pollingInterval;
-		invitationSockets = new HashSet<StreamConnectionNotifier>();
+		scheduler = Executors.newScheduledThreadPool(0);
+		sockets = new HashMap<StreamConnectionNotifier, ScheduledFuture<?>>();
 	}
 
 	public TransportId getId() {
@@ -173,8 +176,11 @@ class BluetoothPlugin implements StreamPlugin {
 	public synchronized void stop() {
 		running = false;
 		localDevice = null;
-		for(StreamConnectionNotifier scn : invitationSockets) tryToClose(scn);
-		invitationSockets.clear();
+		for(Entry<StreamConnectionNotifier, ScheduledFuture<?>> e
+				: sockets.entrySet()) {
+			if(e.getValue().cancel(false)) tryToClose(e.getKey());
+		}
+		sockets.clear();
 		if(socket != null) {
 			tryToClose(socket);
 			socket = null;
@@ -383,31 +389,31 @@ class BluetoothPlugin implements StreamPlugin {
 			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
-		synchronized(this) {
-			if(!running) {
-				tryToClose(scn);
-				return;
-			}
-			invitationSockets.add(scn);
-		}
 		// Close the socket when the invitation times out
 		Runnable close = new Runnable() {
 			public void run() {
 				synchronized(this) {
-					invitationSockets.remove(scn);
+					sockets.remove(scn);
 				}
 				tryToClose(scn);
 			}
 		};
-		ScheduledFuture<?> future = pluginExecutor.schedule(close,
+		ScheduledFuture<?> future = scheduler.schedule(close,
 				c.getTimeout(), TimeUnit.MILLISECONDS);
+		synchronized(this) {
+			if(!running) {
+				if(future.cancel(false)) tryToClose(scn);
+				return;
+			}
+			sockets.put(scn, future);
+		}
 		// Try to accept a connection
 		try {
 			StreamConnection s = scn.acceptAndOpen();
 			// Close the socket and return the connection
 			if(future.cancel(false)) {
 				synchronized(this) {
-					invitationSockets.remove(scn);
+					sockets.remove(scn);
 				}
 				tryToClose(scn);
 			}
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothPluginFactory.java b/components/net/sf/briar/plugins/bluetooth/BluetoothPluginFactory.java
index 4c4a3a730e978211d7a41f961cdc4a65d2861633..a7a55fa1c3fefc0db6cfb19c93ad2190e640672e 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothPluginFactory.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothPluginFactory.java
@@ -1,6 +1,6 @@
 package net.sf.briar.plugins.bluetooth;
 
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.plugins.PluginExecutor;
 import net.sf.briar.api.plugins.StreamPlugin;
@@ -11,8 +11,7 @@ public class BluetoothPluginFactory implements StreamPluginFactory {
 
 	private static final long POLLING_INTERVAL = 3L * 60L * 1000L; // 3 mins
 
-	public StreamPlugin createPlugin(
-			@PluginExecutor ScheduledExecutorService pluginExecutor,
+	public StreamPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback) {
 		return new BluetoothPlugin(pluginExecutor, callback, POLLING_INTERVAL);
 	}
diff --git a/components/net/sf/briar/plugins/file/RemovableDrivePluginFactory.java b/components/net/sf/briar/plugins/file/RemovableDrivePluginFactory.java
index 1a0353a1e2c240232b58785be2483788878ffe46..81f719c8dcf5454d4aaf0e73b772b9ae2233ba84 100644
--- a/components/net/sf/briar/plugins/file/RemovableDrivePluginFactory.java
+++ b/components/net/sf/briar/plugins/file/RemovableDrivePluginFactory.java
@@ -1,6 +1,6 @@
 package net.sf.briar.plugins.file;
 
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.plugins.BatchPlugin;
 import net.sf.briar.api.plugins.BatchPluginCallback;
@@ -12,8 +12,7 @@ public class RemovableDrivePluginFactory implements BatchPluginFactory {
 
 	private static final long POLLING_INTERVAL = 10L * 1000L; // 10 seconds
 
-	public BatchPlugin createPlugin(
-			@PluginExecutor ScheduledExecutorService pluginExecutor,
+	public BatchPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
 			BatchPluginCallback callback) {
 		RemovableDriveFinder finder;
 		RemovableDriveMonitor monitor;
diff --git a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
index 0de1417a9b4913046ec6723fb63a1b3d2ed7f131..9e5c3742c1df69b7589435292f75df9d4c183e05 100644
--- a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
@@ -10,7 +10,7 @@ import java.net.Socket;
 import java.net.SocketTimeoutException;
 import java.net.UnknownHostException;
 import java.util.Random;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -25,7 +25,7 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 	private static final Logger LOG =
 		Logger.getLogger(LanSocketPlugin.class.getName());
 
-	LanSocketPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
+	LanSocketPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback, long pollingInterval) {
 		super(pluginExecutor, callback, pollingInterval);
 	}
diff --git a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
index 332f7e82ab2c4311f81dfa8f7f7b63aa6b746540..1a6bb99eb16f1ea6bb28d6eec084346a5eefa719 100644
--- a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
@@ -9,7 +9,7 @@ import java.net.Socket;
 import java.net.SocketAddress;
 import java.util.Collections;
 import java.util.List;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -31,7 +31,7 @@ class SimpleSocketPlugin extends SocketPlugin {
 	private static final Logger LOG =
 		Logger.getLogger(SimpleSocketPlugin.class.getName());
 
-	SimpleSocketPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
+	SimpleSocketPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback, long pollingInterval) {
 		super(pluginExecutor, callback, pollingInterval);
 	}
diff --git a/components/net/sf/briar/plugins/socket/SimpleSocketPluginFactory.java b/components/net/sf/briar/plugins/socket/SimpleSocketPluginFactory.java
index 6e7fc5e5f4fbee236d092ab55fc55e4c1f9ae733..a34e21ead8d1c00e6800c70b653155007d4e9e94 100644
--- a/components/net/sf/briar/plugins/socket/SimpleSocketPluginFactory.java
+++ b/components/net/sf/briar/plugins/socket/SimpleSocketPluginFactory.java
@@ -1,6 +1,6 @@
 package net.sf.briar.plugins.socket;
 
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.plugins.PluginExecutor;
 import net.sf.briar.api.plugins.StreamPlugin;
@@ -11,8 +11,7 @@ public class SimpleSocketPluginFactory implements StreamPluginFactory {
 
 	private static final long POLLING_INTERVAL = 5L * 60L * 1000L; // 5 mins
 
-	public StreamPlugin createPlugin(
-			@PluginExecutor ScheduledExecutorService pluginExecutor,
+	public StreamPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback) {
 		return new SimpleSocketPlugin(pluginExecutor, callback,
 				POLLING_INTERVAL);
diff --git a/components/net/sf/briar/plugins/socket/SocketPlugin.java b/components/net/sf/briar/plugins/socket/SocketPlugin.java
index 7f2a5557d234678563d71624b98a17b5133cc268..c5001ef85f71d64b80ee531c17414530383bbac1 100644
--- a/components/net/sf/briar/plugins/socket/SocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SocketPlugin.java
@@ -6,7 +6,7 @@ import java.net.Socket;
 import java.net.SocketAddress;
 import java.util.Collection;
 import java.util.Map;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -22,7 +22,7 @@ abstract class SocketPlugin implements StreamPlugin {
 	private static final Logger LOG =
 		Logger.getLogger(SocketPlugin.class.getName());
 
-	protected final ScheduledExecutorService pluginExecutor;
+	protected final Executor pluginExecutor;
 	protected final StreamPluginCallback callback;
 
 	private final long pollingInterval;
@@ -37,8 +37,7 @@ abstract class SocketPlugin implements StreamPlugin {
 	protected abstract SocketAddress getLocalSocketAddress();
 	protected abstract SocketAddress getRemoteSocketAddress(ContactId c);
 
-	protected SocketPlugin(
-			@PluginExecutor ScheduledExecutorService pluginExecutor,
+	protected SocketPlugin(@PluginExecutor Executor pluginExecutor,
 			StreamPluginCallback callback, long pollingInterval) {
 		this.pluginExecutor = pluginExecutor;
 		this.callback = callback;
diff --git a/test/net/sf/briar/plugins/PluginManagerImplTest.java b/test/net/sf/briar/plugins/PluginManagerImplTest.java
index 37c50e3966592eaecc046c358da53a8afa718467..861eb6593bbffb66adad6c35ccf125ad0fc6061d 100644
--- a/test/net/sf/briar/plugins/PluginManagerImplTest.java
+++ b/test/net/sf/briar/plugins/PluginManagerImplTest.java
@@ -1,8 +1,8 @@
 package net.sf.briar.plugins;
 
 import java.util.Collection;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import net.sf.briar.BriarTestCase;
@@ -43,7 +43,7 @@ public class PluginManagerImplTest extends BriarTestCase {
 					with(any(TransportProperties.class)));
 			oneOf(poller).stop();
 		}});
-		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
+		ExecutorService executor = Executors.newCachedThreadPool();
 		PluginManagerImpl p = new PluginManagerImpl(executor, db, poller,
 				dispatcher, uiCallback);
 		// We expect either 2 or 3 plugins to be started, depending on whether
diff --git a/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java b/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
index 234c6f850e4945926a75f837ade62ad9da6b65f3..e1acd2dae5db3e1f85225697e01355966be2aff3 100644
--- a/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
+++ b/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
@@ -3,7 +3,7 @@ package net.sf.briar.plugins.bluetooth;
 import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.TransportConfig;
@@ -24,7 +24,7 @@ public class BluetoothClientTest extends StreamClientTest {
 		// Create the plugin
 		callback = new ClientCallback(new TransportConfig(),
 				new TransportProperties(), remote);
-		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
+		Executor executor = Executors.newCachedThreadPool();
 		plugin = new BluetoothPlugin(executor, callback, 0L);
 	}
 
diff --git a/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java b/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
index 6b73adf3bee66f04c04ea25e89de4e8e534b14b0..81d28cad2730d38b9da0f4510d22ee90adc26e13 100644
--- a/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
+++ b/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
@@ -2,7 +2,7 @@ package net.sf.briar.plugins.bluetooth;
 
 import java.util.Collections;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.TransportConfig;
 import net.sf.briar.api.TransportProperties;
@@ -19,7 +19,7 @@ public class BluetoothServerTest extends StreamServerTest {
 		// Create the plugin
 		callback = new ServerCallback(new TransportConfig(), local,
 				Collections.singletonMap(contactId, new TransportProperties()));
-		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
+		Executor executor = Executors.newCachedThreadPool();
 		plugin = new BluetoothPlugin(executor, callback, 0L);
 	}
 
diff --git a/test/net/sf/briar/plugins/socket/LanSocketClientTest.java b/test/net/sf/briar/plugins/socket/LanSocketClientTest.java
index a093f30e30c5ab004320023bc28ee26b68c6eadd..bc99d5ae6b1f8322417c7121c1d4390884afcf69 100644
--- a/test/net/sf/briar/plugins/socket/LanSocketClientTest.java
+++ b/test/net/sf/briar/plugins/socket/LanSocketClientTest.java
@@ -3,7 +3,7 @@ package net.sf.briar.plugins.socket;
 import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.TransportConfig;
@@ -24,7 +24,7 @@ public class LanSocketClientTest extends StreamClientTest {
 		// Create the plugin
 		callback = new ClientCallback(new TransportConfig(),
 				new TransportProperties(), remote);
-		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
+		Executor executor = Executors.newCachedThreadPool();
 		plugin = new LanSocketPlugin(executor, callback, 0L);
 	}
 
diff --git a/test/net/sf/briar/plugins/socket/LanSocketServerTest.java b/test/net/sf/briar/plugins/socket/LanSocketServerTest.java
index d46544cc4b43f1ad8b914f6ce59f55af622cf27f..b969600b10184286a4745be9a99860bbe4b1f806 100644
--- a/test/net/sf/briar/plugins/socket/LanSocketServerTest.java
+++ b/test/net/sf/briar/plugins/socket/LanSocketServerTest.java
@@ -2,7 +2,7 @@ package net.sf.briar.plugins.socket;
 
 import java.util.Collections;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 
 import net.sf.briar.api.TransportConfig;
 import net.sf.briar.api.TransportProperties;
@@ -16,7 +16,7 @@ public class LanSocketServerTest extends StreamServerTest {
 		callback = new ServerCallback(new TransportConfig(),
 				new TransportProperties(),
 				Collections.singletonMap(contactId, new TransportProperties()));
-		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
+		Executor executor = Executors.newCachedThreadPool();
 		plugin = new LanSocketPlugin(executor, callback, 0L);
 	}
 
diff --git a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
index 4387b93556be888a5c06a1e104e63242761a0fdd..c1b9ded937d5a1b413a8b82a44f38d2cc2500b5d 100644
--- a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
+++ b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
@@ -8,7 +8,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -30,7 +30,7 @@ public class SimpleSocketPluginTest extends BriarTestCase {
 		StreamCallback callback = new StreamCallback();
 		callback.local.put("internal", "127.0.0.1");
 		callback.local.put("port", "0");
-		ScheduledExecutorService e = Executors.newScheduledThreadPool(1);
+		Executor e = Executors.newCachedThreadPool();
 		SimpleSocketPlugin plugin = new SimpleSocketPlugin(e, callback, 0L);
 		plugin.start();
 		// The plugin should have bound a socket and stored the port number
@@ -64,7 +64,7 @@ public class SimpleSocketPluginTest extends BriarTestCase {
 	@Test
 	public void testOutgoingConnection() throws Exception {
 		StreamCallback callback = new StreamCallback();
-		ScheduledExecutorService e = Executors.newScheduledThreadPool(1);
+		Executor e = Executors.newCachedThreadPool();
 		SimpleSocketPlugin plugin = new SimpleSocketPlugin(e, callback, 0L);
 		plugin.start();
 		// Listen on a local port