diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go
index d5125e1c340f5444f770a1ebad076c46c92d33d9..8e821fc4ac1571180405c469b1559e8e57ffa8d9 100644
--- a/core/chain_makers_test.go
+++ b/core/chain_makers_test.go
@@ -60,7 +60,7 @@ func ExampleGenerateChain() {
 	evmux := &event.TypeMux{}
 	chainman, _ := NewChainManager(genesis, db, db, FakePow{}, evmux)
 	chainman.SetProcessor(NewBlockProcessor(db, db, FakePow{}, chainman, evmux))
-	if i, err := chainman.InsertChain(chain); err != nil {
+	if i, err := chainman.InsertChain(chain[1:]); err != nil {
 		fmt.Printf("insert error (block %d): %v\n", i, err)
 		return
 	}
diff --git a/core/chain_manager.go b/core/chain_manager.go
index e8f4d9b5bf2d978ddc7c2078a968b5c1ac526962..85c1e39d7a878c889e9aa1b7e5e0fac02dc0c4f3 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -22,6 +22,7 @@ import (
 	"github.com/ethereum/go-ethereum/pow"
 	"github.com/ethereum/go-ethereum/rlp"
 	"github.com/hashicorp/golang-lru"
+	"github.com/rcrowley/go-metrics"
 	"github.com/syndtr/goleveldb/leveldb"
 )
 
@@ -263,9 +264,7 @@ func (bc *ChainManager) setLastState() {
 func (bc *ChainManager) makeCache() {
 	bc.cache, _ = lru.New(blockCacheLimit)
 	// load in last `blockCacheLimit` - 1 blocks. Last block is the current.
-	ancestors := bc.GetAncestors(bc.currentBlock, blockCacheLimit-1)
-	ancestors = append(ancestors, bc.currentBlock)
-	for _, block := range ancestors {
+	for _, block := range bc.GetBlocksFromHash(bc.currentBlock.Hash(), blockCacheLimit) {
 		bc.cache.Add(block.Hash(), block)
 	}
 }
@@ -571,9 +570,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
 	defer close(nonceQuit)
 	defer self.flushQueuedBlocks()
 
-	defer func() {
-	}()
-
 	txcount := 0
 	for i, block := range chain {
 		if atomic.LoadInt32(&self.procInterrupt) == 1 {
@@ -683,7 +679,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
 			queue[i] = ChainSideEvent{block, logs}
 			queueEvent.sideCount++
 		}
-		// not in the canonical chain.
 		self.enqueueForWrite(block)
 		// Delete from future blocks
 		self.futureBlocks.Delete(block.Hash())