diff --git a/cpu-all.h b/cpu-all.h
index 0322955..e97507f 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -766,6 +766,7 @@
 #define BP_MEM_WRITE          0x02
 #define BP_MEM_ACCESS         (BP_MEM_READ | BP_MEM_WRITE)
 #define BP_STOP_BEFORE_ACCESS 0x04
+#define BP_WATCHPOINT_HIT     0x08
 #define BP_GDB                0x10
 
 int cpu_breakpoint_insert(CPUState *env, target_ulong pc, int flags,
diff --git a/cpu-exec.c b/cpu-exec.c
index 1955d24..191d9e4 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -183,6 +183,15 @@
     return tb;
 }
 
+static void cpu_handle_debug_exception(CPUState *env)
+{
+    CPUWatchpoint *wp;
+
+    if (!env->watchpoint_hit)
+        for (wp = env->watchpoints; wp != NULL; wp = wp->next)
+            wp->flags &= ~BP_WATCHPOINT_HIT;
+}
+
 /* main execution loop */
 
 int cpu_exec(CPUState *env1)
@@ -237,6 +246,8 @@
                 if (env->exception_index >= EXCP_INTERRUPT) {
                     /* exit request from the cpu execution loop */
                     ret = env->exception_index;
+                    if (ret == EXCP_DEBUG)
+                        cpu_handle_debug_exception(env);
                     break;
                 } else if (env->user_mode_only) {
                     /* if user mode only, we simulate a fake exception
diff --git a/exec.c b/exec.c
index b49162c..0fe18b0 100644
--- a/exec.c
+++ b/exec.c
@@ -1340,7 +1340,7 @@
 
     for (wp = env->watchpoints; wp != NULL; wp = wp->next) {
         if (addr == wp->vaddr && len_mask == wp->len_mask
-                && flags == wp->flags) {
+                && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
             cpu_watchpoint_remove_by_ref(env, wp);
             return 0;
         }
@@ -2519,21 +2519,26 @@
     for (wp = env->watchpoints; wp != NULL; wp = wp->next) {
         if ((vaddr == (wp->vaddr & len_mask) ||
              (vaddr & wp->len_mask) == wp->vaddr) && (wp->flags & flags)) {
-            env->watchpoint_hit = wp;
-            tb = tb_find_pc(env->mem_io_pc);
-            if (!tb) {
-                cpu_abort(env, "check_watchpoint: could not find TB for pc=%p",
-                         (void *)env->mem_io_pc);
+            wp->flags |= BP_WATCHPOINT_HIT;
+            if (!env->watchpoint_hit) {
+                env->watchpoint_hit = wp;
+                tb = tb_find_pc(env->mem_io_pc);
+                if (!tb) {
+                    cpu_abort(env, "check_watchpoint: could not find TB for "
+                              "pc=%p", (void *)env->mem_io_pc);
+                }
+                cpu_restore_state(tb, env, env->mem_io_pc, NULL);
+                tb_phys_invalidate(tb, -1);
+                if (wp->flags & BP_STOP_BEFORE_ACCESS) {
+                    env->exception_index = EXCP_DEBUG;
+                } else {
+                    cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
+                    tb_gen_code(env, pc, cs_base, cpu_flags, 1);
+                }
+                cpu_resume_from_signal(env, NULL);
             }
-            cpu_restore_state(tb, env, env->mem_io_pc, NULL);
-            tb_phys_invalidate(tb, -1);
-            if (wp->flags & BP_STOP_BEFORE_ACCESS) {
-                env->exception_index = EXCP_DEBUG;
-            } else {
-                cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
-                tb_gen_code(env, pc, cs_base, cpu_flags, 1);
-            }
-            cpu_resume_from_signal(env, NULL);
+        } else {
+            wp->flags &= ~BP_WATCHPOINT_HIT;
         }
     }
 }
