diff --git a/core/chain_manager.go b/core/chain_manager.go
index 3e030838a97ea08e71ad95fe781593c4ee831ff7..f0d3fd4cf7b6b2812c7fa2e58490adb90fc6517c 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -8,11 +8,11 @@ import (
 	"sync"
 
 	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/state"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/event"
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/rlp"
-	"github.com/ethereum/go-ethereum/core/state"
 )
 
 var (
@@ -523,7 +523,7 @@ out:
 					case ChainEvent:
 						// We need some control over the mining operation. Acquiring locks and waiting for the miner to create new block takes too long
 						// and in most cases isn't even necessary.
-						if i == ev.canonicalCount {
+						if i+1 == ev.canonicalCount {
 							self.eventMux.Post(ChainHeadEvent{event.Block})
 						}
 					case ChainSplitEvent:
diff --git a/eth/backend.go b/eth/backend.go
index 446f0653101ea1701771c747b779be9afb1170f3..3f7f7c2cba704a11c0491c2f89454ef43efad40e 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -355,7 +355,7 @@ func (s *Ethereum) Start() error {
 	go s.txBroadcastLoop()
 
 	// broadcast mined blocks
-	s.blockSub = s.eventMux.Subscribe(core.NewMinedBlockEvent{})
+	s.blockSub = s.eventMux.Subscribe(core.ChainHeadEvent{})
 	go s.blockBroadcastLoop()
 
 	servlogger.Infoln("Server started")
@@ -421,7 +421,7 @@ func (self *Ethereum) blockBroadcastLoop() {
 	// automatically stops if unsubscribe
 	for obj := range self.blockSub.Chan() {
 		switch ev := obj.(type) {
-		case core.NewMinedBlockEvent:
+		case core.ChainHeadEvent:
 			self.net.Broadcast("eth", NewBlockMsg, []interface{}{ev.Block, ev.Block.Td})
 		}
 	}