diff --git a/components/net/sf/briar/db/JdbcDatabase.java b/components/net/sf/briar/db/JdbcDatabase.java
index 40d519045ff42e6b59e49c2cf53eefe52ade52cc..7dcff3b5d0e4dd89ac98a46f00628cbe5aa29fe5 100644
--- a/components/net/sf/briar/db/JdbcDatabase.java
+++ b/components/net/sf/briar/db/JdbcDatabase.java
@@ -1454,10 +1454,13 @@ abstract class JdbcDatabase implements Database<Connection> {
 		PreparedStatement ps = null;
 		ResultSet rs = null;
 		try {
-			String sql = "SELECT contactId, key, value"
-				+ " FROM contactTransportProperties"
-				+ " WHERE transportId = ?"
-				+ " ORDER BY contactId";
+			String sql = "SELECT contactTransports.contactId, key, value"
+				+ " FROM contactTransports"
+				+ " LEFT OUTER JOIN contactTransportProperties"
+				+ " ON contactTransports.transportId"
+				+ " = contactTransportProperties.transportId"
+				+ " WHERE contactTransports.transportId = ?"
+				+ " ORDER BY contactTransports.contactId";
 			ps = txn.prepareStatement(sql);
 			ps.setBytes(1, t.getBytes());
 			rs = ps.executeQuery();
@@ -1471,7 +1474,10 @@ abstract class JdbcDatabase implements Database<Connection> {
 					p = new TransportProperties();
 					properties.put(id, p);
 				}
-				p.put(rs.getString(2), rs.getString(3));
+				// Key and value may be null due to the left outer join
+				String key = rs.getString(2);
+				String value = rs.getString(3);
+				if(key != null && value != null) p.put(key, value);
 			}
 			rs.close();
 			ps.close();
diff --git a/test/net/sf/briar/db/H2DatabaseTest.java b/test/net/sf/briar/db/H2DatabaseTest.java
index e8d0248fa5251326b23109442fc774ee2cbed157..11020c3178e1cd039ed7e93cbf4ee8a7facb1a32 100644
--- a/test/net/sf/briar/db/H2DatabaseTest.java
+++ b/test/net/sf/briar/db/H2DatabaseTest.java
@@ -999,7 +999,7 @@ public class H2DatabaseTest extends TestCase {
 		Database<Connection> db = open(false);
 		Connection txn = db.startTransaction();
 
-		// Add a contact with some transport properties
+		// Add a contact with a transport
 		assertEquals(contactId, db.addContact(txn, secret));
 		db.setTransports(txn, contactId, remoteTransports, 1);
 		assertEquals(remoteProperties,
@@ -1018,8 +1018,17 @@ public class H2DatabaseTest extends TestCase {
 		assertEquals(remoteProperties1,
 				db.getRemoteProperties(txn, transportId));
 
-		// Remove the transport properties
-		db.setTransports(txn, contactId, Collections.<Transport>emptyList(), 3);
+		// Remove the transport properties but leave the transport
+		properties1 = new TransportProperties();
+		remoteTransport1 = new Transport(transportId, remoteIndex, properties1);
+		remoteTransports1 = Collections.singletonList(remoteTransport1);
+		remoteProperties1 = Collections.singletonMap(contactId, properties1);
+		db.setTransports(txn, contactId, remoteTransports1, 3);
+		assertEquals(remoteProperties1,
+				db.getRemoteProperties(txn, transportId));
+
+		// Remove the transport
+		db.setTransports(txn, contactId, Collections.<Transport>emptyList(), 4);
 		assertEquals(Collections.emptyMap(),
 				db.getRemoteProperties(txn, transportId));
 
@@ -1035,13 +1044,12 @@ public class H2DatabaseTest extends TestCase {
 		// Allocate a transport index
 		assertEquals(localIndex, db.addTransport(txn, transportId));
 
-		// Set the local transport properties
+		// Set the transport properties
 		db.setLocalProperties(txn, transportId, properties);
 		assertEquals(Collections.singletonList(properties),
 				db.getLocalTransports(txn));
 
-		// Remove the local transport properties - the transport itself will
-		// not be removed
+		// Remove the transport properties but leave the transport
 		db.setLocalProperties(txn, transportId, new TransportProperties());
 		assertEquals(Collections.singletonList(Collections.emptyMap()),
 				db.getLocalTransports(txn));
@@ -1084,7 +1092,7 @@ public class H2DatabaseTest extends TestCase {
 		Database<Connection> db = open(false);
 		Connection txn = db.startTransaction();
 
-		// Add a contact with some transport properties
+		// Add a contact with a transport
 		assertEquals(contactId, db.addContact(txn, secret));
 		db.setTransports(txn, contactId, remoteTransports, 1);
 		assertEquals(remoteProperties,