diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReadHandler.java b/briar-api/src/net/sf/briar/api/reliability/ReadHandler.java
similarity index 53%
rename from briar-core/src/net/sf/briar/plugins/modem/ReadHandler.java
rename to briar-api/src/net/sf/briar/api/reliability/ReadHandler.java
index 0e2bc8c9717b5bd79b2ad6687bb9643e1178e320..4d91e5877ccb6826d5ce49cce4c96e300772500f 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReadHandler.java
+++ b/briar-api/src/net/sf/briar/api/reliability/ReadHandler.java
@@ -1,8 +1,8 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.api.reliability;
 
 import java.io.IOException;
 
-interface ReadHandler {
+public interface ReadHandler {
 
 	void handleRead(byte[] b) throws IOException;
 }
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java b/briar-api/src/net/sf/briar/api/reliability/ReliabilityLayer.java
similarity index 59%
rename from briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
rename to briar-api/src/net/sf/briar/api/reliability/ReliabilityLayer.java
index 6b9160eef7263b33df49a61568c70e453351ea89..0eba9e550afb8c120ac1622fed06dd9d4cdcb66f 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
+++ b/briar-api/src/net/sf/briar/api/reliability/ReliabilityLayer.java
@@ -1,9 +1,9 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.api.reliability;
 
 import java.io.InputStream;
 import java.io.OutputStream;
 
-interface ReliabilityLayer extends ReadHandler, WriteHandler {
+public interface ReliabilityLayer extends ReadHandler, WriteHandler {
 
 	void start();
 
diff --git a/briar-api/src/net/sf/briar/api/reliability/ReliabilityLayerFactory.java b/briar-api/src/net/sf/briar/api/reliability/ReliabilityLayerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..96b4a51b406e8d3313106572e0dbf997059cdcbb
--- /dev/null
+++ b/briar-api/src/net/sf/briar/api/reliability/ReliabilityLayerFactory.java
@@ -0,0 +1,6 @@
+package net.sf.briar.api.reliability;
+
+public interface ReliabilityLayerFactory {
+
+	ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
+}
diff --git a/briar-core/src/net/sf/briar/plugins/modem/WriteHandler.java b/briar-api/src/net/sf/briar/api/reliability/WriteHandler.java
similarity index 53%
rename from briar-core/src/net/sf/briar/plugins/modem/WriteHandler.java
rename to briar-api/src/net/sf/briar/api/reliability/WriteHandler.java
index fdf4d2c153cecd7ea792de01c52d2a2f66b83849..ef36266ea9d8c78dcd2f100f5ae5b6514062b875 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/WriteHandler.java
+++ b/briar-api/src/net/sf/briar/api/reliability/WriteHandler.java
@@ -1,8 +1,8 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.api.reliability;
 
 import java.io.IOException;
 
-interface WriteHandler {
+public interface WriteHandler {
 
 	void handleWrite(byte[] b) throws IOException;
 }
diff --git a/briar-core/src/net/sf/briar/plugins/PluginsModule.java b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
index 5003d1cfc1028edc3eb5d5709ecb072620c801ab..968fb2425f5ed11a3ca24c041c8b01be874b2aac 100644
--- a/briar-core/src/net/sf/briar/plugins/PluginsModule.java
+++ b/briar-core/src/net/sf/briar/plugins/PluginsModule.java
@@ -14,6 +14,7 @@ import net.sf.briar.api.plugins.duplex.DuplexPluginConfig;
 import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
 import net.sf.briar.api.plugins.simplex.SimplexPluginConfig;
 import net.sf.briar.api.plugins.simplex.SimplexPluginFactory;
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 import net.sf.briar.plugins.bluetooth.BluetoothPluginFactory;
 import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory;
 import net.sf.briar.plugins.file.RemovableDrivePluginFactory;
@@ -62,6 +63,7 @@ public class PluginsModule extends AbstractModule {
 	DuplexPluginConfig getDuplexPluginConfig(
 			@PluginExecutor Executor pluginExecutor,
 			AndroidExecutor androidExecutor, Context appContext,
+			ReliabilityLayerFactory reliabilityFactory,
 			ShutdownManager shutdownManager) {
 		final Collection<DuplexPluginFactory> factories =
 				new ArrayList<DuplexPluginFactory>();
@@ -70,7 +72,8 @@ public class PluginsModule extends AbstractModule {
 					androidExecutor, appContext));
 		} else {
 			factories.add(new BluetoothPluginFactory(pluginExecutor));
-			factories.add(new ModemPluginFactory(pluginExecutor));
+			factories.add(new ModemPluginFactory(pluginExecutor,
+					reliabilityFactory));
 		}
 		factories.add(new LanTcpPluginFactory(pluginExecutor));
 		factories.add(new WanTcpPluginFactory(pluginExecutor, shutdownManager));
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemFactoryImpl.java b/briar-core/src/net/sf/briar/plugins/modem/ModemFactoryImpl.java
index e9be7af29e0ad70768a9788f9a4a4eb6f76df6a1..13ae3084807828a3b7105d1830acacf934b72946 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemFactoryImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemFactoryImpl.java
@@ -2,6 +2,8 @@ package net.sf.briar.plugins.modem;
 
 import java.util.concurrent.Executor;
 
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
+
 class ModemFactoryImpl implements ModemFactory {
 
 	private final Executor executor;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
index 2d31dc9ca2b8b37f6a403c091dbb2cad7ea4da56..4266cde927b9552bd30dae2548cb8cc604483812 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
@@ -12,6 +12,10 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Semaphore;
 import java.util.logging.Logger;
 
+import net.sf.briar.api.reliability.ReliabilityLayer;
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
+import net.sf.briar.api.reliability.WriteHandler;
+
 import jssc.SerialPort;
 import jssc.SerialPortEvent;
 import jssc.SerialPortEventListener;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
index 8d7bb6933047efeac6dc52b694d57dbd1f0c0418..272a76a2975145f3789827bd79b52840c74975db 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
@@ -7,6 +7,7 @@ import net.sf.briar.api.plugins.duplex.DuplexPlugin;
 import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
 import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
 import net.sf.briar.api.protocol.TransportId;
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
 
 import org.h2.util.StringUtils;
 
@@ -15,9 +16,12 @@ public class ModemPluginFactory implements DuplexPluginFactory {
 	private static final long POLLING_INTERVAL = 60L * 60L * 1000L; // 1 hour
 
 	private final Executor pluginExecutor;
+	private final ModemFactory modemFactory;
 
-	public ModemPluginFactory(@PluginExecutor Executor pluginExecutor) {
+	public ModemPluginFactory(@PluginExecutor Executor pluginExecutor,
+			ReliabilityLayerFactory reliabilityFactory) {
 		this.pluginExecutor = pluginExecutor;
+		modemFactory = new ModemFactoryImpl(pluginExecutor, reliabilityFactory);
 	}
 
 	public TransportId getId() {
@@ -28,10 +32,6 @@ public class ModemPluginFactory implements DuplexPluginFactory {
 		// This plugin is not enabled by default
 		String enabled = callback.getConfig().get("enabled");
 		if(StringUtils.isNullOrEmpty(enabled)) return null;
-		ReliabilityLayerFactory reliabilityFactory =
-				new ReliabilityLayerFactoryImpl(pluginExecutor);
-		ModemFactory modemFactory = new ModemFactoryImpl(pluginExecutor,
-				reliabilityFactory);
 		return new ModemPlugin(pluginExecutor, modemFactory, callback,
 				POLLING_INTERVAL);
 	}
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactory.java b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactory.java
deleted file mode 100644
index 0c5a46e3aefa8b040a468b10f0df5799eb98397d..0000000000000000000000000000000000000000
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactory.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.sf.briar.plugins.modem;
-
-interface ReliabilityLayerFactory {
-
-	ReliabilityLayer createReliabilityLayer(WriteHandler writeHandler);
-}
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Ack.java b/briar-core/src/net/sf/briar/reliability/Ack.java
similarity index 92%
rename from briar-core/src/net/sf/briar/plugins/modem/Ack.java
rename to briar-core/src/net/sf/briar/reliability/Ack.java
index 4f8e1da8604228a01dd6743a5a04f2d54ec55e71..a8c437bf94124beea0251308a1ac74e691223bdb 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Ack.java
+++ b/briar-core/src/net/sf/briar/reliability/Ack.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import net.sf.briar.util.ByteUtils;
 
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Crc32.java b/briar-core/src/net/sf/briar/reliability/Crc32.java
similarity index 93%
rename from briar-core/src/net/sf/briar/plugins/modem/Crc32.java
rename to briar-core/src/net/sf/briar/reliability/Crc32.java
index 8279d3c9715622acf8cc939e95d4b9cc49aa2051..22e4540728fdc2a5f26df8a80893f52cd9f6e7e4 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Crc32.java
+++ b/briar-core/src/net/sf/briar/reliability/Crc32.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 class Crc32 {
 
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Data.java b/briar-core/src/net/sf/briar/reliability/Data.java
similarity index 94%
rename from briar-core/src/net/sf/briar/plugins/modem/Data.java
rename to briar-core/src/net/sf/briar/reliability/Data.java
index 4cfd7cc8638bfd70b4f56d972b0c5f26ede104ae..63f075dff6474862d3e7859d8a093d4b3d648645 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Data.java
+++ b/briar-core/src/net/sf/briar/reliability/Data.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 class Data extends Frame {
 
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Frame.java b/briar-core/src/net/sf/briar/reliability/Frame.java
similarity index 96%
rename from briar-core/src/net/sf/briar/plugins/modem/Frame.java
rename to briar-core/src/net/sf/briar/reliability/Frame.java
index 288c606844b1ac9b9dc349803ef9a43c0df65d84..2cbc117004f08d946dc36a38cdda1f0e5bfd9c23 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Frame.java
+++ b/briar-core/src/net/sf/briar/reliability/Frame.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import net.sf.briar.util.ByteUtils;
 
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Receiver.java b/briar-core/src/net/sf/briar/reliability/Receiver.java
similarity index 97%
rename from briar-core/src/net/sf/briar/plugins/modem/Receiver.java
rename to briar-core/src/net/sf/briar/reliability/Receiver.java
index e4813f6932b36f5a8abe91a9a977f5e0ab4433fe..ddb3394aa67663a3d1123d4f0946151a171e4dfa 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Receiver.java
+++ b/briar-core/src/net/sf/briar/reliability/Receiver.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 import java.util.Comparator;
@@ -6,6 +6,8 @@ import java.util.Iterator;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import net.sf.briar.api.reliability.ReadHandler;
+
 class Receiver implements ReadHandler {
 
 	static final int MAX_WINDOW_SIZE = 8 * Data.MAX_PAYLOAD_LENGTH;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReceiverInputStream.java b/briar-core/src/net/sf/briar/reliability/ReceiverInputStream.java
similarity index 97%
rename from briar-core/src/net/sf/briar/plugins/modem/ReceiverInputStream.java
rename to briar-core/src/net/sf/briar/reliability/ReceiverInputStream.java
index 11e707acdf88777ccf897013210e7821d8e7d2f5..27b26c311caa1bdc71486dd8c99d0d0e80261ab7 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReceiverInputStream.java
+++ b/briar-core/src/net/sf/briar/reliability/ReceiverInputStream.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactoryImpl.java b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
similarity index 64%
rename from briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactoryImpl.java
rename to briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
index 2b72b72ffb9193dbabe45e8c43089bd184a77158..5d32324c6d9c520d06e844fa3f560dcb5a39b272 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerFactoryImpl.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerFactoryImpl.java
@@ -1,7 +1,11 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.util.concurrent.Executor;
 
+import net.sf.briar.api.reliability.ReliabilityLayer;
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
+import net.sf.briar.api.reliability.WriteHandler;
+
 class ReliabilityLayerFactoryImpl implements ReliabilityLayerFactory {
 
 	private final Executor executor;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerImpl.java b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerImpl.java
similarity index 95%
rename from briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerImpl.java
rename to briar-core/src/net/sf/briar/reliability/ReliabilityLayerImpl.java
index 2dc2f801d56171f22f55902b886c7f68ce83b369..825c8ee7ca6aa0589149646cdce5c3ce5abc6556 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayerImpl.java
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityLayerImpl.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.logging.Level.WARNING;
@@ -11,6 +11,9 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.logging.Logger;
 
+import net.sf.briar.api.reliability.ReliabilityLayer;
+import net.sf.briar.api.reliability.WriteHandler;
+
 class ReliabilityLayerImpl implements ReliabilityLayer {
 
 	private static final int TICK_INTERVAL = 500; // Milliseconds
diff --git a/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f8e20034de8273318fa5408e4e6084d06744c2c
--- /dev/null
+++ b/briar-core/src/net/sf/briar/reliability/ReliabilityModule.java
@@ -0,0 +1,14 @@
+package net.sf.briar.reliability;
+
+import net.sf.briar.api.reliability.ReliabilityLayerFactory;
+
+import com.google.inject.AbstractModule;
+
+public class ReliabilityModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(ReliabilityLayerFactory.class).to(
+				ReliabilityLayerFactoryImpl.class);
+	}
+}
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Sender.java b/briar-core/src/net/sf/briar/reliability/Sender.java
similarity index 98%
rename from briar-core/src/net/sf/briar/plugins/modem/Sender.java
rename to briar-core/src/net/sf/briar/reliability/Sender.java
index bb2ad8a7bb4b4d676e2a3ea5b7b4a22f40b3bf32..313c1cb71b4c859a0760869092a828d996189a2a 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Sender.java
+++ b/briar-core/src/net/sf/briar/reliability/Sender.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -6,6 +6,8 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
+import net.sf.briar.api.reliability.WriteHandler;
+
 class Sender {
 
 	// All times are in milliseconds
diff --git a/briar-core/src/net/sf/briar/plugins/modem/SenderOutputStream.java b/briar-core/src/net/sf/briar/reliability/SenderOutputStream.java
similarity index 98%
rename from briar-core/src/net/sf/briar/plugins/modem/SenderOutputStream.java
rename to briar-core/src/net/sf/briar/reliability/SenderOutputStream.java
index bed178ca55e593408214bdcf4f0035873abf0fc9..3f3df7df1d3ca29daebb427097bf462483fda86a 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/SenderOutputStream.java
+++ b/briar-core/src/net/sf/briar/reliability/SenderOutputStream.java
@@ -1,4 +1,4 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 import java.io.OutputStream;
diff --git a/briar-core/src/net/sf/briar/plugins/modem/SlipDecoder.java b/briar-core/src/net/sf/briar/reliability/SlipDecoder.java
similarity index 95%
rename from briar-core/src/net/sf/briar/plugins/modem/SlipDecoder.java
rename to briar-core/src/net/sf/briar/reliability/SlipDecoder.java
index a179f3d0ab44f78260e9bdc3482ba633bec0dc47..cfe3a464e9e84018b3eab80b7d3a1a60ba72165e 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/SlipDecoder.java
+++ b/briar-core/src/net/sf/briar/reliability/SlipDecoder.java
@@ -1,7 +1,9 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 
+import net.sf.briar.api.reliability.ReadHandler;
+
 class SlipDecoder implements ReadHandler {
 
 	// https://tools.ietf.org/html/rfc1055
diff --git a/briar-core/src/net/sf/briar/plugins/modem/SlipEncoder.java b/briar-core/src/net/sf/briar/reliability/SlipEncoder.java
similarity index 92%
rename from briar-core/src/net/sf/briar/plugins/modem/SlipEncoder.java
rename to briar-core/src/net/sf/briar/reliability/SlipEncoder.java
index 0fc327a43f07687b01216eb3f0342c0368ab93e8..4f2459779a167d368651ef2015035f4b796fed55 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/SlipEncoder.java
+++ b/briar-core/src/net/sf/briar/reliability/SlipEncoder.java
@@ -1,7 +1,9 @@
-package net.sf.briar.plugins.modem;
+package net.sf.briar.reliability;
 
 import java.io.IOException;
 
+import net.sf.briar.api.reliability.WriteHandler;
+
 class SlipEncoder implements WriteHandler {
 
 	// https://tools.ietf.org/html/rfc1055
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java b/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java
deleted file mode 100644
index 1a6deac1bb4f7aab579821177575a855a0a9c0a0..0000000000000000000000000000000000000000
--- a/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package net.sf.briar.plugins.modem;
-
-import static java.util.logging.Level.INFO;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Logger;
-
-import net.sf.briar.api.ContactId;
-import net.sf.briar.api.TransportConfig;
-import net.sf.briar.api.TransportProperties;
-import net.sf.briar.plugins.DuplexClientTest;
-
-//This is not a JUnit test - it has to be run manually while the server test
-//is running on another machine
-public class ModemClientTest extends DuplexClientTest {
-
-	private ModemClientTest(Executor executor, String number) {
-		// Store the server's phone number
-		TransportProperties p = new TransportProperties();
-		p.put("number", number);
-		Map<ContactId, TransportProperties> remote =
-				Collections.singletonMap(contactId, p);
-		// Create the plugin
-		callback = new ClientCallback(new TransportConfig(),
-				new TransportProperties(), remote);
-		plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor,
-				new ReliabilityLayerFactoryImpl(executor)), callback, 0L);
-	}
-
-	public static void main(String[] args) throws Exception {
-		if(args.length != 1) {
-			System.err.println("Please specify the server's phone number");
-			System.exit(1);
-		}
-		Logger.getLogger("net.sf.briar").setLevel(INFO);
-		ExecutorService executor = Executors.newCachedThreadPool();
-		try {
-			new ModemClientTest(executor, args[0]).run();
-		} finally {
-			executor.shutdown();
-		}
-	}
-}
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java b/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java
deleted file mode 100644
index 3b2850d707738750515a5e3cd9d0fb01af191d8f..0000000000000000000000000000000000000000
--- a/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.sf.briar.plugins.modem;
-
-import static java.util.logging.Level.INFO;
-
-import java.util.Collections;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Logger;
-
-import net.sf.briar.api.TransportConfig;
-import net.sf.briar.api.TransportProperties;
-import net.sf.briar.plugins.DuplexServerTest;
-
-//This is not a JUnit test - it has to be run manually while the client test
-//is running on another machine
-public class ModemServerTest extends DuplexServerTest {
-
-	private ModemServerTest(Executor executor) {
-		// Create the plugin
-		callback = new ServerCallback(new TransportConfig(),
-				new TransportProperties(), Collections.singletonMap(contactId,
-						new TransportProperties()));
-		plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor,
-				new ReliabilityLayerFactoryImpl(executor)), callback, 0L);
-	}
-
-	public static void main(String[] args) throws Exception {
-		Logger.getLogger("net.sf.briar").setLevel(INFO);
-		ExecutorService executor = Executors.newCachedThreadPool();
-		try {
-			new ModemServerTest(executor).run();
-		} finally {
-			executor.shutdown();
-		}
-	}
-}