diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index a814d2e97fb182be9e2792fd266d68afd0a07a32..a9f06df0bae5e2f962463677d9cde19b9409bdb1 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -2282,6 +2282,10 @@ static int arm7_9_dcc_completion(struct target_s *target, u32 exit_point, int ti
 	int retval = ERROR_OK;
 	armv4_5_common_t *armv4_5 = target->arch_info;
 	arm7_9_common_t *arm7_9 = armv4_5->arch_info;
+
+	if ((retval=target_wait_state(target, TARGET_DEBUG_RUNNING, 500))!=ERROR_OK)
+		return retval;
+
 	int little=target->endianness==TARGET_LITTLE_ENDIAN;
 	int count=dcc_count;
 	u8 *buffer=dcc_buffer;
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index c4637aee4006084cc4e7c82ca30aa3ee90e766ac..bd9ea8e805c2c02a88235334962a7e94d28a6a47 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -612,6 +612,9 @@ int armv4_5_run_algorithm_inner(struct target_s *target, int num_mem_params, mem
 
 	breakpoint_remove(target, exit_point);
 
+	if (retval!=ERROR_OK)
+		return retval;
+
 	for (i = 0; i < num_mem_params; i++)
 	{
 		if (mem_params[i].direction != PARAM_OUT)