diff --git a/src/net/sf/briar/plugins/modem/ModemImpl.java b/src/net/sf/briar/plugins/modem/ModemImpl.java
index eb8542259931badac7ca8d5b35904ad8024ea0f1..82ac37e5de306cc90a7911fe115dec422e864a3b 100644
--- a/src/net/sf/briar/plugins/modem/ModemImpl.java
+++ b/src/net/sf/briar/plugins/modem/ModemImpl.java
@@ -36,11 +36,12 @@ class ModemImpl implements Modem, SerialPortEventListener {
 	private final SerialPort port;
 	private final AtomicBoolean initialised, connected;
 	private final Semaphore offHook;
-	private final BlockingQueue<byte[]> received;
 	private final byte[] line;
 
 	private int lineLen = 0;
 
+	private volatile BlockingQueue<byte[]> received = null;
+
 	ModemImpl(Executor executor, Callback callback, String portName) {
 		this.executor = executor;
 		this.callback = callback;
@@ -48,7 +49,6 @@ class ModemImpl implements Modem, SerialPortEventListener {
 		initialised = new AtomicBoolean(false);
 		offHook = new Semaphore(1);
 		connected = new AtomicBoolean(false);
-		received = new LinkedBlockingQueue<byte[]>();
 		line = new byte[MAX_LINE_LENGTH];
 	}
 
@@ -92,6 +92,7 @@ class ModemImpl implements Modem, SerialPortEventListener {
 			Thread.currentThread().interrupt();
 			throw new IOException("Interrupted while initialising modem");
 		}
+		received = new LinkedBlockingQueue<byte[]>();
 	}
 
 	public boolean dial(String number) throws IOException {
@@ -124,7 +125,7 @@ class ModemImpl implements Modem, SerialPortEventListener {
 	}
 
 	public InputStream getInputStream() {
-		return new ModemInputStream();
+		return new ModemInputStream(received);
 	}
 
 	public OutputStream getOutputStream() {
@@ -140,6 +141,7 @@ class ModemImpl implements Modem, SerialPortEventListener {
 			throw new IOException(e.toString());
 		}
 		received.add(new byte[0]); // Empty buffer indicates EOF
+		received = new LinkedBlockingQueue<byte[]>();
 		connected.set(false);
 		offHook.release();
 	}
@@ -246,9 +248,15 @@ class ModemImpl implements Modem, SerialPortEventListener {
 
 	private class ModemInputStream extends InputStream {
 
+		private final BlockingQueue<byte[]> received;
+
 		private byte[] buf = null;
 		private int offset = 0;
 
+		private ModemInputStream(BlockingQueue<byte[]> received) {
+			this.received = received;
+		}
+
 		@Override
 		public int read() throws IOException {
 			getBufferIfNecessary();