diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
index c44f4c93034320d726373daa89e1a500bcdf05a0..f77f7395b21357b9a8a35c093d1119ad4648ca50 100644
--- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c
+++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
@@ -22,6 +22,7 @@
     along with any DAP SDK based project.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include "dap_chain_net.h"
 #include "dap_common.h"
 #include "dap_strfuncs.h"
 #include "dap_enc_base58.h"
@@ -32,7 +33,6 @@
 #include "dap_chain_block_cache.h"
 #include "dap_chain_cs_blocks.h"
 #include "dap_chain_cs_block_poa.h"
-#include "dap_chain_net.h"
 #include "dap_chain_node_cli.h"
 #include "dap_chain_node_cli_cmd.h"
 #include "dap_chain_global_db.h"
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 7f162283f3d75df03394617c1a256a4d5bc943f2..f88a0e90499f55b5bc0e5629b333182a77ba6ed0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -263,6 +263,8 @@ static dap_global_db_obj_callback_notify_t s_srv_callback_notify = NULL;
  */
 int dap_chain_net_init()
 {
+    dap_stream_ch_chain_init();
+    dap_stream_ch_chain_net_init();
     dap_chain_node_client_init();
     dap_chain_node_cli_cmd_item_create ("net", s_cli_net, "Network commands",
         "net list [chains -n <chain net name>]"
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index c4f73594b6b4d1e1a59d7f398fb2c398b29eab27..99f969470903e36c9082db9d739f9b10dfd89f74 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -225,7 +225,7 @@ dap_chain_node_info_t* dap_chain_node_info_read( dap_chain_net_t * a_net,dap_cha
     return node_info;
 }*/
 
-bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t a_role, dap_chain_datum_t *a_datum)
+int dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t a_role, dap_chain_datum_t *a_datum)
 {
     bool l_need_process = false;
     for (uint16_t j = 0; j < a_chain->autoproc_datum_types_count; j++) {
@@ -235,24 +235,20 @@ bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t
         }
     }
     if (!l_need_process)
-        return false;
+        return -1;
     if (a_datum->header.type_id == DAP_CHAIN_DATUM_TX) {
         dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t *)a_datum->data;
         dap_chain_tx_in_t *l_tx_in = (dap_chain_tx_in_t *)dap_chain_datum_tx_item_get(l_tx, NULL, TX_ITEM_TYPE_IN, NULL);
         // Is not it a base transaction?
         if (l_tx_in && !dap_hash_fast_is_blank(&l_tx_in->header.tx_prev_hash)) {
             if (a_role.enums == NODE_ROLE_ROOT) {
-                return false;
+                return -1;
             }
         }
     }
-    if (a_chain->callback_add_datums(a_chain, &a_datum, 1) != 1) {
-        return false;
-    }
-    return true;
+    return (int)a_chain->callback_add_datums(a_chain, &a_datum, 1);
 }
 
-static bool s_mempool_auto = false;
 
 /**
  * @brief 
@@ -263,7 +259,7 @@ static bool s_mempool_auto = false;
 bool dap_chain_node_mempool_autoproc_init()
 {
     uint16_t l_net_count;
-    bool l_mempool_auto_default = false;
+    bool l_mempool_auto_default = false, l_ret = false;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
     for (uint16_t i = 0; i < l_net_count; i++) {
         dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net_list[i]);
@@ -276,10 +272,12 @@ bool dap_chain_node_mempool_autoproc_init()
                 l_mempool_auto_default = true;
                 break;
             default:
+                l_mempool_auto_default = false;
                 break;
         }
-        s_mempool_auto = dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", l_mempool_auto_default);
-        if (s_mempool_auto) {
+        l_net_list[i]->pub.mempool_autoproc = dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", l_mempool_auto_default);
+        if (l_net_list[i]->pub.mempool_autoproc) {
+            l_ret = true;
             dap_chain_t *l_chain;
             DL_FOREACH(l_net_list[i]->pub.chains, l_chain) {
                 if (!l_chain) {
@@ -291,12 +289,13 @@ bool dap_chain_node_mempool_autoproc_init()
                 dap_global_db_obj_t *l_objs = dap_chain_global_db_gr_load(l_gdb_group_mempool, &l_objs_size);
                 if (l_objs_size) {
                     for (size_t i = 0; i < l_objs_size; i++) {
-                        // Delete processed objects
-                        dap_chain_global_db_gr_del(dap_strdup(l_objs[i].key), l_gdb_group_mempool);
                         if (!l_objs[i].value_len)
                             continue;
                         dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
-                        dap_chain_node_mempool_process(l_chain, l_role, l_datum);
+                        if (dap_chain_node_mempool_process(l_chain, l_role, l_datum) >= 0) {
+                            // Delete processed objects
+                            dap_chain_global_db_gr_del(dap_strdup(l_objs[i].key), l_gdb_group_mempool);
+                        }
                     }
                     dap_chain_global_db_objs_delete(l_objs, l_objs_size);
                 }
@@ -305,7 +304,7 @@ bool dap_chain_node_mempool_autoproc_init()
         }
     }
     DAP_DELETE(l_net_list);
-    return s_mempool_auto;
+    return l_ret;
 }
 
 /**
@@ -313,17 +312,18 @@ bool dap_chain_node_mempool_autoproc_init()
  */
 void dap_chain_node_mempool_autoproc_deinit()
 {
-    s_mempool_auto = false;
 }
 
 void dap_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, const char *a_group,
                                              const char *a_key, const void *a_value, const size_t a_value_len)
 {
     UNUSED(a_value_len);
-    if (!a_arg || !a_value || !s_mempool_auto || a_op_code != 'a') {
+    if (!a_arg || !a_value || a_op_code != 'a') {
         return;
     }
     dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg;
+    if (!l_net->pub.mempool_autoproc)
+        return;
     dap_chain_t *l_chain;
     DL_FOREACH(l_net->pub.chains, l_chain) {
         if (!l_chain) {
@@ -333,7 +333,7 @@ void dap_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, c
         if (!strcmp(a_group, l_gdb_group_str)) {
             dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_value;
             dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net);
-            if (dap_chain_node_mempool_process(l_chain, l_role, l_datum)) {
+            if (dap_chain_node_mempool_process(l_chain, l_role, l_datum) >= 0) {
                 dap_chain_global_db_gr_del(dap_strdup(a_key), l_gdb_group_str);
             }
         }
diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h
index e7e40be7532b8207727a0bd53802a41410b9b4cc..7579cbdb979ee6e7608285806811289447d3944c 100644
--- a/modules/net/include/dap_chain_net.h
+++ b/modules/net/include/dap_chain_net.h
@@ -75,6 +75,7 @@ typedef struct dap_chain_net{
 
         // checks
         bool token_emission_signs_verify;
+        bool mempool_autoproc;
 
         dap_chain_t * chains; // double-linked list of chains
         dap_chain_t * default_chain;
diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h
index 216d6a4261c130a77397d44fc5eecd8cc75856af..6b6a810667a10eec933d95262cdc46dcc79d23a4 100644
--- a/modules/net/include/dap_chain_node.h
+++ b/modules/net/include/dap_chain_node.h
@@ -144,7 +144,7 @@ inline static char* dap_chain_node_addr_to_hash_str(dap_chain_node_addr_t *addre
     return a_key;
 }
 
-bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t a_role, dap_chain_datum_t *a_datum);
+int dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t a_role, dap_chain_datum_t *a_datum);
 bool dap_chain_node_mempool_autoproc_init();
 void dap_chain_node_mempool_autoproc_deinit();
 void dap_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, const char *a_group,
diff --git a/modules/type/blocks/dap_chain_block.c b/modules/type/blocks/dap_chain_block.c
index 4bc564e15eb26fe7d0e5691dfaf8902ae829b98a..cd45d3bf89248d2d0d6564934a813a668b4dfcd9 100644
--- a/modules/type/blocks/dap_chain_block.c
+++ b/modules/type/blocks/dap_chain_block.c
@@ -22,10 +22,10 @@
 */
 #include <stddef.h>
 #include "string.h"
+#include "dap_chain_net.h"
 #include "dap_common.h"
 #include "dap_config.h"
 #include "dap_hash.h"
-#include "dap_chain_net.h"
 #include "dap_chain_block.h"
 #include "dap_chain_block_cache.h"