diff --git a/src/components/MoveModal.vue b/src/components/MoveModal.vue
index ca1871482644dd51b1a1ed075e9bd8ec80d1d230..94f9c8beeea63625e9944726c3e4fc445628c461 100644
--- a/src/components/MoveModal.vue
+++ b/src/components/MoveModal.vue
@@ -50,7 +50,6 @@ export default {
 					.map((envelope) => envelope.databaseId)
 
 				if (envelopeIds.length === 0) {
-					this.$emit('close')
 					return
 				}
 
@@ -64,6 +63,7 @@ export default {
 				}))
 
 				await this.$store.dispatch('syncEnvelopes', { mailboxId: this.destMailboxId })
+				this.$emit('move')
 			} catch (error) {
 				logger.error('could not move messages', {
 					error,
diff --git a/src/components/Thread.vue b/src/components/Thread.vue
index f1ecb4f0eb1c1148528f3d2434f5d18643224245..0b6833153eeb5ff17a3395bbd3b3edfc1bcb9337 100644
--- a/src/components/Thread.vue
+++ b/src/components/Thread.vue
@@ -20,6 +20,7 @@
 				:envelope="env"
 				:mailbox-id="$route.params.mailboxId"
 				:expanded="expandedThreads.includes(env.databaseId)"
+				@move="onMove(env.databaseId)"
 				@toggleExpand="toggleExpand(env.databaseId)" />
 		</template>
 	</AppContentDetails>
@@ -54,8 +55,11 @@ export default {
 		}
 	},
 	computed: {
+		threadId() {
+			return parseInt(this.$route.params.threadId, 10)
+		},
 		thread() {
-			return this.$store.getters.getEnvelopeThread(this.$route.params.threadId)
+			return this.$store.getters.getEnvelopeThread(this.threadId)
 		},
 		threadParticipants() {
 			const recipients = this.thread.flatMap(envelope => {
@@ -84,11 +88,11 @@ export default {
 				return
 			}
 			logger.debug('navigated to another thread', { to, from })
-			this.fetchThread()
+			this.resetThread()
 		},
 	},
 	created() {
-		this.fetchThread()
+		this.resetThread()
 	},
 	methods: {
 		toggleExpand(threadId) {
@@ -100,12 +104,28 @@ export default {
 				this.expandedThreads = this.expandedThreads.filter(t => t !== threadId)
 			}
 		},
+		onMove(threadId) {
+			if (threadId === this.threadId) {
+				this.$router.replace({
+					name: 'mailbox',
+					params: {
+						mailboxId: this.$route.params.mailboxId,
+					},
+				})
+			} else {
+				this.expandedThreads = this.expandedThreads.filter((id) => id !== threadId)
+				this.fetchThread()
+			}
+		},
+		async resetThread() {
+			this.expandedThreads = [this.threadId]
+			await this.fetchThread()
+		},
 		async fetchThread() {
 			this.loading = true
 			this.errorMessage = ''
 			this.error = undefined
-			const threadId = parseInt(this.$route.params.threadId, 10)
-			this.expandedThreads = [threadId]
+			const threadId = this.threadId
 
 			try {
 				const thread = await this.$store.dispatch('fetchThread', threadId)
diff --git a/src/components/ThreadEnvelope.vue b/src/components/ThreadEnvelope.vue
index aca573447786fbe6462108d1bb1c94045c8e7854..294044edaac22907b09677d7a888df18fabdb4c7 100644
--- a/src/components/ThreadEnvelope.vue
+++ b/src/components/ThreadEnvelope.vue
@@ -136,6 +136,7 @@
 					v-if="showMoveModal"
 					:account="account"
 					:envelopes="[envelope]"
+					@move="onMove"
 					@close="onCloseMoveModal" />
 			</div>
 		</div>
@@ -363,12 +364,9 @@ export default {
 		},
 		onCloseMoveModal() {
 			this.showMoveModal = false
-			this.$router.replace({
-				name: 'mailbox',
-				params: {
-					mailboxId: this.$route.params.mailboxId,
-				},
-			})
+		},
+		onMove() {
+			this.$emit('move')
 		},
 	},
 }