diff --git a/components/net/sf/briar/db/DatabaseComponentImpl.java b/components/net/sf/briar/db/DatabaseComponentImpl.java
index 92420cca1de7ac407f22a6bd7a6111233dbce32a..56b9f82532e669c3cf61bb32fdb148e56c937f3b 100644
--- a/components/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/components/net/sf/briar/db/DatabaseComponentImpl.java
@@ -198,14 +198,15 @@ DatabaseCleaner.Callback {
 
 	/** Notifies all listeners of a database event. */
 	private void callListeners(DatabaseEvent e) {
+		List<DatabaseListener> copy;
 		synchronized(listeners) {
-			if(!listeners.isEmpty()) {
-				// Shuffle the listeners so we don't always send new messages
-				// to contacts in the same order
-				Collections.shuffle(listeners);
-				for(DatabaseListener d : listeners) d.eventOccurred(e);
-			}
+			if(listeners.isEmpty()) return;
+			copy = new ArrayList<DatabaseListener>(listeners);
 		}
+		// Shuffle the listeners so we don't always send new messages
+		// to contacts in the same order
+		Collections.shuffle(copy);
+		for(DatabaseListener d : copy) d.eventOccurred(e);
 	}
 
 	public void addLocalGroupMessage(Message m) throws DbException {