diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index 1a9e9f601083c9b7959febb2ea26b7fc28cba7b3..a57377bee63f4ab8ed55526fbdd51208972a1d31 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -105,8 +105,11 @@ func (sm *StateManager) ApplyTransactions(state *State, block *Block, txs []*Tra
 	for _, tx := range txs {
 		usedGas, err := sm.ApplyTransaction(state, block, tx)
 		if err != nil {
+			if IsNonceErr(err) {
+				continue
+			}
+
 			ethutil.Config.Log.Infoln(err)
-			//continue
 		}
 
 		accumelative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, usedGas))
@@ -116,7 +119,7 @@ func (sm *StateManager) ApplyTransactions(state *State, block *Block, txs []*Tra
 		validTxs = append(validTxs, tx)
 	}
 
-	return receipts, txs
+	return receipts, validTxs
 }
 
 func (sm *StateManager) ApplyTransaction(state *State, block *Block, tx *Transaction) (totalGasUsed *big.Int, err error) {
diff --git a/ethchain/transaction_pool.go b/ethchain/transaction_pool.go
index 7198026a8e307ba34a6418e6855adb346e192d1c..ba2ffcef559c9fb8d6d1f148bd9f51febe523c4c 100644
--- a/ethchain/transaction_pool.go
+++ b/ethchain/transaction_pool.go
@@ -106,7 +106,7 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, state *State, toContract
 	sender := state.GetAccount(tx.Sender())
 
 	if sender.Nonce != tx.Nonce {
-		err = fmt.Errorf("[TXPL] Invalid account nonce, state nonce is %d transaction nonce is %d instead", sender.Nonce, tx.Nonce)
+		err = NonceError(tx.Nonce, sender.Nonce)
 		return
 	}
 
@@ -235,7 +235,7 @@ func (pool *TxPool) RemoveInvalid(state *State) {
 		tx := e.Value.(*Transaction)
 		sender := state.GetAccount(tx.Sender())
 		err := pool.ValidateTransaction(tx)
-		if err != nil || sender.Nonce != tx.Nonce {
+		if err != nil || sender.Nonce >= tx.Nonce {
 			pool.pool.Remove(e)
 		}
 	}