diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
index eb38d51c476b4749f88d54fc670ad55bc4bf0015..52cc1a19a05fb9f38fa851e2f3a37ae7c7613d88 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
@@ -6,7 +6,6 @@ import android.arch.lifecycle.ViewModelProvider;
 import android.arch.lifecycle.ViewModelProviders;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.support.annotation.Nullable;
@@ -653,15 +652,11 @@ public class ConversationActivity extends BriarActivity
 	}
 
 	@Override
-	public List<Uri> filterAttachmentUris(List<Uri> uris) {
-		if (uris.size() > MAX_ATTACHMENTS_PER_MESSAGE) {
-			String format = getResources().getString(
-					R.string.messaging_too_many_attachments_toast);
-			String warning = String.format(format, MAX_ATTACHMENTS_PER_MESSAGE);
-			Toast.makeText(this, warning, LENGTH_SHORT).show();
-			uris = uris.subList(0, MAX_ATTACHMENTS_PER_MESSAGE);
-		}
-		return new ArrayList<>(uris);
+	public void onTooManyAttachments() {
+		String format = getResources().getString(
+				R.string.messaging_too_many_attachments_toast);
+		String warning = String.format(format, MAX_ATTACHMENTS_PER_MESSAGE);
+		Toast.makeText(this, warning, LENGTH_SHORT).show();
 	}
 
 	@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java
index 68dd8204ffb6147410e5dac37b0ed57a556c88eb..87cb9fb24be47710687dcd22ae6f5ad8e3e8d4dc 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java
@@ -43,6 +43,7 @@ import static android.view.View.GONE;
 import static android.widget.Toast.LENGTH_LONG;
 import static org.briarproject.briar.android.util.UiUtils.resolveColorAttribute;
 import static org.briarproject.briar.api.messaging.MessagingConstants.IMAGE_MIME_TYPES;
+import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
 import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.STATE_DISMISSED;
 import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.STATE_FINISHED;
 
@@ -153,25 +154,28 @@ public class TextAttachmentController extends TextSendController
 	public void onImageReceived(@Nullable Intent resultData) {
 		if (resultData == null) return;
 		if (loadingUris || !imageUris.isEmpty()) throw new AssertionError();
+		List<Uri> newUris = new ArrayList<>();
 		if (resultData.getData() != null) {
-			imageUris.add(resultData.getData());
-			onNewUris(false);
+			newUris.add(resultData.getData());
+			onNewUris(false, newUris);
 		} else if (SDK_INT >= 18 && resultData.getClipData() != null) {
 			ClipData clipData = resultData.getClipData();
 			for (int i = 0; i < clipData.getItemCount(); i++) {
-				imageUris.add(clipData.getItemAt(i).getUri());
+				newUris.add(clipData.getItemAt(i).getUri());
 			}
-			onNewUris(false);
+			onNewUris(false, newUris);
 		}
 	}
 
-	private void onNewUris(boolean restart) {
-		if (imageUris.isEmpty()) return;
+	private void onNewUris(boolean restart, List<Uri> newUris) {
+		if (newUris.isEmpty()) return;
 		if (loadingUris) throw new AssertionError();
 		loadingUris = true;
-		List<Uri> filtered = attachmentListener.filterAttachmentUris(imageUris);
-		imageUris.clear();
-		imageUris.addAll(filtered);
+		if (newUris.size() > MAX_ATTACHMENTS_PER_MESSAGE) {
+			newUris = newUris.subList(0, MAX_ATTACHMENTS_PER_MESSAGE);
+			attachmentListener.onTooManyAttachments();
+		}
+		imageUris.addAll(newUris);
 		updateViewState();
 		textInput.setHint(R.string.image_caption_hint);
 		List<ImagePreviewItem> items = ImagePreviewItem.fromUris(imageUris);
@@ -244,8 +248,7 @@ public class TextAttachmentController extends TextSendController
 	public Parcelable onRestoreInstanceState(Parcelable inState) {
 		SavedState state = (SavedState) inState;
 		if (!imageUris.isEmpty()) throw new AssertionError();
-		if (state.imageUris != null) imageUris.addAll(state.imageUris);
-		onNewUris(true);
+		if (state.imageUris != null) onNewUris(true, state.imageUris);
 		return state.getSuperState();
 	}
 
@@ -325,7 +328,6 @@ public class TextAttachmentController extends TextSendController
 
 		void onAttachImage(Intent intent);
 
-		List<Uri> filterAttachmentUris(List<Uri> uris);
+		void onTooManyAttachments();
 	}
-
 }