diff --git a/briar-api/src/org/briarproject/api/data/BdfDictionary.java b/briar-api/src/org/briarproject/api/data/BdfDictionary.java
index dd260f30fef71c6d18675b1ff9f9e3caca80f0c8..54a20f6f51b71fffb9f63e5d6b4c1c8e5430d7b3 100644
--- a/briar-api/src/org/briarproject/api/data/BdfDictionary.java
+++ b/briar-api/src/org/briarproject/api/data/BdfDictionary.java
@@ -2,10 +2,11 @@ package org.briarproject.api.data;
 
 import org.briarproject.api.FormatException;
 
-import java.util.HashMap;
+import java.util.Hashtable;
 
-// This class is not thread-safe
-public class BdfDictionary extends HashMap<String, Object> {
+public class BdfDictionary extends Hashtable<String, Object> {
+
+	public static final Object NULL_VALUE = new Object();
 
 	public Boolean getBoolean(String key) throws FormatException {
 		Object o = get(key);
diff --git a/briar-api/src/org/briarproject/api/data/BdfList.java b/briar-api/src/org/briarproject/api/data/BdfList.java
index c18e7922bc6a2ad8590f2ba726f16f3107723897..2caa597ec65103c4da429867c878bfa82ca0ac16 100644
--- a/briar-api/src/org/briarproject/api/data/BdfList.java
+++ b/briar-api/src/org/briarproject/api/data/BdfList.java
@@ -2,10 +2,9 @@ package org.briarproject.api.data;
 
 import org.briarproject.api.FormatException;
 
-import java.util.ArrayList;
+import java.util.Vector;
 
-// This class is not thread-safe
-public class BdfList extends ArrayList<Object> {
+public class BdfList extends Vector<Object> {
 
 	public Boolean getBoolean(int index) throws FormatException {
 		Object o = get(index);
diff --git a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java b/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
index f476df113476a9bf234c43a3891b9a28a5771d62..e70070391bdbcad505ac24eaf7b640e55890fca9 100644
--- a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
+++ b/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
@@ -11,6 +11,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
 import static org.briarproject.api.db.Metadata.REMOVE;
 import static org.briarproject.data.Types.DICTIONARY;
 import static org.briarproject.data.Types.END;
@@ -37,7 +38,7 @@ class MetadataEncoderImpl implements MetadataEncoder {
 		Metadata m = new Metadata();
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		for (Entry<String, Object> e : d.entrySet()) {
-			if (e.getValue() == null) {
+			if (e.getValue() == NULL_VALUE) {
 				// Special case: if the value is null, the key is being removed
 				m.put(e.getKey(), REMOVE);
 			} else {
@@ -51,7 +52,7 @@ class MetadataEncoderImpl implements MetadataEncoder {
 
 	private void encodeObject(ByteArrayOutputStream out, Object o)
 			throws FormatException {
-		if (o == null) out.write(NULL);
+		if (o == NULL_VALUE) out.write(NULL);
 		else if (o instanceof Boolean) out.write((Boolean) o ? TRUE : FALSE);
 		else if (o instanceof Byte) encodeInteger(out, (Byte) o);
 		else if (o instanceof Short) encodeInteger(out, (Short) o);
diff --git a/briar-core/src/org/briarproject/data/MetadataParserImpl.java b/briar-core/src/org/briarproject/data/MetadataParserImpl.java
index dec56f4eb307eae450d4ddb50681941a8e9a8ea1..eadaa34771ac34d624ec9a137cbdfbe31b7a8b9c 100644
--- a/briar-core/src/org/briarproject/data/MetadataParserImpl.java
+++ b/briar-core/src/org/briarproject/data/MetadataParserImpl.java
@@ -10,6 +10,7 @@ import org.briarproject.util.StringUtils;
 import java.io.ByteArrayInputStream;
 import java.util.Map.Entry;
 
+import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
 import static org.briarproject.api.db.Metadata.REMOVE;
 import static org.briarproject.data.Types.DICTIONARY;
 import static org.briarproject.data.Types.END;
@@ -40,7 +41,7 @@ class MetadataParserImpl implements MetadataParser {
 	}
 
 	private Object parseValue(byte[] b) throws FormatException {
-		if (b == REMOVE) return null;
+		if (b == REMOVE) return NULL_VALUE;
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
 		Object o = parseObject(in);
 		if (in.available() > 0) throw new FormatException();
@@ -50,7 +51,7 @@ class MetadataParserImpl implements MetadataParser {
 	private Object parseObject(ByteArrayInputStream in) throws FormatException {
 		switch(in.read()) {
 			case NULL:
-				return null;
+				return NULL_VALUE;
 			case TRUE:
 				return Boolean.TRUE;
 			case FALSE: