diff --git a/cmd/mist/assets/qml/main.qml b/cmd/mist/assets/qml/main.qml
index 2b56b723615ef674b08fe4a5d5e82b2f533141d6..dce279518fc9c43e901d64ab24796848caec0a2e 100644
--- a/cmd/mist/assets/qml/main.qml
+++ b/cmd/mist/assets/qml/main.qml
@@ -289,6 +289,7 @@ ApplicationWindow {
             styleColor: "#797979"
         }
 
+	/*
         Label {
             //y: 6
             objectName: "miningLabel"
@@ -307,6 +308,7 @@ ApplicationWindow {
             anchors.right: peerGroup.left
             anchors.rightMargin: 5
         }
+	*/
 
         ProgressBar {
             visible: false
@@ -1101,4 +1103,4 @@ ApplicationWindow {
                  addrField.focus = true
              }
          }
-     }
\ No newline at end of file
+     }
diff --git a/cmd/mist/assets/qml/views/miner.qml b/cmd/mist/assets/qml/views/miner.qml
index 193ce37beaf95c62032d15798703cf54de23583b..0938644b9ec9e0dcd917cfdf287239b11e8c2b75 100644
--- a/cmd/mist/assets/qml/views/miner.qml
+++ b/cmd/mist/assets/qml/views/miner.qml
@@ -14,6 +14,30 @@ Rectangle {
 
 	color: "#00000000"
 
+        Label {
+	    visible: false
+            id: lastBlockLabel
+            objectName: "lastBlockLabel"
+            text: "---"
+            font.pixelSize: 10
+            anchors.right: peerGroup.left
+            anchors.rightMargin: 5
+	    onTextChanged: {
+		//menuItem.secondaryTitle = text
+	    }
+        }
+
+        Label {
+            objectName: "miningLabel"
+            visible: false
+            font.pixelSize: 10
+            anchors.right: lastBlockLabel.left
+            anchors.rightMargin: 5
+	    onTextChanged: {
+		menuItem.secondaryTitle = text
+	    }
+        }
+
 	ColumnLayout {
 		spacing: 10
 		anchors.fill: parent
diff --git a/miner/agent.go b/miner/agent.go
index b12b9da4d46003bbe91cec528a8f53654d154d84..ddd8e667561967a4cd2476ee6d8f0e1927785a77 100644
--- a/miner/agent.go
+++ b/miner/agent.go
@@ -9,7 +9,7 @@ type CpuMiner struct {
 	c             chan *types.Block
 	quit          chan struct{}
 	quitCurrentOp chan struct{}
-	returnCh      chan<- []byte
+	returnCh      chan<- Work
 
 	index int
 	pow   pow.PoW
@@ -28,9 +28,9 @@ func NewCpuMiner(index int, pow pow.PoW) *CpuMiner {
 	return miner
 }
 
-func (self *CpuMiner) Work() chan<- *types.Block   { return self.c }
-func (self *CpuMiner) Pow() pow.PoW                { return self.pow }
-func (self *CpuMiner) SetNonceCh(ch chan<- []byte) { self.returnCh = ch }
+func (self *CpuMiner) Work() chan<- *types.Block { return self.c }
+func (self *CpuMiner) Pow() pow.PoW              { return self.pow }
+func (self *CpuMiner) SetNonceCh(ch chan<- Work) { self.returnCh = ch }
 
 func (self *CpuMiner) Stop() {
 	close(self.quit)
@@ -42,7 +42,6 @@ out:
 	for {
 		select {
 		case block := <-self.c:
-			minerlogger.Infof("miner[%d] got block\n", self.index)
 			// make sure it's open
 			self.quitCurrentOp <- struct{}{}
 
@@ -66,9 +65,9 @@ done:
 }
 
 func (self *CpuMiner) mine(block *types.Block) {
-	minerlogger.Infof("started agent[%d]. mining...\n", self.index)
+	minerlogger.Infof("(re)started agent[%d]. mining...\n", self.index)
 	nonce := self.pow.Search(block, self.quitCurrentOp)
 	if nonce != nil {
-		self.returnCh <- nonce
+		self.returnCh <- Work{block.Number().Uint64(), nonce}
 	}
 }
diff --git a/miner/miner.go b/miner/miner.go
index f184042dc5ff63a52aaae8c8310fd094a2ef55ba..e3e7bead2629a20d8c1879809b7113d5ef4a8dd2 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -38,22 +38,16 @@ func (self *Miner) Mining() bool {
 }
 
 func (self *Miner) Start() {
+	self.mining = true
+
 	self.worker.start()
 
 	self.worker.commitNewWork()
-
-	/*
-		timer := time.NewTicker(time.Second)
-		for {
-			select {
-			case <-timer.C:
-				fmt.Printf("%d workers. %d/Khash\n", len(self.worker.agents), self.HashRate())
-			}
-		}
-	*/
 }
 
 func (self *Miner) Stop() {
+	self.mining = false
+
 	self.worker.stop()
 }
 
diff --git a/miner/worker.go b/miner/worker.go
index d0d085861f5f092148bb4d43ce2b3f5de06f33c3..cd1c6e28f96cf9beb4a24fc1637dfccefe88ace6 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -41,16 +41,21 @@ func env(block *types.Block, eth *eth.Ethereum) *environment {
 	return env
 }
 
+type Work struct {
+	Number uint64
+	Nonce  []byte
+}
+
 type Agent interface {
 	Work() chan<- *types.Block
-	SetNonceCh(chan<- []byte)
+	SetNonceCh(chan<- Work)
 	Stop()
 	Pow() pow.PoW
 }
 
 type worker struct {
 	agents []Agent
-	recv   chan []byte
+	recv   chan Work
 	mux    *event.TypeMux
 	quit   chan struct{}
 	pow    pow.PoW
@@ -61,13 +66,15 @@ type worker struct {
 	coinbase []byte
 
 	current *environment
+
+	mining bool
 }
 
 func newWorker(coinbase []byte, eth *eth.Ethereum) *worker {
 	return &worker{
 		eth:      eth,
 		mux:      eth.EventMux(),
-		recv:     make(chan []byte),
+		recv:     make(chan Work),
 		chain:    eth.ChainManager(),
 		proc:     eth.BlockProcessor(),
 		coinbase: coinbase,
@@ -75,11 +82,17 @@ func newWorker(coinbase []byte, eth *eth.Ethereum) *worker {
 }
 
 func (self *worker) start() {
+	self.mining = true
+
+	self.quit = make(chan struct{})
+
 	go self.update()
 	go self.wait()
 }
 
 func (self *worker) stop() {
+	self.mining = false
+
 	close(self.quit)
 }
 
@@ -107,26 +120,31 @@ out:
 			break out
 		}
 	}
+
+	events.Unsubscribe()
 }
 
 func (self *worker) wait() {
 	for {
-		for nonce := range self.recv {
-			self.current.block.Header().Nonce = nonce
-			fmt.Println(self.current.block)
+		for work := range self.recv {
+			if self.current.block.Number().Uint64() == work.Number {
+				self.current.block.Header().Nonce = work.Nonce
 
-			self.chain.InsertChain(types.Blocks{self.current.block})
+				self.chain.InsertChain(types.Blocks{self.current.block})
+			}
 			break
 		}
 	}
 }
 
 func (self *worker) push() {
-	self.current.state.Update(ethutil.Big0)
-	self.current.block.SetRoot(self.current.state.Root())
+	if self.mining {
+		self.current.state.Update(ethutil.Big0)
+		self.current.block.SetRoot(self.current.state.Root())
 
-	for _, agent := range self.agents {
-		agent.Work() <- self.current.block
+		for _, agent := range self.agents {
+			agent.Work() <- self.current.block
+		}
 	}
 }