diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index bba9c1d3b6b630dcb0d979a514cc2a951ad3f1ee..82b6809132a3479a1b811b4f4b1b7df8e5e4e41f 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -340,8 +340,8 @@ ApplicationWindow {
     id: popup
     visible: false
     property var block
-    width: 800
-    height: 280
+    width: root.width
+    height: 240
     x: root.x
     y: root.y + root.height
     Component{
@@ -389,17 +389,27 @@ ApplicationWindow {
       onClicked: {
         var tx = transactionModel.get(row)
         if(tx.data) {
-          popup.showContractData(tx.data)
+          popup.showContractData(tx)
         }else{
           popup.height = 230
         }
       }
     }
-    function showContractData(data) {
-      contractData.text = data
+
+    function showContractData(tx) {
+       txDetailsDebugButton.tx = tx
+      if(tx.createsContract) {
+	      contractData.text = tx.data
+	      contractLabel.text = "<h4> Transaction created contract " + tx.address + "</h4>"
+      }else{
+	      contractLabel.text = "<h4> Transaction ran contract " + tx.address + "</h4>"
+	      contractData.text = tx.rawData
+      }
       popup.height = 400
     }
+
     Rectangle {
+      id: txDetails
       width: popup.width
       height: 300
       anchors.left: listViewThing.left
@@ -411,6 +421,22 @@ ApplicationWindow {
         id: contractLabel
         anchors.leftMargin: 10
       }
+      Button {
+	      property var tx
+	      id: txDetailsDebugButton
+	      anchors.right: parent.right
+	      anchors.rightMargin: 10
+	      anchors.top: parent.top
+	      anchors.topMargin: 10
+	      text: "Debug contract"
+	      onClicked: {
+		      if(tx.createsContract){
+			      ui.startDbWithCode(tx.rawData)
+		      }else {
+			      ui.startDbWithContractAndData(tx.address, tx.rawData)
+		      }
+	      }
+      }
       TextArea {
         id: contractData
         text: "Contract"
@@ -437,7 +463,7 @@ ApplicationWindow {
           transactionModel.insert(0, block.txs.get(i))
         }
         if(block.txs.get(0).data){
-          popup.showContractData(block.txs.get(0).data)
+          popup.showContractData(block.txs.get(0))
         }
       }
       txView.forceActiveFocus()
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go
index 5b1fb50a271ccdbbe62ef01ef6566b8be05e37f2..342e3a7d08e13248660b1fa4ab37072e2ac35526 100644
--- a/ethereal/ui/debugger.go
+++ b/ethereal/ui/debugger.go
@@ -65,6 +65,12 @@ func (self *DebuggerWindow) SetCode(code string) {
 func (self *DebuggerWindow) SetData(data string) {
 	self.win.Set("dataText", data)
 }
+func (self *DebuggerWindow) SetAsm(data string) {
+	dis := ethchain.Disassemble(ethutil.FromHex(data))
+	for _, str := range dis {
+		self.win.Root().Call("setAsm", str)
+	}
+}
 
 func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, dataStr string) {
 	if !self.Db.done {
diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go
index 9983925252cfd9000659a0d7a8273a26db5269e2..73ec67c869d4acaa5d21683af4e2604d6e3dac4f 100644
--- a/ethereal/ui/ui_lib.go
+++ b/ethereal/ui/ui_lib.go
@@ -2,6 +2,7 @@ package ethui
 
 import (
 	"bitbucket.org/kardianos/osext"
+	"encoding/hex"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethutil"
@@ -24,8 +25,9 @@ type UiLib struct {
 	connected bool
 	assetPath string
 	// The main application window
-	win *qml.Window
-	Db  *Debugger
+	win      *qml.Window
+	Db       *Debugger
+	DbWindow *DebuggerWindow
 }
 
 func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
@@ -88,9 +90,26 @@ func (ui *UiLib) ConnectToPeer(addr string) {
 func (ui *UiLib) AssetPath(p string) string {
 	return path.Join(ui.assetPath, p)
 }
+func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
+	dbWindow := NewDebuggerWindow(self)
+	object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.FromHex(contractHash))
+	if len(object.Script()) > 0 {
+		dbWindow.SetCode("0x" + hex.EncodeToString(object.Script()))
+	}
+	dbWindow.SetData(data)
+
+	dbWindow.Show()
+}
+
+func (self *UiLib) StartDbWithCode(code string) {
+	dbWindow := NewDebuggerWindow(self)
+	dbWindow.SetCode("0x" + code)
+	dbWindow.Show()
+}
 
 func (self *UiLib) StartDebugger() {
 	dbWindow := NewDebuggerWindow(self)
+	//self.DbWindow = dbWindow
 
 	dbWindow.Show()
 }