diff --git a/ethpipe/js_pipe.go b/ethpipe/js_pipe.go
index 7ee183c849ec9ffce6a9246475425be7e28614d2..32212b26a6a46d2115064ecb5dd7a4ed0488f813 100644
--- a/ethpipe/js_pipe.go
+++ b/ethpipe/js_pipe.go
@@ -223,6 +223,12 @@ func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr
 	return NewJSReciept(contractCreation, tx.CreationAddress(), tx.Hash(), keyPair.Address()), nil
 }
 
+func (self *JSPipe) PushTx(txStr string) (*JSReceipt, error) {
+    tx := ethchain.NewTransactionFromBytes(ethutil.Hex2Bytes(txStr))
+    self.obj.TxPool().QueueTransaction(tx)
+    return NewJSReciept(tx.CreatesContract(), tx.CreationAddress(), tx.Hash(), tx.Sender()), nil
+}
+
 func (self *JSPipe) CompileMutan(code string) string {
 	data, err := self.Pipe.CompileMutan(code)
 	if err != nil {
diff --git a/ethpipe/pipe.go b/ethpipe/pipe.go
index 800a71139aaaf2d19ed6140024c21d6e1a3194c4..b7d3be0415bf60e738eadd97e7924c46cacd4a40 100644
--- a/ethpipe/pipe.go
+++ b/ethpipe/pipe.go
@@ -149,6 +149,15 @@ func (self *Pipe) Transact(key *ethcrypto.KeyPair, rec []byte, value, gas, price
 	return tx.Hash(), nil
 }
 
+func (self *Pipe) PushTx(tx *ethchain.Transaction) ([]byte, error) {
+    self.obj.TxPool().QueueTransaction(tx)
+    if tx.Recipient == nil {
+        logger.Infof("Contract addr %x", tx.CreationAddress())
+        return tx.CreationAddress(), nil
+    }
+    return tx.Hash(), nil
+}
+
 func (self *Pipe) CompileMutan(code string) ([]byte, error) {
 	data, err := ethutil.Compile(code, false)
 	if err != nil {
diff --git a/ethrpc/packages.go b/ethrpc/packages.go
index f2e57fa49d5881f3dd84da5b126793f0f615e617..087167a422be54317ae83e78b589fd4d753cb4a4 100644
--- a/ethrpc/packages.go
+++ b/ethrpc/packages.go
@@ -145,6 +145,27 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *string) error {
 	return nil
 }
 
+type PushTxArgs struct {
+    Tx string
+}
+
+func (a *PushTxArgs) requirementsPushTx() error {
+    if a.Tx == "" {
+        return NewErrorResponse("PushTx requires a 'tx' as argument")
+    }
+    return nil
+}
+
+func (p *EthereumApi) PushTx(args *PushTxArgs, reply *string) error {
+    err := args.requirementsPushTx()
+    if err != nil {
+        return err
+    }
+    result, _ := p.pipe.PushTx(args.Tx)
+    *reply = NewSuccessRes(result)
+    return nil
+}
+
 func (p *EthereumApi) GetKey(args interface{}, reply *string) error {
 	*reply = NewSuccessRes(p.pipe.Key())
 	return nil