diff --git a/briar-api/src/net/sf/briar/api/ContactId.java b/briar-api/src/net/sf/briar/api/ContactId.java
index d8a9f7a388c4ab7f1df97bec91c0c61766670e8b..7875f596d4255dd74f2451ed16b2c365271e70b5 100644
--- a/briar-api/src/net/sf/briar/api/ContactId.java
+++ b/briar-api/src/net/sf/briar/api/ContactId.java
@@ -17,13 +17,13 @@ public class ContactId {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		if(o instanceof ContactId) return id == ((ContactId) o).id;
-		return false;
+	public int hashCode() {
+		return id;
 	}
 
 	@Override
-	public int hashCode() {
-		return id;
+	public boolean equals(Object o) {
+		if(o instanceof ContactId) return id == ((ContactId) o).id;
+		return false;
 	}
 }
diff --git a/briar-api/src/net/sf/briar/api/protocol/Transport.java b/briar-api/src/net/sf/briar/api/protocol/Transport.java
index 707d84fa7ef8e5c95e934b0024ac24fd089f8d51..4ac071160b95a1d5ce3e7e28cb68c4f26473d365 100644
--- a/briar-api/src/net/sf/briar/api/protocol/Transport.java
+++ b/briar-api/src/net/sf/briar/api/protocol/Transport.java
@@ -3,37 +3,40 @@ package net.sf.briar.api.protocol;
 import java.util.Map;
 import java.util.TreeMap;
 
-public class Transport extends TreeMap<String, String> {
-
-	private static final long serialVersionUID = 4900420175715429560L;
+public class Transport {
 
 	private final TransportId id;
+	private final TreeMap<String, String> properties;
 
 	public Transport(TransportId id, Map<String, String> p) {
-		super(p);
 		this.id = id;
+		properties = new TreeMap<String, String>(p);
 	}
 
 	public Transport(TransportId id) {
-		super();
 		this.id = id;
+		properties = new TreeMap<String, String>();
 	}
 
 	public TransportId getId() {
 		return id;
 	}
 
-	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public Map<String, String> getProperties() {
+		return properties;
 	}
 
 	@Override
 	public boolean equals(Object o) {
 		if(o instanceof Transport) {
 			Transport t = (Transport) o;
-			return id.equals(t.id) && super.equals(o);
+			return id.equals(t.id) && properties.equals(t.properties);
 		}
 		return false;
 	}
+
+	@Override
+	public int hashCode() {
+		return id.hashCode();
+	}
 }
diff --git a/briar-core/src/net/sf/briar/db/JdbcDatabase.java b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
index 49a336cabb67b15644e09cd5562b2e2102ea05ca..f44accc83a35922a20d4fca113c173884ed4881e 100644
--- a/briar-core/src/net/sf/briar/db/JdbcDatabase.java
+++ b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
@@ -1207,7 +1207,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 					t = new Transport(id);
 					transports.add(t);
 				}
-				t.put(rs.getString(2), rs.getString(3));
+				t.getProperties().put(rs.getString(2), rs.getString(3));
 				lastId = id;
 			}
 			rs.close();
@@ -2763,7 +2763,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 			int batchSize = 0;
 			for(Transport t : transports) {
 				ps.setBytes(2, t.getId().getBytes());
-				for(Entry<String, String> e1 : t.entrySet()) {
+				for(Entry<String, String> e1 : t.getProperties().entrySet()) {
 					ps.setString(3, e1.getKey());
 					ps.setString(4, e1.getValue());
 					ps.addBatch();
diff --git a/briar-core/src/net/sf/briar/protocol/GroupImpl.java b/briar-core/src/net/sf/briar/protocol/GroupImpl.java
index 88f63622d82873303953c8305202a117842a4ad9..d3a84ba5ac8df3eae511d476736dfbc76a5459bb 100644
--- a/briar-core/src/net/sf/briar/protocol/GroupImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/GroupImpl.java
@@ -28,12 +28,12 @@ class GroupImpl implements Group {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Group && id.equals(((Group) o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Group && id.equals(((Group) o).getId());
 	}
 }
diff --git a/briar-core/src/net/sf/briar/protocol/MessageImpl.java b/briar-core/src/net/sf/briar/protocol/MessageImpl.java
index 505f9e621848441ed5a460baaae9f924e526d754..3b6c739c23fda76de5137ab5c8766a008feec6e8 100644
--- a/briar-core/src/net/sf/briar/protocol/MessageImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/MessageImpl.java
@@ -72,12 +72,12 @@ class MessageImpl implements Message {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Message && id.equals(((Message) o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Message && id.equals(((Message) o).getId());
 	}
 }
diff --git a/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java b/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
index d7bebf4e2e64c5edb3b39aa82e735ab919272605..fd100d561edd0c93861dbfd3459f2a53b9d73eed 100644
--- a/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
@@ -148,7 +148,7 @@ class ProtocolWriterImpl implements ProtocolWriter {
 		for(Transport p : t.getTransports()) {
 			w.writeStructId(Types.TRANSPORT);
 			w.writeBytes(p.getId().getBytes());
-			w.writeMap(p);
+			w.writeMap(p.getProperties());
 		}
 		w.writeListEnd();
 		w.writeInt64(t.getTimestamp());
diff --git a/briar-tests/src/net/sf/briar/db/TestMessage.java b/briar-tests/src/net/sf/briar/db/TestMessage.java
index 4dbe7584a5b6296beafa3ccc47d8352ed6e869ea..bf25200e04bcb18f5deb916718fd78182f270594 100644
--- a/briar-tests/src/net/sf/briar/db/TestMessage.java
+++ b/briar-tests/src/net/sf/briar/db/TestMessage.java
@@ -78,12 +78,12 @@ class TestMessage implements Message {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Message && id.equals(((Message)o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Message && id.equals(((Message)o).getId());
 	}
 }
diff --git a/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java b/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
index e4c6af3a1a9a52e32c31819b974701b0521addd4..5a438af49572a63ca6cb24d734b2d809e68f474d 100644
--- a/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
+++ b/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
@@ -15,6 +15,7 @@ import java.security.PrivateKey;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 
 import net.sf.briar.BriarTestCase;
 import net.sf.briar.TestUtils;
@@ -158,10 +159,11 @@ public class ConstantsTest extends BriarTestCase {
 		for(int i = 0; i < MAX_TRANSPORTS; i++) {
 			TransportId id = new TransportId(TestUtils.getRandomId());
 			Transport t = new Transport(id);
+			Map<String, String> m = t.getProperties();
 			for(int j = 0; j < MAX_PROPERTIES_PER_TRANSPORT; j++) {
 				String key = createRandomString(MAX_PROPERTY_LENGTH);
 				String value = createRandomString(MAX_PROPERTY_LENGTH);
-				t.put(key, value);
+				m.put(key, value);
 			}
 			transports.add(t);
 		}