diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index e596d057199cc99ac94dade8c8ee7b55940edd23..b5434d68e7b7c014ae552dc004f3b94ed496dffd 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -243,11 +243,19 @@ int arm7_9_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint)
 		/* restore original instruction (kept in target endianness) */
 		if (breakpoint->length == 4)
 		{
-			target->type->write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
+			u32 current_instr;
+			/* check that user program as not modified breakpoint instruction */
+			target->type->read_memory(target, breakpoint->address, 4, 1, (u8*)&current_instr);
+			if (current_instr==arm7_9->arm_bkpt)
+				target->type->write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
 		}
 		else
 		{
-			target->type->write_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
+			u16 current_instr;
+			/* check that user program as not modified breakpoint instruction */
+			target->type->read_memory(target, breakpoint->address, 2, 1, (u8*)&current_instr);
+			if (current_instr==arm7_9->thumb_bkpt)
+				target->type->write_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
 		}
 		breakpoint->set = 0;
 	}