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 45ca855b2e119acb149edf20bb5a82bd8690484a..b61aacd97c8791490d0be62ea923bb64c4630b7b 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemImpl.java
@@ -49,7 +49,6 @@ 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 {
@@ -92,12 +91,8 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 	}
 
 	public void stop() throws IOException {
-		if(offHook.tryAcquire()) {
-			reliabilityLayer.stop();
-			offHook.release();
-		} else {
-			hangUp();
-		}
+		if(offHook.tryAcquire()) offHook.release();
+		else hangUp();
 		try {
 			port.closePort();
 		} catch(SerialPortException e) {
@@ -111,6 +106,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 				LOG.info("Not dialling - call in progress");
 			return false;
 		}
+		reliabilityLayer.start();
 		if(LOG.isLoggable(INFO)) LOG.info("Dialling");
 		try {
 			port.writeBytes(("ATDT" + number + "\r\n").getBytes("US-ASCII"));
@@ -150,7 +146,6 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 		}
 		reliabilityLayer.stop();
 		reliabilityLayer = new ReliabilityLayer(this);
-		reliabilityLayer.start();
 		connected.set(false);
 		offHook.release();
 	}
@@ -244,6 +239,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
 				LOG.info("Not answering - call in progress");
 			return;
 		}
+		reliabilityLayer.start();
 		if(LOG.isLoggable(INFO)) LOG.info("Answering");
 		try {
 			port.writeBytes("ATA\r\n".getBytes("US-ASCII"));