diff --git a/core/chain_manager.go b/core/chain_manager.go
index 4bbecd1098d4a11716af4d8bd6bb18bd185d98e1..e6268c01e0d2796cbb78cbb7318b2770fb08ee27 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -101,7 +101,10 @@ func NewChainManager(mux *event.TypeMux) *ChainManager {
 }
 
 func (self *ChainManager) Status() (td *big.Int, currentBlock []byte, genesisBlock []byte) {
-	return self.TD, self.CurrentBlock.Hash(), self.Genesis().Hash()
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	return self.td, self.currentBlock.Hash(), self.Genesis().Hash()
 }
 
 func (self *ChainManager) SetProcessor(proc types.BlockProcessor) {
diff --git a/core/transaction_pool.go b/core/transaction_pool.go
index 86286f23d0d0270b5b191b488f2776f9814f7253..2bbda7d90818937ddc80f9ac4a2cb8e382bcf73f 100644
--- a/core/transaction_pool.go
+++ b/core/transaction_pool.go
@@ -72,19 +72,17 @@ type TxPool struct {
 
 	subscribers []chan TxMsg
 
-	broadcaster  types.Broadcaster
 	chainManager *ChainManager
 	eventMux     *event.TypeMux
 }
 
-func NewTxPool(chainManager *ChainManager, broadcaster types.Broadcaster, eventMux *event.TypeMux) *TxPool {
+func NewTxPool(chainManager *ChainManager, eventMux *event.TypeMux) *TxPool {
 	return &TxPool{
 		pool:         list.New(),
 		queueChan:    make(chan *types.Transaction, txPoolQueueSize),
 		quit:         make(chan bool),
 		chainManager: chainManager,
 		eventMux:     eventMux,
-		broadcaster:  broadcaster,
 	}
 }
 
@@ -96,7 +94,7 @@ func (pool *TxPool) addTransaction(tx *types.Transaction) {
 	pool.pool.PushBack(tx)
 
 	// Broadcast the transaction to the rest of the peers
-	pool.Ethereum.EventMux().Post(TxPreEvent{tx})
+	pool.eventMux.Post(TxPreEvent{tx})
 }
 
 func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
diff --git a/core/types/common.go b/core/types/common.go
index 89cb5f498699c7cc717a3f976d9af71f7eebc867..ba88b77e1aebfa6eb813cedd3689ee93682b8d41 100644
--- a/core/types/common.go
+++ b/core/types/common.go
@@ -4,13 +4,8 @@ import (
 	"math/big"
 
 	"github.com/ethereum/go-ethereum/state"
-	"github.com/ethereum/go-ethereum/wire"
 )
 
 type BlockProcessor interface {
 	Process(*Block) (*big.Int, state.Messages, error)
 }
-
-type Broadcaster interface {
-	Broadcast(wire.MsgType, []interface{})
-}
diff --git a/eth/backend.go b/eth/backend.go
index ef82a5bfc2efe581eb41594355f1d4574196a3e0..0aad6a51417f0758a54dc93fc5a830d0fb42e119 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -69,9 +69,9 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke
 		eventMux:       &event.TypeMux{},
 	}
 
-	eth.txPool = core.NewTxPool(eth)
 	eth.chainManager = core.NewChainManager(eth.EventMux())
-	eth.blockManager = core.NewBlockManager(eth)
+	eth.txPool = core.NewTxPool(eth.chainManager, eth.EventMux())
+	eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux())
 	eth.chainManager.SetProcessor(eth.blockManager)
 	eth.whisper = whisper.New()