diff --git a/components/net/sf/briar/db/JdbcDatabase.java b/components/net/sf/briar/db/JdbcDatabase.java
index 07b244a77cc745d7c32ea4acab57696643e278c0..16799e6bc3093e0d77f09331bedc724ab606da4a 100644
--- a/components/net/sf/briar/db/JdbcDatabase.java
+++ b/components/net/sf/briar/db/JdbcDatabase.java
@@ -1113,7 +1113,8 @@ abstract class JdbcDatabase implements Database<Connection> {
 			Collection<MessageHeader> headers = new ArrayList<MessageHeader>();
 			while(rs.next()) {
 				MessageId id = new MessageId(rs.getBytes(1));
-				MessageId parent = new MessageId(rs.getBytes(2));
+				byte[] p = rs.getBytes(2);
+				MessageId parent = p == null ? null : new MessageId(p);
 				AuthorId author = new AuthorId(rs.getBytes(3));
 				String subject = rs.getString(4);
 				long timestamp = rs.getLong(5);
diff --git a/test/net/sf/briar/db/H2DatabaseTest.java b/test/net/sf/briar/db/H2DatabaseTest.java
index 29792f445181bacd492c7e02ac54e4dc0e161220..edc59a800e2d42f7d4621c2691107e03ec2829f2 100644
--- a/test/net/sf/briar/db/H2DatabaseTest.java
+++ b/test/net/sf/briar/db/H2DatabaseTest.java
@@ -33,6 +33,7 @@ import net.sf.briar.api.protocol.Group;
 import net.sf.briar.api.protocol.GroupFactory;
 import net.sf.briar.api.protocol.GroupId;
 import net.sf.briar.api.protocol.Message;
+import net.sf.briar.api.protocol.MessageHeader;
 import net.sf.briar.api.protocol.MessageHeaderFactory;
 import net.sf.briar.api.protocol.MessageId;
 import net.sf.briar.api.transport.ConnectionWindow;
@@ -1650,6 +1651,72 @@ public class H2DatabaseTest extends TestCase {
 		db.close();
 	}
 
+	@Test
+	public void testGetMessageHeaders() throws Exception {
+		Database<Connection> db = open(false);
+		Connection txn = db.startTransaction();
+
+		// Subscribe to a group
+		db.addSubscription(txn, group);
+
+		// Store a couple of messages
+		db.addGroupMessage(txn, message);
+		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
+		MessageId parentId = new MessageId(TestUtils.getRandomId());
+		long timestamp1 = System.currentTimeMillis();
+		Message message1 = new TestMessage(messageId1, parentId, groupId,
+				authorId, subject, timestamp1, raw);
+		db.addGroupMessage(txn, message1);
+
+		// Retrieve the message headers
+		Collection<MessageHeader> headers = db.getMessageHeaders(txn, groupId);
+		Iterator<MessageHeader> it = headers.iterator();
+		boolean messageFound = false, message1Found = false;
+		// First header (order is undefined)
+		assertTrue(it.hasNext());
+		MessageHeader header = it.next();
+		if(messageId.equals(header.getId())) {
+			assertHeadersAreEqual(message, header);
+			messageFound = true;
+		} else if(messageId1.equals(header.getId())) {
+			assertHeadersAreEqual(message1, header);
+			message1Found = true;
+		} else {
+			fail();
+		}
+		// Second header
+		assertTrue(it.hasNext());
+		header = it.next();
+		if(messageId.equals(header.getId())) {
+			assertHeadersAreEqual(message, header);
+			messageFound = true;
+		} else if(messageId1.equals(header.getId())) {
+			assertHeadersAreEqual(message1, header);
+			message1Found = true;
+		} else {
+			fail();
+		}
+		// No more headers
+		assertFalse(it.hasNext());
+		assertTrue(messageFound);
+		assertTrue(message1Found);
+
+		db.commitTransaction(txn);
+		db.close();
+	}
+
+	private void assertHeadersAreEqual(MessageHeader h1, MessageHeader h2) {
+		assertEquals(h1.getId(), h2.getId());
+		if(h1.getParent() == null) assertNull(h2.getParent());
+		else assertEquals(h1.getParent(), h2.getParent());
+		if(h1.getGroup() == null) assertNull(h2.getGroup());
+		else assertEquals(h1.getGroup(), h2.getGroup());
+		if(h1.getAuthor() == null) assertNull(h2.getAuthor());
+		else assertEquals(h1.getAuthor(), h2.getAuthor());
+		assertEquals(h1.getSubject(), h2.getSubject());
+		assertEquals(h1.getTimestamp(), h2.getTimestamp());
+	}
+
 	@Test
 	public void testExceptionHandling() throws Exception {
 		Database<Connection> db = open(false);