diff --git a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentCreator.java b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentCreator.java
index fce645c657a3da2565e65b9be2b2512d612dd269..9d6433100c31441599b6a64e6c3fb94ef3cdc9f7 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentCreator.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentCreator.java
@@ -49,11 +49,12 @@ public class AttachmentCreator {
 	private final CopyOnWriteArrayList<AttachmentItemResult> itemResults =
 			new CopyOnWriteArrayList<>();
 
-	private final MutableLiveData<AttachmentResult> result =
-			new MutableLiveData<>();
 	@Nullable
 	private AttachmentCreationTask task;
 
+	@Nullable
+	private volatile MutableLiveData<AttachmentResult> result;
+
 	public AttachmentCreator(Application app, @IoExecutor Executor ioExecutor,
 			MessagingManager messagingManager, AttachmentRetriever retriever) {
 		this.app = app;
@@ -65,7 +66,7 @@ public class AttachmentCreator {
 	@UiThread
 	public LiveData<AttachmentResult> storeAttachments(
 			LiveData<GroupId> groupId, Collection<Uri> newUris) {
-		if (task != null || !uris.isEmpty())
+		if (task != null || result != null || !uris.isEmpty())
 			throw new IllegalStateException();
 		uris.addAll(newUris);
 		observeForeverOnce(groupId, id -> {
@@ -75,6 +76,8 @@ public class AttachmentCreator {
 					app.getContentResolver(), this, id, uris, needsSize);
 			ioExecutor.execute(() -> task.storeAttachments());
 		});
+		MutableLiveData<AttachmentResult> result = new MutableLiveData<>();
+		this.result = result;
 		return result;
 	}
 
@@ -85,7 +88,8 @@ public class AttachmentCreator {
 	 */
 	@UiThread
 	public LiveData<AttachmentResult> getLiveAttachments() {
-		if (task == null || uris.isEmpty())
+		MutableLiveData<AttachmentResult> result = this.result;
+		if (task == null || result == null || uris.isEmpty())
 			throw new IllegalStateException();
 		// A task is already running. It will update the result LiveData.
 		// So nothing more to do here.
@@ -103,7 +107,8 @@ public class AttachmentCreator {
 			AttachmentItemResult itemResult =
 					new AttachmentItemResult(uri, item);
 			itemResults.add(itemResult);
-			result.postValue(getResult(false));
+			MutableLiveData<AttachmentResult> result = this.result;
+			if (result != null) result.postValue(getResult(false));
 		} catch (IOException | DbException e) {
 			logException(LOG, WARNING, e);
 			onAttachmentError(uri, e);
@@ -127,13 +132,15 @@ public class AttachmentCreator {
 		AttachmentItemResult itemResult =
 				new AttachmentItemResult(uri, errorMsg);
 		itemResults.add(itemResult);
-		result.postValue(getResult(false));
+		MutableLiveData<AttachmentResult> result = this.result;
+		if (result != null) result.postValue(getResult(false));
 		// expect to receive a cancel from the UI
 	}
 
 	@IoExecutor
 	void onAttachmentCreationFinished() {
-		result.postValue(getResult(true));
+		MutableLiveData<AttachmentResult> result = this.result;
+		if (result != null) result.postValue(getResult(true));
 	}
 
 	@UiThread
@@ -180,7 +187,11 @@ public class AttachmentCreator {
 		task = null;
 		uris.clear();
 		itemResults.clear();
-		result.setValue(null);
+		MutableLiveData<AttachmentResult> result = this.result;
+		if (result != null) {
+			result.setValue(null);
+			this.result = null;
+		}
 	}
 
 	@UiThread