diff --git a/core/block_manager.go b/core/block_manager.go
index b648166ec2120ae3944aacfea53708850afc53a9..909f26a1b569e4f2915d7fa620fe4987077d32c4 100644
--- a/core/block_manager.go
+++ b/core/block_manager.go
@@ -231,7 +231,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
 		return
 	}
 
-	_, err = sm.TransitionState(state, parent, block)
+	receipts, err := sm.TransitionState(state, parent, block)
 	if err != nil {
 		return
 	}
@@ -242,26 +242,22 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
 		return
 	}
 
-	/*
-		receiptSha := types.DeriveSha(receipts)
-		if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
-			err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
-			return
-		}
-	*/
+	receiptSha := types.DeriveSha(receipts)
+	if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
+		err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
+		return
+	}
 
 	if err = sm.AccumelateRewards(state, block, parent); err != nil {
 		return
 	}
 
-	/*
-		//block.receipts = receipts // although this isn't necessary it be in the future
-		rbloom := types.CreateBloom(receipts)
-		if bytes.Compare(rbloom, block.LogsBloom) != 0 {
-			err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
-			return
-		}
-	*/
+	//block.receipts = receipts // although this isn't necessary it be in the future
+	rbloom := types.CreateBloom(receipts)
+	if bytes.Compare(rbloom, block.LogsBloom) != 0 {
+		err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
+		return
+	}
 
 	state.Update(ethutil.Big0)
 
diff --git a/core/transaction_pool.go b/core/transaction_pool.go
index c48d3d8a47781fb26910f4acb67efd91c05adf71..1d1f478e4f4fc5eac81ec2a6782808ddad8946df 100644
--- a/core/transaction_pool.go
+++ b/core/transaction_pool.go
@@ -115,10 +115,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
 		return fmt.Errorf("tx.v != (28 || 27)")
 	}
 
-	if tx.GasPrice.Cmp(MinGasPrice) < 0 {
-		return fmt.Errorf("Gas price to low. Require %v > Got %v", MinGasPrice, tx.GasPrice)
-	}
-
 	// Get the sender
 	sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender())
 
@@ -169,6 +165,10 @@ func (self *TxPool) Add(tx *types.Transaction) error {
 	return nil
 }
 
+func (self *TxPool) Size() int {
+	return self.pool.Len()
+}
+
 func (pool *TxPool) CurrentTransactions() []*types.Transaction {
 	pool.mutex.Lock()
 	defer pool.mutex.Unlock()
diff --git a/miner/miner.go b/miner/miner.go
index f9b8a9c227e0f45889e9a688c4f67ea03e6052ea..c350eb1a824df9fc017c0c55b66b65828275fac8 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -228,23 +228,33 @@ func (self *Miner) mine() {
 
 func (self *Miner) finiliseTxs() types.Transactions {
 	// Sort the transactions by nonce in case of odd network propagation
-	var txs types.Transactions
+	actualSize := len(self.localTxs) // See copy below
+	txs := make(types.Transactions, actualSize+self.eth.TxPool().Size())
 
 	state := self.eth.BlockManager().TransState()
 	// XXX This has to change. Coinbase is, for new, same as key.
 	key := self.eth.KeyManager()
-	for _, ltx := range self.localTxs {
+	for i, ltx := range self.localTxs {
 		tx := types.NewTransactionMessage(ltx.To, ethutil.Big(ltx.Value), ethutil.Big(ltx.Gas), ethutil.Big(ltx.GasPrice), ltx.Data)
 		tx.Nonce = state.GetNonce(self.Coinbase)
 		state.SetNonce(self.Coinbase, tx.Nonce+1)
 
 		tx.Sign(key.PrivateKey())
 
-		txs = append(txs, tx)
+		txs[i] = tx
 	}
 
-	txs = append(txs, self.eth.TxPool().CurrentTransactions()...)
-	sort.Sort(types.TxByNonce{txs})
+	// Faster than append
+	for _, tx := range self.eth.TxPool().CurrentTransactions() {
+		if tx.GasPrice.Cmp(self.MinAcceptedGasPrice) >= 0 {
+			txs[actualSize] = tx
+			actualSize++
+		}
+	}
+
+	newTransactions := make(types.Transactions, actualSize)
+	copy(newTransactions, txs[:actualSize])
+	sort.Sort(types.TxByNonce{newTransactions})
 
-	return txs
+	return newTransactions
 }