diff --git a/components/net/sf/briar/transport/stream/OutgoingStreamConnection.java b/components/net/sf/briar/transport/stream/OutgoingStreamConnection.java
index 146f925851b4ec3896a42825f8946044462d7812..f7793de70ee0f2059d65b3bbb1760259a9edfb7f 100644
--- a/components/net/sf/briar/transport/stream/OutgoingStreamConnection.java
+++ b/components/net/sf/briar/transport/stream/OutgoingStreamConnection.java
@@ -18,7 +18,7 @@ public class OutgoingStreamConnection extends StreamConnection {
 
 	private final TransportId transportId;
 
-	private long connectionNum = -1L;
+	private long connectionNum = -1L; // Locking: this
 
 	OutgoingStreamConnection(ConnectionReaderFactory connReaderFactory,
 			ConnectionWriterFactory connWriterFactory, DatabaseComponent db,
@@ -33,8 +33,10 @@ public class OutgoingStreamConnection extends StreamConnection {
 	@Override
 	protected ConnectionReader createConnectionReader() throws DbException,
 	IOException {
-		if(connectionNum == -1L)
-			connectionNum = db.getConnectionNumber(contactId, transportId);
+		synchronized(this) {
+			if(connectionNum == -1L)
+				connectionNum = db.getConnectionNumber(contactId, transportId);
+		}
 		byte[] secret = db.getSharedSecret(contactId);
 		return connReaderFactory.createConnectionReader(
 				connection.getInputStream(), false, transportId, connectionNum,
@@ -44,8 +46,10 @@ public class OutgoingStreamConnection extends StreamConnection {
 	@Override
 	protected ConnectionWriter createConnectionWriter() throws DbException,
 	IOException {
-		if(connectionNum == -1L)
-			connectionNum = db.getConnectionNumber(contactId, transportId);
+		synchronized(this) {
+			if(connectionNum == -1L)
+				connectionNum = db.getConnectionNumber(contactId, transportId);
+		}
 		byte[] secret = db.getSharedSecret(contactId);
 		return connWriterFactory.createConnectionWriter(
 				connection.getOutputStream(), Long.MAX_VALUE, true, transportId,