diff --git a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
index 5f130f78a7f5fb00f80c0197549168c2d69c2e02..1c1e11ef914f2582d1369bf744f27f744ab45999 100644
--- a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
+++ b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
@@ -1,9 +1,22 @@
 package net.sf.briar.api.db.event;
 
+import java.util.Collection;
+
+import net.sf.briar.api.messaging.MessageId;
+
 /**
  * An event that is broadcast when one or messages expire from the database,
  * potentially changing the database's retention time.
  */
 public class MessageExpiredEvent extends DatabaseEvent {
 
+	private final Collection<MessageId> expired;
+
+	public MessageExpiredEvent(Collection<MessageId> expired) {
+		this.expired = expired;
+	}
+
+	public Collection<MessageId> getMessageIds() {
+		return expired;
+	}
 }
diff --git a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
index 67287cd99a2036e072755b639be0d9b96a91d5a8..15c30133520209044f7190e7234c43549dd4caff 100644
--- a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
@@ -1895,20 +1895,19 @@ DatabaseCleaner.Callback {
 	 * removed.
 	 */
 	private boolean expireMessages(int size) throws DbException {
-		boolean removed = false;
+		Collection<MessageId> expired;
 		messageLock.writeLock().lock();
 		try {
 			retentionLock.writeLock().lock();
 			try {
 				T txn = db.startTransaction();
 				try {
-					Collection<MessageId> old = db.getOldMessages(txn, size);
-					if(!old.isEmpty()) {
-						for(MessageId m : old) removeMessage(txn, m);
+					expired = db.getOldMessages(txn, size);
+					if(!expired.isEmpty()) {
+						for(MessageId m : expired) removeMessage(txn, m);
 						db.incrementRetentionVersions(txn);
-						removed = true;
 						if(LOG.isLoggable(INFO))
-							LOG.info("Expired " + old.size() + " messages");
+							LOG.info("Expired " + expired.size() + " messages");
 					}
 					db.commitTransaction(txn);
 				} catch(DbException e) {
@@ -1921,8 +1920,9 @@ DatabaseCleaner.Callback {
 		} finally {
 			messageLock.writeLock().unlock();
 		}
-		if(removed) callListeners(new MessageExpiredEvent());
-		return removed;
+		if(expired.isEmpty()) return false;
+		callListeners(new MessageExpiredEvent(expired));
+		return true;
 	}
 
 	/**