diff --git a/core/transaction_pool.go b/core/transaction_pool.go
index 92a2462c6767792491fa1ea446facc1013b3a9de..bc6e70c7ad780a2d6b57326a70745110139690dd 100644
--- a/core/transaction_pool.go
+++ b/core/transaction_pool.go
@@ -125,11 +125,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
 	return nil
 }
 
-func (self *TxPool) addTx(tx *types.Transaction) {
-	from, _ := tx.From()
-	self.queue[from] = append(self.queue[from], tx)
-}
-
 func (self *TxPool) add(tx *types.Transaction) error {
 	hash := tx.Hash()
 
@@ -147,7 +142,7 @@ func (self *TxPool) add(tx *types.Transaction) error {
 		return err
 	}
 
-	self.addTx(tx)
+	self.queueTx(tx)
 
 	var toname string
 	if to := tx.To(); to != nil {
@@ -226,6 +221,19 @@ func (pool *TxPool) Stop() {
 	glog.V(logger.Info).Infoln("TX Pool stopped")
 }
 
+func (self *TxPool) queueTx(tx *types.Transaction) {
+	from, _ := tx.From()
+	self.queue[from] = append(self.queue[from], tx)
+}
+
+func (pool *TxPool) addTx(tx *types.Transaction) {
+	if _, ok := pool.txs[tx.Hash()]; !ok {
+		pool.txs[tx.Hash()] = tx
+		// Notify the subscribers
+		pool.eventMux.Post(TxPreEvent{tx})
+	}
+}
+
 // check queue will attempt to insert
 func (pool *TxPool) checkQueue() {
 	pool.mu.Lock()
@@ -257,9 +265,7 @@ func (pool *TxPool) checkQueue() {
 			}
 			enonce++
 
-			pool.txs[tx.Hash()] = tx
-			// Notify the subscribers
-			go pool.eventMux.Post(TxPreEvent{tx})
+			pool.addTx(tx)
 		}
 		//pool.queue[address] = txs[i:]
 		// delete the entire queue entry if it's empty. There's no need to keep it
diff --git a/core/transaction_pool_test.go b/core/transaction_pool_test.go
index 5a5cd866f53878beaea3c849244a3bbec0c1fbb9..0e049139e550ce3bde6afe676e88bad16ba4a46f 100644
--- a/core/transaction_pool_test.go
+++ b/core/transaction_pool_test.go
@@ -67,7 +67,7 @@ func TestTransactionQueue(t *testing.T) {
 	tx.SignECDSA(key)
 	from, _ := tx.From()
 	pool.currentState().AddBalance(from, big.NewInt(1))
-	pool.addTx(tx)
+	pool.queueTx(tx)
 
 	pool.checkQueue()
 	if len(pool.txs) != 1 {
@@ -79,7 +79,7 @@ func TestTransactionQueue(t *testing.T) {
 	from, _ = tx.From()
 	pool.currentState().SetNonce(from, 10)
 	tx.SetNonce(1)
-	pool.addTx(tx)
+	pool.queueTx(tx)
 	pool.checkQueue()
 	if _, ok := pool.txs[tx.Hash()]; ok {
 		t.Error("expected transaction to be in tx pool")
@@ -96,9 +96,9 @@ func TestTransactionQueue(t *testing.T) {
 	tx1.SignECDSA(key)
 	tx2.SignECDSA(key)
 	tx3.SignECDSA(key)
-	pool.addTx(tx1)
-	pool.addTx(tx2)
-	pool.addTx(tx3)
+	pool.queueTx(tx1)
+	pool.queueTx(tx2)
+	pool.queueTx(tx3)
 	from, _ = tx1.From()
 	pool.checkQueue()
 
@@ -106,7 +106,7 @@ func TestTransactionQueue(t *testing.T) {
 		t.Error("expected tx pool to be 1 =")
 	}
 
-	if len(pool.queue[from]) != 2 {
+	if len(pool.queue[from]) != 3 {
 		t.Error("expected transaction queue to be empty. is", len(pool.queue[from]))
 	}
 }