diff --git a/block_manager.go b/block_manager.go
index 1a73a45f204625f86921a168be54f8ee8e92e2db..0c741002205b231b8c26e8c118ead18226c9c028 100644
--- a/block_manager.go
+++ b/block_manager.go
@@ -24,11 +24,20 @@ func NewBlockChain() *BlockChain {
 	bc.TD = new(big.Int)
 	bc.TD.SetBytes(ethutil.Config.Db.LastKnownTD())
 
+
+	// TODO get last block from the database
+	//bc.LastBlock = bc.genesisBlock
+
 	return bc
 }
 
 func (bc *BlockChain) HasBlock(hash string) bool {
-	return bc.LastBlock.State().Get(hash) != ""
+	data, _ := ethutil.Config.Db.Get([]byte(hash))
+	return len(data) != 0
+}
+
+func (bc *BlockChain) GenesisBlock() *ethutil.Block {
+	return bc.genesisBlock
 }
 
 type BlockManager struct {
@@ -107,6 +116,10 @@ func (bm *BlockManager) CalculateTD(block *ethutil.Block) bool {
 		// Set the new total difficulty back to the block chain
 		bm.bc.TD = td
 
+		if Debug {
+			log.Println("TD(block) =", td)
+		}
+
 		return true
 	}
 
@@ -122,7 +135,8 @@ func (bm *BlockManager) ValidateBlock(block *ethutil.Block) error {
 
 	// Check if we have the parent hash, if it isn't known we discard it
 	// Reasons might be catching up or simply an invalid block
-	if !bm.bc.HasBlock(block.PrevHash) {
+	if bm.bc.LastBlock != nil && block.PrevHash == "" &&
+	   !bm.bc.HasBlock(block.PrevHash) {
 		return errors.New("Block's parent unknown")
 	}
 
@@ -139,10 +153,13 @@ func (bm *BlockManager) ValidateBlock(block *ethutil.Block) error {
 	}
 
 	// Verify the nonce of the block. Return an error if it's not valid
-	if !DaggerVerify(ethutil.BigD(block.Hash()), block.Difficulty, block.Nonce) {
+	if bm.bc.LastBlock != nil && block.PrevHash == "" &&
+	   !DaggerVerify(ethutil.BigD(block.Hash()), block.Difficulty, block.Nonce) {
 		return errors.New("Block's nonce is invalid")
 	}
 
+	log.Println("Block validation PASSED")
+
 	return nil
 }