diff --git a/dap_chain_mempool.c b/dap_chain_mempool.c
index c2c73d9bf3e855276469a3d75524cc561218dcf3..2b5d19009b2884d61cfe273660ebbdd900fd6163 100755
--- a/dap_chain_mempool.c
+++ b/dap_chain_mempool.c
@@ -497,11 +497,11 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
 
 
 /**
- * Make transfer transaction & insert to cache
+ * Make transfer transaction
  *
- * return 0 Ok, -2 not enough funds to transfer, -1 other Error
+ * return dap_chain_datum_t, NULL if Error
  */
-dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
+static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
@@ -617,7 +617,8 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
     size_t l_tx_size = dap_chain_datum_tx_get_size( l_tx );
     dap_chain_datum_t *l_datum = dap_chain_datum_create( DAP_CHAIN_DATUM_TX, l_tx, l_tx_size );
 
-    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
+    return l_datum;
+    /*dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
     dap_hash_fast( l_tx, l_tx_size, l_key_hash );
     DAP_DELETE( l_tx );
 
@@ -630,6 +631,82 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
     DAP_DELETE(l_gdb_group);
     DAP_DELETE(l_key_str);
 
+    return l_key_hash;*/
+}
+
+/**
+ * Make transfer transaction & insert to cache
+ *
+ * return 0 Ok, -2 not enough funds to transfer, -1 other Error
+ */
+dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net,
+        dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
+        const dap_chain_addr_t* a_addr_from,
+        const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
+        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size)
+{
+
+    dap_chain_t *l_chain = dap_chain_net_get_chain_by_chain_type(a_net, CHAIN_TYPE_TX);
+    if(!l_chain)
+            return NULL;
+    // Make transfer transaction
+    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net,a_key_from, a_key_cond, a_addr_from,
+            a_token_ticker,a_value,a_value_per_unit_max, a_unit,
+            a_srv_uid, a_value_fee, a_cond, a_cond_size);
+
+    if(!l_datum)
+        return NULL;
+    size_t l_datums_number = l_chain->callback_datums_pool_proc(l_chain, &l_datum, 1);
+    if(!l_datums_number)
+            return NULL;
+
+    dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data);
+    size_t l_tx_size = l_datum->header.data_size;
+
+    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
+    dap_hash_fast( l_tx, l_tx_size, l_key_hash );
+    //DAP_DELETE( l_tx );
+
+    return l_key_hash;
+}
+
+/**
+ * Make transfer transaction & insert to cache
+ *
+ * return 0 Ok, -2 not enough funds to transfer, -1 other Error
+ */
+dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
+        dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
+        const dap_chain_addr_t* a_addr_from,
+        const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
+        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size)
+{
+    // Make transfer transaction
+    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net,a_key_from, a_key_cond, a_addr_from,
+            a_token_ticker,a_value,a_value_per_unit_max, a_unit,
+            a_srv_uid, a_value_fee, a_cond, a_cond_size);
+
+    if(!l_datum)
+        return NULL;
+
+    dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data);
+    size_t l_tx_size = l_datum->header.data_size;//dap_chain_datum_tx_get_size( l_tx );
+
+    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
+    dap_hash_fast( l_tx, l_tx_size, l_key_hash );
+    //DAP_DELETE( l_tx );
+
+    char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash );
+    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type( a_net ,CHAIN_TYPE_TX);
+    if( dap_chain_global_db_gr_set( dap_strdup(l_key_str), (uint8_t *) l_datum, dap_chain_datum_size(l_datum)
+                                   , l_gdb_group ) ) {
+        log_it(L_NOTICE, "Transaction %s placed in mempool", l_key_str);
+    }
+    DAP_DELETE(l_gdb_group);
+    DAP_DELETE(l_key_str);
+
     return l_key_hash;
 }
 
diff --git a/dap_chain_mempool.h b/dap_chain_mempool.h
index f1c459b82b893b64ff781d7c68ff2e5f6f67078d..f71785cc3249010b5df26a0dcdc64661b8e3fe97 100755
--- a/dap_chain_mempool.h
+++ b/dap_chain_mempool.h
@@ -50,6 +50,12 @@ int dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from
         uint64_t a_value, uint64_t a_value_fee);
 
 // Make transfer transaction & insert to cache
+dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net,
+        dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
+        const dap_chain_addr_t* a_addr_from,
+        const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
+        uint64_t a_value,uint64_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
+        dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value_fee, const void *a_cond, size_t a_cond_size);
 dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_enc_key_t *a_key_cond,
         const dap_chain_addr_t* a_addr_from,