diff --git a/briar-api/src/org/briarproject/api/data/BdfDictionary.java b/briar-api/src/org/briarproject/api/data/BdfDictionary.java
index 54a20f6f51b71fffb9f63e5d6b4c1c8e5430d7b3..113d0334c2c4fcc5797349213c99f4f9d450d3a6 100644
--- a/briar-api/src/org/briarproject/api/data/BdfDictionary.java
+++ b/briar-api/src/org/briarproject/api/data/BdfDictionary.java
@@ -1,5 +1,6 @@
 package org.briarproject.api.data;
 
+import org.briarproject.api.Bytes;
 import org.briarproject.api.FormatException;
 
 import java.util.Hashtable;
@@ -23,24 +24,32 @@ public class BdfDictionary extends Hashtable<String, Object> {
 	public Long getInteger(String key) throws FormatException {
 		Object o = get(key);
 		if (o instanceof Long) return (Long) o;
+		if (o instanceof Integer) return ((Integer) o).longValue();
+		if (o instanceof Short) return ((Short) o).longValue();
+		if (o instanceof Byte) return ((Byte) o).longValue();
 		throw new FormatException();
 	}
 
 	public Long getInteger(String key, Long defaultValue) {
 		Object o = get(key);
 		if (o instanceof Long) return (Long) o;
+		if (o instanceof Integer) return ((Integer) o).longValue();
+		if (o instanceof Short) return ((Short) o).longValue();
+		if (o instanceof Byte) return ((Byte) o).longValue();
 		return defaultValue;
 	}
 
 	public Double getFloat(String key) throws FormatException {
 		Object o = get(key);
 		if (o instanceof Double) return (Double) o;
+		if (o instanceof Float) return ((Float) o).doubleValue();
 		throw new FormatException();
 	}
 
 	public Double getFloat(String key, Double defaultValue) {
 		Object o = get(key);
 		if (o instanceof Double) return (Double) o;
+		if (o instanceof Float) return ((Float) o).doubleValue();
 		return defaultValue;
 	}
 
@@ -59,12 +68,14 @@ public class BdfDictionary extends Hashtable<String, Object> {
 	public byte[] getRaw(String key) throws FormatException {
 		Object o = get(key);
 		if (o instanceof byte[]) return (byte[]) o;
+		if (o instanceof Bytes) return ((Bytes) o).getBytes();
 		throw new FormatException();
 	}
 
 	public byte[] getRaw(String key, byte[] defaultValue) {
 		Object o = get(key);
 		if (o instanceof byte[]) return (byte[]) o;
+		if (o instanceof Bytes) return ((Bytes) o).getBytes();
 		return defaultValue;
 	}
 
diff --git a/briar-api/src/org/briarproject/api/data/BdfList.java b/briar-api/src/org/briarproject/api/data/BdfList.java
index 2caa597ec65103c4da429867c878bfa82ca0ac16..a9c7a4344118ef7a3b3af4602c0d4c476aa71cfb 100644
--- a/briar-api/src/org/briarproject/api/data/BdfList.java
+++ b/briar-api/src/org/briarproject/api/data/BdfList.java
@@ -1,5 +1,6 @@
 package org.briarproject.api.data;
 
+import org.briarproject.api.Bytes;
 import org.briarproject.api.FormatException;
 
 import java.util.Vector;
@@ -21,24 +22,32 @@ public class BdfList extends Vector<Object> {
 	public Long getInteger(int index) throws FormatException {
 		Object o = get(index);
 		if (o instanceof Long) return (Long) o;
+		if (o instanceof Integer) return ((Integer) o).longValue();
+		if (o instanceof Short) return ((Short) o).longValue();
+		if (o instanceof Byte) return ((Byte) o).longValue();
 		throw new FormatException();
 	}
 
 	public Long getInteger(int index, Long defaultValue) {
 		Object o = get(index);
 		if (o instanceof Long) return (Long) o;
+		if (o instanceof Integer) return ((Integer) o).longValue();
+		if (o instanceof Short) return ((Short) o).longValue();
+		if (o instanceof Byte) return ((Byte) o).longValue();
 		return defaultValue;
 	}
 
 	public Double getFloat(int index) throws FormatException {
 		Object o = get(index);
 		if (o instanceof Double) return (Double) o;
+		if (o instanceof Float) return ((Float) o).doubleValue();
 		throw new FormatException();
 	}
 
 	public Double getFloat(int index, Double defaultValue) {
 		Object o = get(index);
 		if (o instanceof Double) return (Double) o;
+		if (o instanceof Float) return ((Float) o).doubleValue();
 		return defaultValue;
 	}
 
@@ -57,12 +66,14 @@ public class BdfList extends Vector<Object> {
 	public byte[] getRaw(int index) throws FormatException {
 		Object o = get(index);
 		if (o instanceof byte[]) return (byte[]) o;
+		if (o instanceof Bytes) return ((Bytes) o).getBytes();
 		throw new FormatException();
 	}
 
 	public byte[] getRaw(int index, byte[] defaultValue) {
 		Object o = get(index);
 		if (o instanceof byte[]) return (byte[]) o;
+		if (o instanceof Bytes) return ((Bytes) o).getBytes();
 		return defaultValue;
 	}
 
diff --git a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java b/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
index e70070391bdbcad505ac24eaf7b640e55890fca9..1de4c8ef62e41cb0c538e0ffcb0c58b08cd0eefb 100644
--- a/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
+++ b/briar-core/src/org/briarproject/data/MetadataEncoderImpl.java
@@ -1,5 +1,6 @@
 package org.briarproject.data;
 
+import org.briarproject.api.Bytes;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.data.BdfDictionary;
 import org.briarproject.api.data.MetadataEncoder;
@@ -62,6 +63,7 @@ class MetadataEncoderImpl implements MetadataEncoder {
 		else if (o instanceof Double) encodeFloat(out, (Double) o);
 		else if (o instanceof String) encodeString(out, (String) o);
 		else if (o instanceof byte[]) encodeRaw(out, (byte[]) o);
+		else if (o instanceof Bytes) encodeRaw(out, ((Bytes) o).getBytes());
 		else if (o instanceof List) encodeList(out, (List) o);
 		else if (o instanceof Map) encodeDictionary(out, (Map) o);
 		else throw new FormatException();