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 e61748ab90bae6c38795cb4c41b48e87164f2095..26b28a76b8b6da45eb0700333445df31ee50f814 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ReliabilityLayer.java
@@ -16,28 +16,27 @@ class ReliabilityLayer implements ReadHandler, WriteHandler {
 			Logger.getLogger(ReliabilityLayer.class.getName());
 
 	private final WriteHandler writeHandler;
-	private final Receiver receiver;
-	private final SlipDecoder decoder;
-	private final ReceiverInputStream inputStream;
-	private final SenderOutputStream outputStream;
 	private final BlockingQueue<byte[]> writes;
 
-	private volatile boolean valid = true;
+	private volatile Receiver receiver = null;
+	private volatile SlipDecoder decoder = null;
+	private volatile ReceiverInputStream inputStream = null;
+	private volatile SenderOutputStream outputStream = null;
 	private volatile Thread writer = null;
+	private volatile boolean valid = true;
 
 	ReliabilityLayer(WriteHandler writeHandler) {
 		this.writeHandler = writeHandler;
-		// FIXME: Don't let references to this escape the constructor
+		writes = new LinkedBlockingQueue<byte[]>();
+	}
+
+	void init() {
 		SlipEncoder encoder = new SlipEncoder(this);
 		Sender sender = new Sender(encoder);
 		receiver = new Receiver(sender);
 		decoder = new SlipDecoder(receiver);
 		inputStream = new ReceiverInputStream(receiver);
 		outputStream = new SenderOutputStream(sender);
-		writes = new LinkedBlockingQueue<byte[]>();
-	}
-
-	void init() {
 		writer = new Thread("ReliabilityLayer") {
 			@Override
 			public void run() {