diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl
index ba044be28..3eb7419ff 100644
--- a/src/helper/startup.tcl
+++ b/src/helper/startup.tcl
@@ -134,7 +134,29 @@ proc ocd_gdb_restart {target_id} {
 	reset halt
 }
 
+global in_process_reset
+set in_process_reset 0
+
+# Catch reset recursion
 proc ocd_process_reset { MODE } {
+	global in_process_reset
+	if {$in_process_reset} {
+		set in_process_reset 0
+		return -code error "'reset' can not be invoked recursively"
+	}
+	
+	set in_process_reset 1
+	set success [expr [catch {ocd_process_reset_inner $MODE} result]==0] 
+	set in_process_reset 0
+	
+	if {$success} {
+		return $result
+	} else {
+		return -code error $result
+	}
+}
+
+proc ocd_process_reset_inner { MODE } {
 
 	# If this target must be halted...
 	set halt -1