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 29612322874cc9d976ee1a9c30140b54fa41cc09..45ca855b2e119acb149edf20bb5a82bd8690484a 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
@@ -49,6 +49,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 		connected = new AtomicBoolean(false);
 		line = new byte[MAX_LINE_LENGTH];
 		reliabilityLayer = new ReliabilityLayer(this);
+		reliabilityLayer.start();
 	}
 
 	public void start() throws IOException {
@@ -69,7 +70,6 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 			}
 			if(!foundBaudRate)
 				throw new IOException("Could not find a suitable baud rate");
-			reliabilityLayer.start();
 			port.addEventListener(this);
 			port.purgePort(PURGE_RXCLEAR | PURGE_TXCLEAR);
 			port.writeBytes("ATZ\r\n".getBytes("US-ASCII")); // Reset
@@ -150,6 +150,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 		}
 		reliabilityLayer.stop();
 		reliabilityLayer = new ReliabilityLayer(this);
+		reliabilityLayer.start();
 		connected.set(false);
 		offHook.release();
 	}
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
index 838c9c46b8516a905f0a769cc4bb53ed5ca460d7..edf67ac576edf81f7afba4c7ff477367c148abfb 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
@@ -70,6 +70,7 @@ class ReliabilityLayer implements ReadHandler, WriteHandler {
 	}
 
 	void stop() {
+		if(!running) throw new IllegalStateException();
 		running = false;
 		receiver.invalidate();
 		writes.add(new byte[0]); // Poison pill