diff --git a/briar-api/src/net/sf/briar/api/db/MessageHeader.java b/briar-api/src/net/sf/briar/api/db/MessageHeader.java
index 313377ab0191424163fbe252aabb63dab668b083..7d9190227708a906ba7f389f8295c176c118e234 100644
--- a/briar-api/src/net/sf/briar/api/db/MessageHeader.java
+++ b/briar-api/src/net/sf/briar/api/db/MessageHeader.java
@@ -4,32 +4,74 @@ import net.sf.briar.api.messaging.AuthorId;
 import net.sf.briar.api.messaging.GroupId;
 import net.sf.briar.api.messaging.MessageId;
 
-public interface MessageHeader {
+public class MessageHeader {
+
+	private final MessageId id, parent;
+	private final GroupId group;
+	private final AuthorId author;
+	private final String subject;
+	private final long timestamp;
+	private final boolean read, starred;
+
+	public MessageHeader(MessageId id, MessageId parent, GroupId group,
+			AuthorId author, String subject, long timestamp, boolean read,
+			boolean starred) {
+		this.id = id;
+		this.parent = parent;
+		this.group = group;
+		this.author = author;
+		this.subject = subject;
+		this.timestamp = timestamp;
+		this.read = read;
+		this.starred = starred;
+	}
 
 	/** Returns the message's unique identifier. */
-	MessageId getId();
+	public MessageId getId() {
+		return id;
+	}
 
 	/**
 	 * Returns the message's parent, or null if this is the first message in a
 	 * thread.
 	 */
-	MessageId getParent();
+	public MessageId getParent() {
+		return parent;
+	}
 
-	/** Returns the group to which the message belongs. */
-	GroupId getGroup();
+	/**
+	 * Returns the ID of the group to which the message belongs, or null if
+	 * this is a private message.
+	 */
+	public GroupId getGroup() {
+		return group;
+	}
 
-	/** Returns the message's author. */
-	AuthorId getAuthor();
+	/**
+	 * Returns the ID of the message's author, or null if this is an
+	 * anonymous message.
+	 */
+	public AuthorId getAuthor() {
+		return author;
+	}
 
 	/** Returns the message's subject line. */
-	String getSubject();
+	public String getSubject() {
+		return subject;
+	}
 
 	/** Returns the timestamp created by the message's author. */
-	long getTimestamp();
+	public long getTimestamp() {
+		return timestamp;
+	}
 
 	/** Returns true if the message has been read. */
-	boolean getRead();
+	public boolean getRead() {
+		return read;
+	}
 
 	/** Returns true if the message has been starred. */
-	boolean getStarred();
+	public boolean getStarred() {
+		return starred;
+	}
 }
diff --git a/briar-core/src/net/sf/briar/db/JdbcDatabase.java b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
index 28ddeb940124d966a78a9e437e0729da8a6a0d61..f7e7f5e34e294618a37a75fb6d200a1d29f5da29 100644
--- a/briar-core/src/net/sf/briar/db/JdbcDatabase.java
+++ b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
@@ -1189,7 +1189,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 			if(rs.next()) throw new DbStateException();
 			rs.close();
 			ps.close();
-			return new MessageHeaderImpl(m, parent, group, author, subject,
+			return new MessageHeader(m, parent, group, author, subject,
 					timestamp, read, starred);
 		} catch(SQLException e) {
 			tryToClose(rs);
@@ -1220,8 +1220,8 @@ abstract class JdbcDatabase implements Database<Connection> {
 				long timestamp = rs.getLong(5);
 				boolean read = rs.getBoolean(6);
 				boolean starred = rs.getBoolean(7);
-				headers.add(new MessageHeaderImpl(id, parent, g, author,
-						subject, timestamp, read, starred));
+				headers.add(new MessageHeader(id, parent, g, author, subject,
+						timestamp, read, starred));
 			}
 			rs.close();
 			ps.close();
diff --git a/briar-core/src/net/sf/briar/db/MessageHeaderImpl.java b/briar-core/src/net/sf/briar/db/MessageHeaderImpl.java
deleted file mode 100644
index 7cb201a848b26326135a4b0a866edf34e00d0734..0000000000000000000000000000000000000000
--- a/briar-core/src/net/sf/briar/db/MessageHeaderImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.sf.briar.db;
-
-import net.sf.briar.api.db.MessageHeader;
-import net.sf.briar.api.messaging.AuthorId;
-import net.sf.briar.api.messaging.GroupId;
-import net.sf.briar.api.messaging.MessageId;
-
-class MessageHeaderImpl implements MessageHeader {
-
-	private final MessageId id, parent;
-	private final GroupId group;
-	private final AuthorId author;
-	private final String subject;
-	private final long timestamp;
-	private final boolean read, starred;
-
-	MessageHeaderImpl(MessageId id, MessageId parent, GroupId group,
-			AuthorId author, String subject, long timestamp, boolean read,
-			boolean starred) {
-		this.id = id;
-		this.parent = parent;
-		this.group = group;
-		this.author = author;
-		this.subject = subject;
-		this.timestamp = timestamp;
-		this.read = read;
-		this.starred = starred;
-	}
-
-	public MessageId getId() {
-		return id;
-	}
-
-	public MessageId getParent() {
-		return parent;
-	}
-
-	public GroupId getGroup() {
-		return group;
-	}
-
-	public AuthorId getAuthor() {
-		return author;
-	}
-
-	public String getSubject() {
-		return subject;
-	}
-
-	public long getTimestamp() {
-		return timestamp;
-	}
-
-	public boolean getRead() {
-		return read;
-	}
-
-	public boolean getStarred() {
-		return starred;
-	}
-}