diff --git a/src/network/connection.c b/src/network/connection.c
index 13fd13cb3..eeb7f5201 100644
--- a/src/network/connection.c
+++ b/src/network/connection.c
@@ -987,14 +987,6 @@ change_connection(struct download *old, struct download *new,
 	assert(old);
 	if_assert_failed return;
 
-	if (is_in_result_state(old->state)) {
-		if (new) {
-			if (new->callback)
-				new->callback(new, new->data);
-		}
-		return;
-	}
-
 	check_queue_bugs();
 
 	conn = old->conn;
@@ -1023,6 +1015,9 @@ change_connection(struct download *old, struct download *new,
 void
 cancel_download(struct download *download, int interrupt)
 {
+	if (is_in_result_state(download->state))
+		return;
+
 	change_connection(download, NULL, PRI_CANCEL, interrupt);
 }
 
@@ -1039,6 +1034,12 @@ move_download(struct download *old, struct download *new,
 	new->state	= conn->state;
 	new->pri	= newpri;
 
+	if (is_in_result_state(old->state)) {
+		if (new->callback)
+			new->callback(new, new->data);
+		return;
+	}
+
 	change_connection(old, new, newpri, 0);
 }