diff --git a/briar-android/src/net/sf/briar/android/ReferenceManagerImpl.java b/briar-android/src/net/sf/briar/android/ReferenceManagerImpl.java
index 3da1ce3be882826872c7013ae944778e92f79a70..48788b781908c906f100c91c732e849ac781cb0e 100644
--- a/briar-android/src/net/sf/briar/android/ReferenceManagerImpl.java
+++ b/briar-android/src/net/sf/briar/android/ReferenceManagerImpl.java
@@ -8,18 +8,18 @@ import java.util.logging.Logger;
 
 import net.sf.briar.api.android.ReferenceManager;
 
-// This class is not thread-safe.
 class ReferenceManagerImpl implements ReferenceManager {
 
 	private static final Logger LOG =
 			Logger.getLogger(ReferenceManagerImpl.class.getName());
 
+	// Locking: this
 	private final Map<Class<?>, Map<Long, Object>> outerMap =
 			new HashMap<Class<?>, Map<Long, Object>>();
 
-	private long nextHandle = 0;
+	private long nextHandle = 0; // Locking: this
 
-	public <T> T getReference(long handle, Class<T> c) {
+	public synchronized <T> T getReference(long handle, Class<T> c) {
 		Map<Long, Object> innerMap = outerMap.get(c);
 		if(innerMap == null) {
 			if(LOG.isLoggable(INFO))
@@ -32,7 +32,7 @@ class ReferenceManagerImpl implements ReferenceManager {
 		return c.cast(o);
 	}
 
-	public <T> long putReference(T reference, Class<T> c) {
+	public synchronized <T> long putReference(T reference, Class<T> c) {
 		Map<Long, Object> innerMap = outerMap.get(c);
 		if(innerMap == null) {
 			innerMap = new HashMap<Long, Object>();
@@ -47,7 +47,7 @@ class ReferenceManagerImpl implements ReferenceManager {
 		return handle;
 	}
 
-	public <T> T removeReference(long handle, Class<T> c) {
+	public synchronized <T> T removeReference(long handle, Class<T> c) {
 		Map<Long, Object> innerMap = outerMap.get(c);
 		if(innerMap == null) return null;
 		Object o = innerMap.remove(handle);
diff --git a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
index 7b5ec9f72e705cea59cf780b7483ed185364013a..6f59e7413a020bb728e86a5d805356304d5406d5 100644
--- a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
+++ b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
@@ -360,7 +360,6 @@ implements InvitationListener {
 		}
 
 		public void connectionFailed() {
-			// FIXME: Do this on the UI thread
 			referenceManager.removeReference(handle, InvitationTask.class);
 		}
 
@@ -369,17 +368,14 @@ implements InvitationListener {
 		}
 
 		public void remoteConfirmationFailed() {
-			// FIXME: Do this on the UI thread
 			referenceManager.removeReference(handle, InvitationTask.class);
 		}
 
 		public void pseudonymExchangeSucceeded(String remoteName) {
-			// FIXME: Do this on the UI thread
 			referenceManager.removeReference(handle, InvitationTask.class);
 		}
 
 		public void pseudonymExchangeFailed() {
-			// FIXME: Do this on the UI thread
 			referenceManager.removeReference(handle, InvitationTask.class);
 		}
 	}
diff --git a/briar-api/src/net/sf/briar/api/android/ReferenceManager.java b/briar-api/src/net/sf/briar/api/android/ReferenceManager.java
index 21588adb056c63002a5308adc0bc695b23213a6a..61445e9351a7a7c1f6b4f2a2a6fb54d819c9bc6c 100644
--- a/briar-api/src/net/sf/briar/api/android/ReferenceManager.java
+++ b/briar-api/src/net/sf/briar/api/android/ReferenceManager.java
@@ -4,9 +4,6 @@ package net.sf.briar.api.android;
  * Manages mappings between object references and serialisable handles. This
  * enables references to be passed between Android UI objects that belong to
  * the same process but can only communicate via serialisation.
- * <p>
- * This interface is designed to be accessed from the UI thread, so
- * implementations may not be thread-safe.
  */
 public interface ReferenceManager {