diff --git a/cmd/ethereum/js.go b/cmd/ethereum/js.go
index 5432fb9b1b1314c2a2360c85599cbb55e78cb71a..3b98b588e7b614c7f28c4944e638a44df32c0490 100644
--- a/cmd/ethereum/js.go
+++ b/cmd/ethereum/js.go
@@ -249,12 +249,14 @@ func (self *jsre) dump(call otto.FunctionCall) otto.Value {
 }
 
 func (self *jsre) stopMining(call otto.FunctionCall) otto.Value {
-	self.xeth.Miner().Stop()
+	self.ethereum.StopMining()
 	return otto.TrueValue()
 }
 
 func (self *jsre) startMining(call otto.FunctionCall) otto.Value {
-	self.xeth.Miner().Start()
+	if err := self.ethereum.StartMining(); err != nil {
+		return otto.FalseValue()
+	}
 	return otto.TrueValue()
 }
 
diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go
index 73c67bdc9ac7556c0b1a04f02fd518be26141e55..8b01457e66224ef6b0262e7fbcea80926dfeeeab 100644
--- a/cmd/ethereum/main.go
+++ b/cmd/ethereum/main.go
@@ -30,7 +30,6 @@ import (
 	"time"
 
 	"github.com/codegangsta/cli"
-	"github.com/ethereum/go-ethereum/accounts"
 	"github.com/ethereum/go-ethereum/cmd/utils"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/eth"
@@ -158,10 +157,7 @@ func run(ctx *cli.Context) {
 	fmt.Printf("Welcome to the FRONTIER\n")
 	utils.HandleInterrupt()
 	eth, err := utils.GetEthereum(ClientIdentifier, Version, ctx)
-	if err == accounts.ErrNoKeys {
-		utils.Fatalf(`No accounts configured.
-Please run 'ethereum account new' to create a new account.`)
-	} else if err != nil {
+	if err != nil {
 		utils.Fatalf("%v", err)
 	}
 
@@ -172,10 +168,7 @@ Please run 'ethereum account new' to create a new account.`)
 
 func runjs(ctx *cli.Context) {
 	eth, err := utils.GetEthereum(ClientIdentifier, Version, ctx)
-	if err == accounts.ErrNoKeys {
-		utils.Fatalf(`No accounts configured.
-Please run 'ethereum account new' to create a new account.`)
-	} else if err != nil {
+	if err != nil {
 		utils.Fatalf("%v", err)
 	}
 
@@ -214,7 +207,7 @@ func startEth(ctx *cli.Context, eth *eth.Ethereum) {
 		utils.StartRPC(eth, ctx)
 	}
 	if ctx.GlobalBool(utils.MiningEnabledFlag.Name) {
-		eth.Miner().Start()
+		eth.StartMining()
 	}
 }
 
diff --git a/cmd/mist/assets/qml/views/miner.qml b/cmd/mist/assets/qml/views/miner.qml
index 4025ff4857a74eb52665afeee4405b9a1debb7a4..ff2bf85ca7f9fa6b35c7891c329bf6cb34ed75ae 100644
--- a/cmd/mist/assets/qml/views/miner.qml
+++ b/cmd/mist/assets/qml/views/miner.qml
@@ -55,8 +55,8 @@ Rectangle {
 					Button {
 						text: "Start"
 						onClicked: {
-							eth.setGasPrice(minGasPrice.text || "10000000000000");
-							eth.setExtra(blockExtra.text)
+							// eth.setGasPrice(minGasPrice.text || "10000000000000");
+							// eth.setExtra(blockExtra.text)
 							if (eth.toggleMining()) {
 								this.text = "Stop";
 							} else {
@@ -65,35 +65,35 @@ Rectangle {
 						}
 					}
 
-					Rectangle {
-						id: minGasPriceRect
-						anchors.top: parent.top
-						anchors.topMargin: 2
-						width: 200
-						TextField {
-							id: minGasPrice
-							placeholderText: "Min Gas: 10000000000000"
-							width: 200
-							validator: RegExpValidator { regExp: /\d*/ }
-						}
-					}
+					// Rectangle {
+					// 	id: minGasPriceRect
+					// 	anchors.top: parent.top
+					// 	anchors.topMargin: 2
+					// 	width: 200
+					// 	TextField {
+					// 		id: minGasPrice
+					// 		placeholderText: "Min Gas: 10000000000000"
+					// 		width: 200
+					// 		validator: RegExpValidator { regExp: /\d*/ }
+					// 	}
+					// }
 
-					Rectangle {
-						width: 300
-						anchors {
-							left: minGasPriceRect.right
-							leftMargin: 5
-							top: parent.top
-							topMargin: 2
-						}
+					// Rectangle {
+					// 	width: 300
+					// 	anchors {
+					// 		left: minGasPriceRect.right
+					// 		leftMargin: 5
+					// 		top: parent.top
+					// 		topMargin: 2
+					// 	}
 
-						TextField {
-							id: blockExtra
-							placeholderText: "Extra"
-							width: parent.width
-							maximumLength: 1024
-						}
-					}
+					// 	TextField {
+					// 		id: blockExtra
+					// 		placeholderText: "Extra"
+					// 		width: parent.width
+					// 		maximumLength: 1024
+					// 	}
+					// }
 				}
 			}
 
diff --git a/cmd/mist/assets/qml/views/network.qml b/cmd/mist/assets/qml/views/network.qml
index d33b5773cdbf0f3e7321f495c4b9d73f5364448b..fe4c7734fcc5a15b3533f7536d499ff2fc9e3c43 100644
--- a/cmd/mist/assets/qml/views/network.qml
+++ b/cmd/mist/assets/qml/views/network.qml
@@ -93,7 +93,6 @@ Rectangle {
 	         			// Check if it's mining and set it accordingly       				
          				if (miningSliderValue > 0 && !eth.miner().mining()) {
 							// If the 
-							eth.setGasPrice("10000000000000");
 	         				eth.miner().start();
 	         			} else if (miningSliderValue == 0 && eth.miner().mining()) {
 	         				eth.miner().stop();
diff --git a/cmd/mist/ui_lib.go b/cmd/mist/ui_lib.go
index 4198c6316d64b7c6e6354ae60bcce2b3377e92c6..2679e0f95fbf22656742f84443c4287d230e2508 100644
--- a/cmd/mist/ui_lib.go
+++ b/cmd/mist/ui_lib.go
@@ -175,22 +175,12 @@ func (self *UiLib) RemoveLocalTransaction(id int) {
 	//self.miner.RemoveLocalTx(id)
 }
 
-func (self *UiLib) SetGasPrice(price string) {
-	self.Miner().MinAcceptedGasPrice = ethutil.Big(price)
-}
-
-func (self *UiLib) SetExtra(extra string) {
-	self.Miner().Extra = extra
-}
-
 func (self *UiLib) ToggleMining() bool {
-	if !self.Miner().Mining() {
-		self.Miner().Start()
-
-		return true
+	if !self.eth.IsMining() {
+		err := self.eth.StartMining()
+		return err == nil
 	} else {
-		self.Miner().Stop()
-
+		self.eth.StopMining()
 		return false
 	}
 }
diff --git a/core/types/transaction.go b/core/types/transaction.go
index 7d34c86f47879da542b800359f7f3fc316d400c2..88a718f937d3f544705ac7bd22d2292f1b1060fe 100644
--- a/core/types/transaction.go
+++ b/core/types/transaction.go
@@ -23,7 +23,7 @@ type Transaction struct {
 	Recipient    []byte
 	Amount       *big.Int
 	Payload      []byte
-	V            uint64
+	V            byte
 	R, S         []byte
 }
 
@@ -136,7 +136,7 @@ func (tx *Transaction) Sign(privk []byte) error {
 
 	tx.R = sig[:32]
 	tx.S = sig[32:64]
-	tx.V = uint64(sig[64] + 27)
+	tx.V = sig[64] + 27
 
 	return nil
 }
@@ -144,7 +144,7 @@ func (tx *Transaction) Sign(privk []byte) error {
 func (tx *Transaction) SetSignatureValues(sig []byte) error {
 	tx.R = sig[:32]
 	tx.S = sig[32:64]
-	tx.V = uint64(sig[64] + 27)
+	tx.V = sig[64] + 27
 	return nil
 }
 
@@ -173,7 +173,7 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
 	tx.Recipient = decoder.Get(3).Bytes()
 	tx.Amount = decoder.Get(4).BigInt()
 	tx.Payload = decoder.Get(5).Bytes()
-	tx.V = decoder.Get(6).Uint()
+	tx.V = decoder.Get(6).Byte()
 	tx.R = decoder.Get(7).Bytes()
 	tx.S = decoder.Get(8).Bytes()
 }
diff --git a/eth/backend.go b/eth/backend.go
index 9e365161dda3f89ca3b5e6137d8b73ca7f4d1504..9c497a58635434a7918504f6dfc0ea45bfea2023 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -166,18 +166,13 @@ func New(config *Config) (*Ethereum, error) {
 		DataDir:        config.DataDir,
 	}
 
-	cb, err := eth.accountManager.Coinbase()
-	if err != nil {
-		return nil, err
-	}
-
 	eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())
 	pow := ethash.New(eth.chainManager)
 	eth.txPool = core.NewTxPool(eth.EventMux())
 	eth.blockProcessor = core.NewBlockProcessor(stateDb, pow, eth.txPool, eth.chainManager, eth.EventMux())
 	eth.chainManager.SetProcessor(eth.blockProcessor)
 	eth.whisper = whisper.New()
-	eth.miner = miner.New(cb, eth, pow, config.MinerThreads)
+	eth.miner = miner.New(eth, pow, config.MinerThreads)
 
 	hasBlock := eth.chainManager.HasBlock
 	insertChain := eth.chainManager.InsertChain
@@ -211,6 +206,19 @@ func New(config *Config) (*Ethereum, error) {
 	return eth, nil
 }
 
+func (s *Ethereum) StartMining() error {
+	cb, err := s.accountManager.Coinbase()
+	if err != nil {
+		servlogger.Errorf("Cannot start mining without coinbase: %v\n", err)
+		return fmt.Errorf("no coinbase: %v", err)
+	}
+	s.miner.Start(cb)
+	return nil
+}
+
+func (s *Ethereum) StopMining()    { s.miner.Stop() }
+func (s *Ethereum) IsMining() bool { return s.miner.Mining() }
+
 func (s *Ethereum) Logger() logger.LogSystem             { return s.logger }
 func (s *Ethereum) Name() string                         { return s.net.Name }
 func (s *Ethereum) AccountManager() *accounts.Manager    { return s.accountManager }
@@ -222,7 +230,6 @@ func (s *Ethereum) Whisper() *whisper.Whisper            { return s.whisper }
 func (s *Ethereum) EventMux() *event.TypeMux             { return s.eventMux }
 func (s *Ethereum) BlockDb() ethutil.Database            { return s.blockDb }
 func (s *Ethereum) StateDb() ethutil.Database            { return s.stateDb }
-func (s *Ethereum) Miner() *miner.Miner                  { return s.miner }
 func (s *Ethereum) IsListening() bool                    { return true } // Always listening
 func (s *Ethereum) PeerCount() int                       { return s.net.PeerCount() }
 func (s *Ethereum) Peers() []*p2p.Peer                   { return s.net.Peers() }
@@ -261,7 +268,7 @@ func (s *Ethereum) Start() error {
 }
 
 func (s *Ethereum) StartForTest() {
-		jsonlogger.LogJson(&logger.LogStarting{
+	jsonlogger.LogJson(&logger.LogStarting{
 		ClientString:    s.net.Name,
 		ProtocolVersion: ProtocolVersion,
 	})
diff --git a/miner/miner.go b/miner/miner.go
index d3b1f578a0160be50463d61609ca3109df9c8db2..7bf67a6ec46d05269b55c8bc435f689612361fe8 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -17,44 +17,34 @@ type Miner struct {
 	MinAcceptedGasPrice *big.Int
 	Extra               string
 
-	Coinbase []byte
-	mining   bool
-
-	pow pow.PoW
+	mining bool
+	eth    core.Backend
+	pow    pow.PoW
 }
 
-func New(coinbase []byte, eth core.Backend, pow pow.PoW, minerThreads int) *Miner {
-	miner := &Miner{
-		Coinbase: coinbase,
-		worker:   newWorker(coinbase, eth),
-		pow:      pow,
-	}
-
-	minerThreads = 1
-	for i := 0; i < minerThreads; i++ {
-		miner.worker.register(NewCpuMiner(i, miner.pow))
-	}
-
-	return miner
+func New(eth core.Backend, pow pow.PoW, minerThreads int) *Miner {
+	// note: minerThreads is currently ignored because
+	// ethash is not thread safe.
+	return &Miner{eth: eth, pow: pow}
 }
 
 func (self *Miner) Mining() bool {
 	return self.mining
 }
 
-func (self *Miner) Start() {
+func (self *Miner) Start(coinbase []byte) {
 	self.mining = true
+	self.worker = newWorker(coinbase, self.eth)
+	self.worker.register(NewCpuMiner(0, self.pow))
 
 	self.pow.(*ethash.Ethash).UpdateDAG()
 
 	self.worker.start()
-
 	self.worker.commitNewWork()
 }
 
 func (self *Miner) Stop() {
 	self.mining = false
-
 	self.worker.stop()
 
 	//self.pow.(*ethash.Ethash).Stop()
diff --git a/xeth/xeth.go b/xeth/xeth.go
index d8dd66aecad658f7c10d3b8d4854fc5334a44d22..70172a1c8b7ec67f2ae6637dee6bd40f41b241cb 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -14,7 +14,6 @@ import (
 	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/event"
 	"github.com/ethereum/go-ethereum/logger"
-	"github.com/ethereum/go-ethereum/miner"
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/state"
 	"github.com/ethereum/go-ethereum/whisper"
@@ -35,7 +34,10 @@ type Backend interface {
 	StateDb() ethutil.Database
 	EventMux() *event.TypeMux
 	Whisper() *whisper.Whisper
-	Miner() *miner.Miner
+
+	IsMining() bool
+	StartMining() error
+	StopMining()
 }
 
 // Frontend should be implemented by users of XEth. Its methods are
@@ -65,7 +67,6 @@ type XEth struct {
 	accountManager *accounts.Manager
 	state          *State
 	whisper        *Whisper
-	miner          *miner.Miner
 
 	frontend Frontend
 }
@@ -87,7 +88,6 @@ func New(eth Backend, frontend Frontend) *XEth {
 		chainManager:   eth.ChainManager(),
 		accountManager: eth.AccountManager(),
 		whisper:        NewWhisper(eth.Whisper()),
-		miner:          eth.Miner(),
 		frontend:       frontend,
 	}
 	if frontend == nil {
@@ -104,7 +104,6 @@ func (self *XEth) WithState(statedb *state.StateDB) *XEth {
 		blockProcessor: self.blockProcessor,
 		chainManager:   self.chainManager,
 		whisper:        self.whisper,
-		miner:          self.miner,
 	}
 
 	xeth.state = NewState(xeth, statedb)
@@ -112,8 +111,7 @@ func (self *XEth) WithState(statedb *state.StateDB) *XEth {
 }
 func (self *XEth) State() *State { return self.state }
 
-func (self *XEth) Whisper() *Whisper   { return self.whisper }
-func (self *XEth) Miner() *miner.Miner { return self.miner }
+func (self *XEth) Whisper() *Whisper { return self.whisper }
 
 func (self *XEth) BlockByHash(strHash string) *Block {
 	hash := fromHex(strHash)
@@ -172,18 +170,19 @@ func (self *XEth) PeerCount() int {
 }
 
 func (self *XEth) IsMining() bool {
-	return self.miner.Mining()
+	return self.eth.IsMining()
 }
 
 func (self *XEth) SetMining(shouldmine bool) bool {
-	ismining := self.miner.Mining()
+	ismining := self.eth.IsMining()
 	if shouldmine && !ismining {
-		self.miner.Start()
+		err := self.eth.StartMining()
+		return err == nil
 	}
 	if ismining && !shouldmine {
-		self.miner.Stop()
+		self.eth.StopMining()
 	}
-	return self.miner.Mining()
+	return self.eth.IsMining()
 }
 
 func (self *XEth) IsListening() bool {