diff --git a/README.md b/README.md
index 11b7ed7e94ad29c976fca9efa1cad85899d39566..29dae73418f4a820c8fc0d8e1264ac5311aebdee 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Ethereum
 
 Ethereum Go Client © 2014 Jeffrey Wilcke.
 
-Current state: Proof of Concept 0.5.16.
+Current state: Proof of Concept 0.5.17.
 
 For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
 
diff --git a/ethereal/assets/debugger/debugger.qml b/ethereal/assets/debugger/debugger.qml
index fa56737a22616dea11dbc1625f790cfe3b34c4d2..34fe01253d774f927df9ae7db971b1d4c180b804 100644
--- a/ethereal/assets/debugger/debugger.qml
+++ b/ethereal/assets/debugger/debugger.qml
@@ -86,7 +86,7 @@ ApplicationWindow {
 		TableView {
 			id: asmTableView
 			width: 200
-			TableViewColumn{ role: "value" ; title: "" ; width: 200 }
+			TableViewColumn{ role: "value" ; title: "" ; width: asmTableView.width - 2 }
 			model: asmModel
 		}
 
diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index c783cde830285a64bc1750057e0e951b3ef59539..a79e4708c1e84e1d5c672100a331b31091d2ee87 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -419,30 +419,54 @@ ApplicationWindow {
 			}
 		}
 
-		Label {
-			y: 7
-			anchors.right: peerImage.left
-			anchors.rightMargin: 5
-			id: peerLabel
-			font.pixelSize: 8
-			text: "0 / 0"
-		}
-		Image {
-			y: 7
-			id: peerImage
-			anchors.right: parent.right
-			width: 10; height: 10
-			MouseArea {
-				onDoubleClicked:  peerWindow.visible = true
-				anchors.fill: parent
-			}
-			source: "../network.png"
-		}
+        Label {
+            y: 6
+            id: lastBlockLabel
+            objectName: "lastBlockLabel"
+            visible: true
+            text: ""
+			font.pixelSize: 10
+            anchors.right: peerGroup.left
+            anchors.rightMargin: 5
+        }
+
+        ProgressBar {
+            id: syncProgressIndicator
+            visible: false
+            objectName: "syncProgressIndicator"
+            y: 3
+            width: 140
+            indeterminate: true
+            anchors.right: peerGroup.left
+            anchors.rightMargin: 5
+        }
+
+        RowLayout {
+            id: peerGroup
+            y: 7
+            anchors.right: parent.right
+            MouseArea {
+                onDoubleClicked:  peerWindow.visible = true
+                anchors.fill: parent
+            }
+
+            Label {
+                id: peerLabel
+                font.pixelSize: 8
+                text: "0 / 0"
+            }
+            Image {
+                id: peerImage
+                width: 10; height: 10
+                source: "../network.png"
+            }
+        }
 	}
 
 	Window {
 		id: popup
 		visible: false
+        //flags: Qt.CustomizeWindowHint | Qt.Tool | Qt.WindowCloseButtonHint
 		property var block
 		width: root.width
 		height: 300
@@ -460,7 +484,7 @@ ApplicationWindow {
 					Text { text: '<h3>Block details</h3>'; color: "#F2F2F2"}
 					Text { text: '<b>Block number:</b> ' + number; color: "#F2F2F2"}
 					Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"}
-					Text { text: '<b>Coinbase:</b> ' + coinbase; color: "#F2F2F2"}
+					Text { text: '<b>Coinbase:</b> &lt;' + name + '&gt; ' + coinbase; color: "#F2F2F2"}
 					Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"}
 					Text { text: '<b>Gas used:</b> ' + gasUsed + " / " + gasLimit; color: "#F2F2F2"}
 				}
@@ -577,6 +601,7 @@ ApplicationWindow {
 
 	Window {
 		id: addPeerWin
+        //flags: Qt.CustomizeWindowHint | Qt.Tool | Qt.WindowCloseButtonHint
 		visible: false
 		minimumWidth: 230
 		maximumWidth: 230
@@ -686,9 +711,9 @@ ApplicationWindow {
 		}
 
 		if(initial){
-			blockModel.append({number: block.number, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
+			blockModel.append({number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
 		}else{
-			blockModel.insert(0, {number: block.number, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
+			blockModel.insert(0, {number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
 		}
 	}
 
@@ -743,6 +768,7 @@ ApplicationWindow {
 	// ******************************************
 	Window {
 		id: peerWindow
+        //flags: Qt.CustomizeWindowHint | Qt.Tool | Qt.WindowCloseButtonHint
 		height: 200
 		width: 700
 		Rectangle {
diff --git a/ethereal/assets/samplecoin b/ethereal/assets/samplecoin
deleted file mode 160000
index 944fbaa31d51328b522c0cd55113716630b4cbcb..0000000000000000000000000000000000000000
--- a/ethereal/assets/samplecoin
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 944fbaa31d51328b522c0cd55113716630b4cbcb
diff --git a/ethereal/debugger.go b/ethereal/debugger.go
index 997c2e8dd22988f4299c415a1f4b60dcaefb6769..7742b16271e03092a5e9e465adf20c37d18a7cf0 100644
--- a/ethereal/debugger.go
+++ b/ethereal/debugger.go
@@ -17,6 +17,8 @@ type DebuggerWindow struct {
 
 	vm *ethchain.Vm
 	Db *Debugger
+
+	state *ethchain.State
 }
 
 func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
@@ -53,6 +55,7 @@ func (self *DebuggerWindow) SetCode(code string) {
 func (self *DebuggerWindow) SetData(data string) {
 	self.win.Set("dataText", data)
 }
+
 func (self *DebuggerWindow) SetAsm(data []byte) {
 	self.win.Root().Call("clearAsm")
 
diff --git a/ethereal/flags.go b/ethereal/flags.go
index d5ca9f336a947b9924810c3388a239268bd6c9fa..c9327c3d31b49c859e2d22acb59a348141808deb 100644
--- a/ethereal/flags.go
+++ b/ethereal/flags.go
@@ -36,6 +36,7 @@ var LogLevel int
 // flags specific to gui client
 var AssetPath string
 
+//TODO: If we re-use the one defined in cmd.go the binary osx image crashes. If somebody finds out why we can dry this up.
 func defaultAssetPath() string {
 	var assetPath string
 	// If the current working directory is the go-ethereum dir
@@ -60,7 +61,6 @@ func defaultAssetPath() string {
 	}
 	return assetPath
 }
-
 func defaultDataDir() string {
 	usr, _ := user.Current()
 	return path.Join(usr.HomeDir, ".ethereal")
diff --git a/ethereal/gui.go b/ethereal/gui.go
index eb0c50cc367441a171ff3e6e22d68572b000b4a6..815bb267cf2f9ac62a2f7298313016206144bff3 100644
--- a/ethereal/gui.go
+++ b/ethereal/gui.go
@@ -7,6 +7,7 @@ import (
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethdb"
 	"github.com/ethereum/eth-go/ethlog"
+	"github.com/ethereum/eth-go/ethminer"
 	"github.com/ethereum/eth-go/ethpub"
 	"github.com/ethereum/eth-go/ethreact"
 	"github.com/ethereum/eth-go/ethutil"
@@ -14,6 +15,7 @@ import (
 	"github.com/ethereum/go-ethereum/utils"
 	"github.com/go-qml/qml"
 	"math/big"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -41,6 +43,8 @@ type Gui struct {
 	Session        string
 	clientIdentity *ethwire.SimpleClientIdentity
 	config         *ethutil.ConfigManager
+
+	miner *ethminer.Miner
 }
 
 // Create GUI, but doesn't start it
@@ -125,6 +129,7 @@ func (gui *Gui) ToggleMining() {
 		txt = "Start mining"
 	} else {
 		utils.StartMining(gui.eth)
+		gui.miner = utils.GetMiner()
 		txt = "Stop mining"
 	}
 
@@ -244,7 +249,11 @@ func (gui *Gui) readPreviousTransactions() {
 }
 
 func (gui *Gui) processBlock(block *ethchain.Block, initial bool) {
-	gui.win.Root().Call("addBlock", ethpub.NewPBlock(block), initial)
+	name := ethpub.FindNameInNameReg(gui.eth.StateManager(), block.Coinbase)
+	b := ethpub.NewPBlock(block)
+	b.Name = name
+
+	gui.win.Root().Call("addBlock", b, initial)
 }
 
 func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) {
@@ -263,20 +272,32 @@ func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) {
 	gui.win.Root().Call("setWalletValue", str)
 }
 
+func (self *Gui) getObjectByName(objectName string) qml.Object {
+	return self.win.Root().ObjectByName(objectName)
+}
+
 // Simple go routine function that updates the list of peers in the GUI
 func (gui *Gui) update() {
-	reactor := gui.eth.Reactor()
 
-	blockChan := make(chan ethreact.Event, 1)
-	txChan := make(chan ethreact.Event, 1)
-	objectChan := make(chan ethreact.Event, 1)
-	peerChan := make(chan ethreact.Event, 1)
-	ticker := time.NewTicker(5 * time.Second)
+	var (
+		blockChan     = make(chan ethreact.Event, 1)
+		txChan        = make(chan ethreact.Event, 1)
+		objectChan    = make(chan ethreact.Event, 1)
+		peerChan      = make(chan ethreact.Event, 1)
+		chainSyncChan = make(chan ethreact.Event, 1)
+		miningChan    = make(chan ethreact.Event, 1)
+	)
+
+	peerUpdateTicker := time.NewTicker(5 * time.Second)
+	generalUpdateTicker := time.NewTicker(1 * time.Second)
 
 	state := gui.eth.StateManager().TransState()
 
 	unconfirmedFunds := new(big.Int)
 	gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Amount)))
+	gui.getObjectByName("syncProgressIndicator").Set("visible", !gui.eth.IsUpToDate())
+
+	lastBlockLabel := gui.getObjectByName("lastBlockLabel")
 
 	go func() {
 		for {
@@ -319,18 +340,43 @@ func (gui *Gui) update() {
 
 					state.UpdateStateObject(object)
 				}
+			case msg := <-chainSyncChan:
+				sync := msg.Resource.(bool)
+				gui.win.Root().ObjectByName("syncProgressIndicator").Set("visible", sync)
+
 			case <-objectChan:
 				gui.loadAddressBook()
 			case <-peerChan:
 				gui.setPeerInfo()
-			case <-ticker.C:
+			case <-peerUpdateTicker.C:
 				gui.setPeerInfo()
+			case msg := <-miningChan:
+				if msg.Name == "miner:start" {
+					gui.miner = msg.Resource.(*ethminer.Miner)
+				} else {
+					gui.miner = nil
+				}
+			case <-generalUpdateTicker.C:
+				statusText := "#" + gui.eth.BlockChain().CurrentBlock.Number.String()
+				if gui.miner != nil {
+					pow := gui.miner.GetPow()
+					if pow.GetHashrate() != 0 {
+						statusText = "Mining @ " + strconv.FormatInt(pow.GetHashrate(), 10) + "Khash - " + statusText
+					}
+				}
+				lastBlockLabel.Set("text", statusText)
 			}
 		}
 	}()
+
+	reactor := gui.eth.Reactor()
+
 	reactor.Subscribe("newBlock", blockChan)
 	reactor.Subscribe("newTx:pre", txChan)
 	reactor.Subscribe("newTx:post", txChan)
+	reactor.Subscribe("chainSync", chainSyncChan)
+	reactor.Subscribe("miner:start", miningChan)
+	reactor.Subscribe("miner:stop", miningChan)
 
 	nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg()
 	if nameReg != nil {
@@ -357,7 +403,7 @@ func (gui *Gui) address() []byte {
 }
 
 func (gui *Gui) RegisterName(name string) {
-	name = fmt.Sprintf("\"%s\"", name)
+	name = fmt.Sprintf("\"register\"\n\"%s\"", name)
 
 	gui.pub.Transact(gui.privateKey(), "NameReg", "", "10000", "10000000000000", name)
 }
diff --git a/ethereal/main.go b/ethereal/main.go
index 645e8f2ce50153f76e5fa76bbf42593515461c56..e1cd43acec0954249ab9f3e05d4b2061ca992d34 100644
--- a/ethereal/main.go
+++ b/ethereal/main.go
@@ -10,7 +10,7 @@ import (
 
 const (
 	ClientIdentifier = "Ethereal"
-	Version          = "0.5.16"
+	Version          = "0.5.17"
 )
 
 func main() {
diff --git a/ethereum/cmd.go b/ethereum/cmd.go
index 08147824dcb79e64ce969c26c0f56086e5a9aa85..ff2b8409cf0d5a453e3e06dab505997b3f1b341b 100644
--- a/ethereum/cmd.go
+++ b/ethereum/cmd.go
@@ -2,13 +2,14 @@ package main
 
 import (
 	"github.com/ethereum/eth-go"
+	"github.com/ethereum/go-ethereum/ethereum/repl"
 	"github.com/ethereum/go-ethereum/utils"
 	"io/ioutil"
 	"os"
 )
 
 func InitJsConsole(ethereum *eth.Ethereum) {
-	repl := NewJSRepl(ethereum)
+	repl := ethrepl.NewJSRepl(ethereum)
 	go repl.Start()
 	utils.RegisterInterrupt(func(os.Signal) {
 		repl.Stop()
@@ -24,7 +25,7 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
 	if err != nil {
 		logger.Fatalln(err)
 	}
-	re := NewJSRE(ethereum)
+	re := ethrepl.NewJSRE(ethereum)
 	utils.RegisterInterrupt(func(os.Signal) {
 		re.Stop()
 	})
diff --git a/ethereum/flags.go b/ethereum/flags.go
index af0fd9a6981bcdee4f9fb35484af88bf7963a149..4f59ddf060d81799e98e16e1ab322a8f27da2896 100644
--- a/ethereum/flags.go
+++ b/ethereum/flags.go
@@ -12,6 +12,7 @@ import (
 var Identifier string
 var KeyRing string
 var DiffTool bool
+var DiffType string
 var KeyStore string
 var StartRpc bool
 var RpcPort int
@@ -68,6 +69,7 @@ func Init() {
 	flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
 	flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
 	flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0")
+	flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false")
 
 	flag.BoolVar(&StartMining, "mine", false, "start dagger mining")
 	flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console")
diff --git a/ethereum/main.go b/ethereum/main.go
index 39226c1d2bc760c6b71c5dd43f89e46f62efa654..b670cb495b4614405f7fe9ec5283c777e02681a5 100644
--- a/ethereum/main.go
+++ b/ethereum/main.go
@@ -9,7 +9,7 @@ import (
 
 const (
 	ClientIdentifier = "Ethereum(G)"
-	Version          = "0.5.16"
+	Version          = "0.5.17"
 )
 
 var logger = ethlog.NewLogger("CLI")
@@ -29,6 +29,7 @@ func main() {
 
 	utils.InitConfig(ConfigFile, Datadir, "ETH")
 	ethutil.Config.Diff = DiffTool
+	ethutil.Config.DiffType = DiffType
 
 	utils.InitDataDir(Datadir)
 
diff --git a/ethereum/javascript_runtime.go b/ethereum/repl/javascript_runtime.go
similarity index 99%
rename from ethereum/javascript_runtime.go
rename to ethereum/repl/javascript_runtime.go
index 998ff7520e30c680e0fabce0b67afc503d0ba086..091e758e10f527b4a6ba62b954407f2fab081576 100644
--- a/ethereum/javascript_runtime.go
+++ b/ethereum/repl/javascript_runtime.go
@@ -1,4 +1,4 @@
-package main
+package ethrepl
 
 import (
 	"fmt"
diff --git a/ethereum/js_lib.go b/ethereum/repl/js_lib.go
similarity index 98%
rename from ethereum/js_lib.go
rename to ethereum/repl/js_lib.go
index 189dcc3a0b627b3df3d993d97b7a926f5d91320b..c781c43d0c8d6371795e7ca5965123928e7e0862 100644
--- a/ethereum/js_lib.go
+++ b/ethereum/repl/js_lib.go
@@ -1,4 +1,4 @@
-package main
+package ethrepl
 
 const jsLib = `
 function pp(object) {
diff --git a/ethereum/repl/repl.go b/ethereum/repl/repl.go
new file mode 100644
index 0000000000000000000000000000000000000000..92d4ad86a3ca060cb35e36199b56eac98cf1e0f0
--- /dev/null
+++ b/ethereum/repl/repl.go
@@ -0,0 +1,83 @@
+package ethrepl
+
+import (
+	"bufio"
+	"fmt"
+	"github.com/ethereum/eth-go"
+	"github.com/ethereum/eth-go/ethlog"
+	"github.com/ethereum/eth-go/ethutil"
+	"io"
+	"os"
+	"path"
+)
+
+var logger = ethlog.NewLogger("REPL")
+
+type Repl interface {
+	Start()
+	Stop()
+}
+
+type JSRepl struct {
+	re *JSRE
+
+	prompt string
+
+	history *os.File
+
+	running bool
+}
+
+func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
+	hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm)
+	if err != nil {
+		panic(err)
+	}
+
+	return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist}
+}
+
+func (self *JSRepl) Start() {
+	if !self.running {
+		self.running = true
+		logger.Infoln("init JS Console")
+		reader := bufio.NewReader(self.history)
+		for {
+			line, err := reader.ReadString('\n')
+			if err != nil && err == io.EOF {
+				break
+			} else if err != nil {
+				fmt.Println("error reading history", err)
+				break
+			}
+
+			addHistory(line[:len(line)-1])
+		}
+		self.read()
+	}
+}
+
+func (self *JSRepl) Stop() {
+	if self.running {
+		self.running = false
+		self.re.Stop()
+		logger.Infoln("exit JS Console")
+		self.history.Close()
+	}
+}
+
+func (self *JSRepl) parseInput(code string) {
+	defer func() {
+		if r := recover(); r != nil {
+			fmt.Println("[native] error", r)
+		}
+	}()
+
+	value, err := self.re.Run(code)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	self.PrintValue(value)
+}
diff --git a/ethereum/repl_darwin.go b/ethereum/repl/repl_darwin.go
similarity index 99%
rename from ethereum/repl_darwin.go
rename to ethereum/repl/repl_darwin.go
index 62b40059acbe50b31b06c0b83b24ed57c345ec3a..3a91b0d442cd457222e5aa941e011fd641df4567 100644
--- a/ethereum/repl_darwin.go
+++ b/ethereum/repl/repl_darwin.go
@@ -1,4 +1,4 @@
-package main
+package ethrepl
 
 // #cgo darwin CFLAGS: -I/usr/local/opt/readline/include
 // #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib
diff --git a/ethereum/repl_linux.go b/ethereum/repl/repl_linux.go
similarity index 100%
rename from ethereum/repl_linux.go
rename to ethereum/repl/repl_linux.go
diff --git a/ethereum/repl_windows.go b/ethereum/repl/repl_windows.go
similarity index 95%
rename from ethereum/repl_windows.go
rename to ethereum/repl/repl_windows.go
index 9d4787772f069d63e209bce694c1695da1f9a8c2..4106c89bc3035f1b30094de77d8beb74c81465bc 100644
--- a/ethereum/repl_windows.go
+++ b/ethereum/repl/repl_windows.go
@@ -1,4 +1,4 @@
-package main
+package ethrepl
 
 import (
 	"bufio"
diff --git a/ethereum/repl.go b/ethereum/repl/types.go
similarity index 57%
rename from ethereum/repl.go
rename to ethereum/repl/types.go
index 34380a06f4c774df63bcdeff5b08840b157afe19..16a18e6e5d47f0c321fe29d56af8ea875a70333c 100644
--- a/ethereum/repl.go
+++ b/ethereum/repl/types.go
@@ -1,84 +1,26 @@
-package main
+package ethrepl
 
 import (
-	"bufio"
 	"fmt"
-	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethpub"
 	"github.com/ethereum/eth-go/ethutil"
 	"github.com/obscuren/otto"
-	"io"
-	"os"
-	"path"
 )
 
-type Repl interface {
-	Start()
-	Stop()
-}
-
-type JSRepl struct {
-	re *JSRE
-
-	prompt string
-
-	history *os.File
-
-	running bool
-}
-
-func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
-	hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm)
-	if err != nil {
-		panic(err)
-	}
-
-	return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist}
-}
-
-func (self *JSRepl) Start() {
-	if !self.running {
-		self.running = true
-		logger.Infoln("init JS Console")
-		reader := bufio.NewReader(self.history)
-		for {
-			line, err := reader.ReadString('\n')
-			if err != nil && err == io.EOF {
-				break
-			} else if err != nil {
-				fmt.Println("error reading history", err)
-				break
-			}
-
-			addHistory(line[:len(line)-1])
-		}
-		self.read()
-	}
-}
-
-func (self *JSRepl) Stop() {
-	if self.running {
-		self.running = false
-		self.re.Stop()
-		logger.Infoln("exit JS Console")
-		self.history.Close()
-	}
+type JSStateObject struct {
+	*ethpub.PStateObject
+	eth *JSEthereum
 }
 
-func (self *JSRepl) parseInput(code string) {
-	defer func() {
-		if r := recover(); r != nil {
-			fmt.Println("[native] error", r)
-		}
-	}()
+func (self *JSStateObject) EachStorage(call otto.FunctionCall) otto.Value {
+	cb := call.Argument(0)
+	self.PStateObject.EachStorage(func(key string, value *ethutil.Value) {
+		value.Decode()
 
-	value, err := self.re.Run(code)
-	if err != nil {
-		fmt.Println(err)
-		return
-	}
+		cb.Call(self.eth.toVal(self), self.eth.toVal(key), self.eth.toVal(ethutil.Bytes2Hex(value.Bytes())))
+	})
 
-	self.PrintValue(value)
+	return otto.UndefinedValue()
 }
 
 // The JSEthereum object attempts to wrap the PEthereum object and returns
@@ -110,7 +52,7 @@ func (self *JSEthereum) GetKey() otto.Value {
 }
 
 func (self *JSEthereum) GetStateObject(addr string) otto.Value {
-	return self.toVal(self.PEthereum.GetStateObject(addr))
+	return self.toVal(&JSStateObject{self.PEthereum.GetStateObject(addr), self})
 }
 
 func (self *JSEthereum) GetStateKeyVals(addr string) otto.Value {
diff --git a/utils/cmd.go b/utils/cmd.go
index dfd867d64fe62d33d3eec69ef290d0b3ce2dad3e..0eeb1049e1aa29d6813193ccea7c1e30bad9f4e5 100644
--- a/utils/cmd.go
+++ b/utils/cmd.go
@@ -1,6 +1,7 @@
 package utils
 
 import (
+	"bitbucket.org/kardianos/osext"
 	"fmt"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethcrypto"
@@ -16,6 +17,8 @@ import (
 	"os"
 	"os/signal"
 	"path"
+	"path/filepath"
+	"runtime"
 	"time"
 )
 
@@ -165,7 +168,34 @@ func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *ethcry
 	return keyManager
 }
 
+func DefaultAssetPath() string {
+	var assetPath string
+	// If the current working directory is the go-ethereum dir
+	// assume a debug build and use the source directory as
+	// asset directory.
+	pwd, _ := os.Getwd()
+	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal") {
+		assetPath = path.Join(pwd, "assets")
+	} else {
+		switch runtime.GOOS {
+		case "darwin":
+			// Get Binary Directory
+			exedir, _ := osext.ExecutableFolder()
+			assetPath = filepath.Join(exedir, "../Resources")
+		case "linux":
+			assetPath = "/usr/share/ethereal"
+		case "windows":
+			assetPath = "./assets"
+		default:
+			assetPath = "."
+		}
+	}
+	return assetPath
+}
+
 func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
+	ethcrypto.InitWords(DefaultAssetPath()) // Init mnemonic word list
+
 	var err error
 	switch {
 	case GenAddr:
@@ -205,7 +235,11 @@ func StartRpc(ethereum *eth.Ethereum, RpcPort int) {
 	}
 }
 
-var miner ethminer.Miner
+var miner *ethminer.Miner
+
+func GetMiner() *ethminer.Miner {
+	return miner
+}
 
 func StartMining(ethereum *eth.Ethereum) bool {
 	if !ethereum.Mining {
@@ -214,13 +248,14 @@ func StartMining(ethereum *eth.Ethereum) bool {
 
 		go func() {
 			logger.Infoln("Start mining")
-			miner = ethminer.NewDefaultMiner(addr, ethereum)
+			if miner == nil {
+				miner = ethminer.NewDefaultMiner(addr, ethereum)
+			}
 			// Give it some time to connect with peers
 			time.Sleep(3 * time.Second)
 			for !ethereum.IsUpToDate() {
 				time.Sleep(5 * time.Second)
 			}
-
 			miner.Start()
 		}()
 		RegisterInterrupt(func(os.Signal) {
@@ -232,12 +267,14 @@ func StartMining(ethereum *eth.Ethereum) bool {
 }
 
 func StopMining(ethereum *eth.Ethereum) bool {
-	if ethereum.Mining {
+	if ethereum.Mining && miner != nil {
 		miner.Stop()
 		logger.Infoln("Stopped mining")
 		ethereum.Mining = false
+
 		return true
 	}
+
 	return false
 }