diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go
index 4af0cff4336c7f3ad0b4d9c23a66e0a06639b8db..cbd8daf2fc0819ced6baa0b934b630369baaa57a 100644
--- a/cmd/mist/gui.go
+++ b/cmd/mist/gui.go
@@ -159,8 +159,6 @@ func (gui *Gui) Stop() {
 		gui.win.Hide()
 	}
 
-	gui.uiLib.jsEngine.Stop()
-
 	guilogger.Infoln("Stopped")
 }
 
diff --git a/cmd/mist/ui_lib.go b/cmd/mist/ui_lib.go
index 4fa6e8e55abd5715e618063c960cae2af3f3e15c..098e8fca5c9be5b57df18f51894f61d3cb379984 100644
--- a/cmd/mist/ui_lib.go
+++ b/cmd/mist/ui_lib.go
@@ -58,7 +58,8 @@ type UiLib struct {
 }
 
 func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
-	lib := &UiLib{XEth: xeth.New(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*xeth.JSFilter)}
+	x := xeth.New(eth)
+	lib := &UiLib{XEth: x, engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(x), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*xeth.JSFilter)}
 	lib.filterManager = filter.NewFilterManager(eth.EventMux())
 	go lib.filterManager.Start()
 
diff --git a/core/block_processor.go b/core/block_processor.go
index c2799dc48d980e923de6225c75d59717b13ab4d2..34c12729cd4deab4b30ea20ae26bbd3e4168b184 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -253,9 +253,6 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error {
 		return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd)
 	}
 
-	//expl := CalcGasLimit(parent, block)
-	//if expl.Cmp(block.Header().GasLimit) != 0 {
-
 	// block.gasLimit - parent.gasLimit <= parent.gasLimit / 1024
 	a := new(big.Int).Sub(block.GasLimit, parent.GasLimit)
 	b := new(big.Int).Div(parent.GasLimit, big.NewInt(1024))
@@ -263,8 +260,8 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error {
 		return fmt.Errorf("GasLimit check failed for block %v (%v > %v)", block.GasLimit, a, b)
 	}
 
-	if block.Time < parent.Time {
-		return ValidationError("Block timestamp not after prev block (%v - %v)", block.Time, parent.Time)
+	if block.Time <= parent.Time {
+		return ValidationError("Block timestamp not after or equal to prev block (%v - %v)", block.Time, parent.Time)
 	}
 
 	if int64(block.Time) > time.Now().Unix() {
diff --git a/core/chain_manager.go b/core/chain_manager.go
index f2382cf8d3130a34fca0ab1237ee89c652cfc4d3..d2a6560c1e87b47db3b9318fbfbd94b22ac6d401 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -31,15 +31,18 @@ type StateQuery interface {
 func CalcDifficulty(block, parent *types.Header) *big.Int {
 	diff := new(big.Int)
 
-	//adjust := new(big.Int).Rsh(parent.Difficulty(), 10)
-	//if block.Time() >= parent.Time()+8 {
-	adjust := new(big.Int).Div(parent.Difficulty, big.NewInt(2048))
+	min := big.NewInt(2048)
+	adjust := new(big.Int).Div(parent.Difficulty, min)
 	if (block.Time - parent.Time) < 8 {
 		diff.Add(parent.Difficulty, adjust)
 	} else {
 		diff.Sub(parent.Difficulty, adjust)
 	}
 
+	if diff.Cmp(GenesisDiff) < 0 {
+		return GenesisDiff
+	}
+
 	return diff
 }
 
@@ -378,9 +381,12 @@ func (bc *ChainManager) Stop() {
 }
 
 func (self *ChainManager) InsertChain(chain types.Blocks) error {
+	println("insert chain start")
 	self.tsmu.Lock()
 	defer self.tsmu.Unlock()
 
+	defer println("insert chain end")
+
 	for _, block := range chain {
 		// Call in to the block processor and check for errors. It's likely that if one block fails
 		// all others will fail too (unless a known block is returned).
@@ -422,14 +428,18 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
 		self.mu.Unlock()
 
 		if canonical {
-			jsonlogger.LogJson(&logger.EthChainNewHead{
-				BlockHash:     ethutil.Bytes2Hex(block.Hash()),
-				BlockNumber:   block.Number(),
-				ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()),
-				BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()),
-			})
+			/*
+				jsonlogger.LogJson(&logger.EthChainNewHead{
+					BlockHash:     ethutil.Bytes2Hex(block.Hash()),
+					BlockNumber:   block.Number(),
+					ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()),
+					BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()),
+				})
+			*/
 			self.setTransState(state.New(block.Root(), self.db))
 			self.eventMux.Post(ChainEvent{block, td})
+		} else {
+			//self.eventMux.
 		}
 
 		if split {
diff --git a/core/genesis.go b/core/genesis.go
index f675be53fb614a6d1d0098e5f561f4825f54044a..a3f5dfb38881baff129b0b721b71486e0cf4e475 100644
--- a/core/genesis.go
+++ b/core/genesis.go
@@ -22,8 +22,10 @@ var ZeroHash512 = make([]byte, 64)
 var EmptyShaList = crypto.Sha3(ethutil.Encode([]interface{}{}))
 var EmptyListRoot = crypto.Sha3(ethutil.Encode(""))
 
+var GenesisDiff = big.NewInt(131072)
+
 func GenesisBlock(db ethutil.Database) *types.Block {
-	genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, big.NewInt(2048), 42, "")
+	genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, GenesisDiff, 42, "")
 	genesis.Header().Number = ethutil.Big0
 	genesis.Header().GasLimit = big.NewInt(1000000)
 	genesis.Header().GasUsed = ethutil.Big0
@@ -53,7 +55,6 @@ func GenesisBlock(db ethutil.Database) *types.Block {
 	}
 	statedb.Sync()
 	genesis.Header().Root = statedb.Root()
-	fmt.Println(genesis)
 
 	return genesis
 }
diff --git a/core/types/block.go b/core/types/block.go
index 18a21e8c6c1e3095dff1196de57110349bf93779..31c7c2b876675ff841f5a1b74d9426247bb2c2e2 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -40,12 +40,12 @@ type Header struct {
 	Time uint64
 	// Extra data
 	Extra string
-	// Nonce
-	Nonce []byte
-	// Mix digest for quick checking to prevent DOS
-	MixDigest ethutil.Bytes
 	// SeedHash used for light client verification
 	SeedHash ethutil.Bytes
+	// Mix digest for quick checking to prevent DOS
+	MixDigest ethutil.Bytes
+	// Nonce
+	Nonce []byte
 }
 
 func (self *Header) rlpData(withNonce bool) []interface{} {
@@ -62,9 +62,11 @@ func (self *Header) rlpData(withNonce bool) []interface{} {
 		self.GasLimit,
 		self.GasUsed,
 		self.Time,
-		self.Extra}
+		self.Extra,
+		self.SeedHash,
+	}
 	if withNonce {
-		fields = append(fields, self.SeedHash, self.MixDigest, self.Nonce)
+		fields = append(fields, self.MixDigest, self.Nonce)
 	}
 
 	return fields
diff --git a/eth/protocol.go b/eth/protocol.go
index 663af43feff2109b745863a4e63c62df77708290..c887af12996ef85886425c05bd6f9367ec58cb31 100644
--- a/eth/protocol.go
+++ b/eth/protocol.go
@@ -250,7 +250,7 @@ func (self *ethProtocol) handle() error {
 			return self.protoError(ErrDecode, "msg %v: %v", msg, err)
 		}
 		hash := request.Block.Hash()
-		fmt.Println("received block: %x", hash)
+		fmt.Printf("received block: %x\n", hash)
 		_, chainHead, _ := self.chainManager.Status()
 
 		jsonlogger.LogJson(&logger.EthChainReceivedNewBlock{
diff --git a/ethutil/big.go b/ethutil/big.go
index 2ff1c72d811424723e1cc47e00fd0e652633322f..1716a7ce37d3de4b873e6aeb219911d9d1ceacaa 100644
--- a/ethutil/big.go
+++ b/ethutil/big.go
@@ -25,12 +25,13 @@ func Big(num string) *big.Int {
 // BigD
 //
 // Shortcut for new(big.Int).SetBytes(...)
-func BigD(data []byte) *big.Int {
+func Bytes2Big(data []byte) *big.Int {
 	n := new(big.Int)
 	n.SetBytes(data)
 
 	return n
 }
+func BigD(data []byte) *big.Int { return Bytes2Big(data) }
 
 func BitTest(num *big.Int, i int) bool {
 	return num.Bit(i) > 0
diff --git a/miner/worker.go b/miner/worker.go
index 38fc81ea5f5b03c5c5c5f349c235c4a911be01ab..29992b3275b68657a24124d4a39411701533c213 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -7,6 +7,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/ethereum/ethash"
 	"github.com/ethereum/go-ethereum/core"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/ethutil"
@@ -138,7 +139,7 @@ out:
 			}
 			break out
 		case <-timer.C:
-			minerlogger.Debugln("Hash rate:", self.HashRate(), "Khash")
+			minerlogger.Infoln("Hash rate:", self.HashRate(), "Khash")
 		}
 	}
 
@@ -164,7 +165,6 @@ func (self *worker) wait() {
 
 				if err := self.chain.InsertChain(types.Blocks{self.current.block}); err == nil {
 					self.mux.Post(core.NewMinedBlockEvent{self.current.block})
-					fmt.Println("GOOD BLOCK", self.current.block)
 				} else {
 					self.commitNewWork()
 				}
@@ -190,7 +190,11 @@ func (self *worker) commitNewWork() {
 	self.mu.Lock()
 	defer self.mu.Unlock()
 
-	self.current = env(self.chain.NewBlock(self.coinbase), self.eth)
+	block := self.chain.NewBlock(self.coinbase)
+	seednum := ethash.GetSeedBlockNum(block.NumberU64())
+	block.Header().SeedHash = self.chain.GetBlockByNumber(seednum).SeedHash()
+
+	self.current = env(block, self.eth)
 	parent := self.chain.GetBlock(self.current.block.ParentHash())
 	self.current.coinbase.SetGasPool(core.CalcGasLimit(parent, self.current.block))