diff --git a/ethereal/assets/debugger/debugger.qml b/ethereal/assets/debugger/debugger.qml
index ca67e857d89f82be021b4ef431df2296e27799a0..bc34233fd19b0c3df87e6f68e85526c8ce999260 100644
--- a/ethereal/assets/debugger/debugger.qml
+++ b/ethereal/assets/debugger/debugger.qml
@@ -163,7 +163,7 @@ ApplicationWindow {
 							height: parent.height
 							width: parent.width
 							TableViewColumn{ id: key ; role: "key" ; title: "#" ; width: storageTableView.width / 2}
-							TableViewColumn{ role: "value" ; title: "value" ; width:  storageTableView.width / 2}
+							TableViewColumn{ role: "value" ; title: "Storage" ; width:  storageTableView.width / 2}
 							model: storageModel
 						}
 					}
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go
index a4489cdf4f5bb8a9ad328b91ce01b098cea7ed9b..919407b3467695231a085ffbfb3f4242789ea2c1 100644
--- a/ethereal/ui/debugger.go
+++ b/ethereal/ui/debugger.go
@@ -26,7 +26,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
 	}
 
 	win := component.CreateWindow(nil)
-	db := &Debugger{win, make(chan bool), make(chan bool), true}
+	db := &Debugger{win, make(chan bool), make(chan bool), true, false}
 
 	return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db}
 }
@@ -60,6 +60,12 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 		self.Db.Q <- true
 	}
 
+	defer func() {
+		if r := recover(); r != nil {
+			self.Logf("compile FAULT: %v", r)
+		}
+	}()
+
 	data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) {
 		slice := strings.Split(dataStr, "\n")
 		for _, dataItem := range slice {
@@ -131,7 +137,11 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 
 		state.Reset()
 
-		self.Db.done = true
+		if !self.Db.interrupt {
+			self.Db.done = true
+		} else {
+			self.Db.interrupt = false
+		}
 	}()
 }
 
@@ -149,10 +159,10 @@ func (self *DebuggerWindow) Next() {
 }
 
 type Debugger struct {
-	win  *qml.Window
-	N    chan bool
-	Q    chan bool
-	done bool
+	win             *qml.Window
+	N               chan bool
+	Q               chan bool
+	done, interrupt bool
 }
 
 type storeVal struct {
@@ -185,7 +195,8 @@ out:
 		case <-d.N:
 			break out
 		case <-d.Q:
-			d.done = true
+			d.interrupt = true
+			d.clearBuffers()
 
 			return false
 		}
@@ -194,6 +205,19 @@ out:
 	return true
 }
 
+func (d *Debugger) clearBuffers() {
+out:
+	// drain
+	for {
+		select {
+		case <-d.N:
+		case <-d.Q:
+		default:
+			break out
+		}
+	}
+}
+
 func (d *Debugger) Next() {
 	if !d.done {
 		d.N <- true
diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go
index 4dda5017fd5aa063f7076ce3a168082cbdb6b9b0..5954df70c209e8f748a84bd728c2f601a97e91f8 100644
--- a/ethereal/ui/gui.go
+++ b/ethereal/ui/gui.go
@@ -154,7 +154,7 @@ func (gui *Gui) createWindow(comp qml.Object) *qml.Window {
 	gui.win = win
 	gui.uiLib.win = win
 
-	db := &Debugger{gui.win, make(chan bool), make(chan bool), true}
+	db := &Debugger{gui.win, make(chan bool), make(chan bool), true, false}
 	gui.lib.Db = db
 	gui.uiLib.Db = db