diff --git a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
index 123d8e4b16ae98100ca856778314eacfdc4c98de..3f123566f7ea4af22c31b18cd4de727850567a16 100644
--- a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
+++ b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
@@ -262,7 +262,7 @@ public interface DatabaseComponent {
 	byte[] getRawMessage(Transaction txn, MessageId m) throws DbException;
 
 	/**
-	 * Returns the metadata for all messages in the given group.
+	 * Returns the metadata for all delivered messages in the given group.
 	 * <p/>
 	 * Read-only.
 	 */
@@ -280,13 +280,22 @@ public interface DatabaseComponent {
 			Metadata query) throws DbException;
 
 	/**
-	 * Returns the metadata for the given message.
+	 * Returns the metadata for the given delivered message.
 	 * <p/>
 	 * Read-only.
 	 */
 	Metadata getMessageMetadata(Transaction txn, MessageId m)
 			throws DbException;
 
+	/**
+	 * Returns the metadata for the given delivered and pending message.
+	 * This is meant to be only used by the ValidationManager
+	 * <p/>
+	 * Read-only.
+	 */
+	Metadata getMessageMetadataForValidator(Transaction txn, MessageId m)
+			throws DbException;
+
 	/**
 	 * Returns the status of all messages in the given group with respect to
 	 * the given contact.
diff --git a/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java b/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java
index e8d0b5e2f7e8633fba85b00d79e21af9ddd0847d..f8211623d2c2012e1c4420b7760b286815a3136c 100644
--- a/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java
+++ b/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java
@@ -12,7 +12,6 @@ import org.briarproject.api.db.Metadata;
 import org.briarproject.api.db.Transaction;
 import org.briarproject.api.sync.Message;
 import org.briarproject.api.sync.ValidationManager.IncomingMessageHook;
-import org.briarproject.api.system.Clock;
 
 import static org.briarproject.api.clients.QueueMessage.QUEUE_MESSAGE_HEADER_LENGTH;
 import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
diff --git a/briar-core/src/org/briarproject/db/Database.java b/briar-core/src/org/briarproject/db/Database.java
index 9779217904ba814b9aaa7deefb05edd6171300b8..a63f411cbb1fda7dad9faf094b6a8008e013d74f 100644
--- a/briar-core/src/org/briarproject/db/Database.java
+++ b/briar-core/src/org/briarproject/db/Database.java
@@ -310,7 +310,7 @@ interface Database<T> {
 			throws DbException;
 
 	/**
-	 * Returns the metadata for all messages in the given group.
+	 * Returns the metadata for all delivered messages in the given group.
 	 * <p/>
 	 * Read-only.
 	 */
@@ -327,6 +327,14 @@ interface Database<T> {
 	Map<MessageId, Metadata> getMessageMetadata(T txn, GroupId g,
 			Metadata query) throws DbException;
 
+	/**
+	 * Returns the metadata for the given delivered message.
+	 * <p/>
+	 * Read-only.
+	 */
+	Metadata getMessageMetadataForValidator(T txn, MessageId m)
+			throws DbException;
+
 	/**
 	 * Returns the metadata for the given message.
 	 * <p/>
diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
index 4f84a04bd047e0a1054743cd7331a8e90ab7c3a0..f8eabd84c63453bfdc8bdbe6eb61acb3aec9a6a2 100644
--- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
+++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
@@ -456,6 +456,15 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
 		return db.getMessageMetadata(txn, m);
 	}
 
+	public Metadata getMessageMetadataForValidator(Transaction transaction,
+			MessageId m)
+			throws DbException {
+		T txn = unbox(transaction);
+		if (!db.containsMessage(txn, m))
+			throw new NoSuchMessageException();
+		return db.getMessageMetadataForValidator(txn, m);
+	}
+
 	public Collection<MessageStatus> getMessageStatus(Transaction transaction,
 			ContactId c, GroupId g) throws DbException {
 		T txn = unbox(transaction);
diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/briar-core/src/org/briarproject/db/JdbcDatabase.java
index a52fbe2a1da6c9729518c91fbb7e61cd5f39ddca..363075dfd6a6d33e67e20ff67020370b4f0ed5cc 100644
--- a/briar-core/src/org/briarproject/db/JdbcDatabase.java
+++ b/briar-core/src/org/briarproject/db/JdbcDatabase.java
@@ -1324,6 +1324,33 @@ abstract class JdbcDatabase implements Database<Connection> {
 		}
 	}
 
+	public Metadata getMessageMetadataForValidator(Connection txn, MessageId m)
+			throws DbException {
+		PreparedStatement ps = null;
+		ResultSet rs = null;
+		try {
+			String sql = "SELECT key, value FROM messageMetadata AS md"
+					+ " JOIN messages AS m"
+					+ " ON m.messageId = md.messageId"
+					+ " WHERE (m.state = ? OR m.state = ?)"
+					+ " AND md.messageId = ?";
+			ps = txn.prepareStatement(sql);
+			ps.setInt(1, DELIVERED.getValue());
+			ps.setInt(2, PENDING.getValue());
+			ps.setBytes(3, m.getBytes());
+			rs = ps.executeQuery();
+			Metadata metadata = new Metadata();
+			while (rs.next()) metadata.put(rs.getString(1), rs.getBytes(2));
+			rs.close();
+			ps.close();
+			return metadata;
+		} catch (SQLException e) {
+			tryToClose(rs);
+			tryToClose(ps);
+			throw new DbException(e);
+		}
+	}
+
 	public Collection<MessageStatus> getMessageStatus(Connection txn,
 			ContactId c, GroupId g) throws DbException {
 		PreparedStatement ps = null;
diff --git a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
index f6aa74c3ab07fcd7bbb0ba5f211f027270980329..7853f0497d18cbb5b253a3e25ec74921f8ecfd75 100644
--- a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
+++ b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java
@@ -188,7 +188,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
 						byte[] raw = db.getRawMessage(txn, id);
 						m = parseMessage(id, raw);
 						g = db.getGroup(txn, m.getGroupId());
-						meta = db.getMessageMetadata(txn, id);
+						meta = db.getMessageMetadataForValidator(txn, id);
 						txn.setComplete();
 					} finally {
 						db.endTransaction(txn);
diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
index dbf48a82fd5ef2c23b345c95c1b9e802481e7c83..f50dcb2bcb36aa3e61b9749128e2e3f61b6e1221 100644
--- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
+++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
@@ -1006,6 +1006,10 @@ public class H2DatabaseTest extends BriarTestCase {
 		map = db.getMessageMetadata(txn, groupId);
 		assertTrue(map.isEmpty());
 
+		// validator gets also metadata for pending messages
+		retrieved = db.getMessageMetadataForValidator(txn, messageId);
+		assertFalse(retrieved.isEmpty());
+
 		db.commitTransaction(txn);
 		db.close();
 	}