diff --git a/CMakeLists.txt b/CMakeLists.txt
index 61a81f20584496b93acb229992865dedb54180b3..ffdd0d382392a60f3576763f64459b0fd9449488 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,7 +34,6 @@ add_subdirectory(dap-sdk)
 add_subdirectory(3rdparty/monero_crypto)
 add_subdirectory(3rdparty/cuttdb)
 add_subdirectory(modules/)
-add_subdirectory(modules_dynamic)
 
 add_library(${PROJECT_NAME} STATIC cellframe-sdk.c)
 
diff --git a/dap-sdk/net/server-udp/dap_udp_server.c b/dap-sdk/net/server-udp/dap_udp_server.c
index 280a6746f4d55a180dd4104bbfda4d79415e23a8..12c1c82120c35e0cb5981dc38c1eca371a45f555 100644
--- a/dap-sdk/net/server-udp/dap_udp_server.c
+++ b/dap-sdk/net/server-udp/dap_udp_server.c
@@ -345,8 +345,8 @@ void dap_udp_server_loop( dap_server_t *d_server )
 
   sb_payload_ready = false;
 
-  struct epoll_event  pev;
-  struct epoll_event  events[ 16 ];
+  struct epoll_event  pev = {0, {0}};
+  struct epoll_event  events[ 16 ] = {{0, {0}}};
 
   pev.events = EPOLLIN | EPOLLERR;
   pev.data.fd = d_server->socket_listener;
diff --git a/dap-sdk/net/stream/ch/dap_stream_ch.c b/dap-sdk/net/stream/ch/dap_stream_ch.c
index 6ce73a49d4b1c22712b4c572e66f7717d08d0c66..af9137dd4f713d6a5b9fcbd9484994d2979dff3e 100644
--- a/dap-sdk/net/stream/ch/dap_stream_ch.c
+++ b/dap-sdk/net/stream/ch/dap_stream_ch.c
@@ -103,6 +103,7 @@ dap_stream_ch_t* dap_stream_ch_new(dap_stream_t* a_stream, uint8_t id)
         pthread_rwlock_unlock(&a_stream->rwlock);
 
         struct dap_stream_ch_table_t *l_new_ch = DAP_NEW_Z(struct dap_stream_ch_table_t);
+        l_new_ch->ch = ret;
         pthread_mutex_lock(&s_ch_table_lock);
         HASH_ADD_PTR(s_ch_table, ch, l_new_ch);
         pthread_mutex_unlock(&s_ch_table_lock);
@@ -120,7 +121,7 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch)
     if(!a_ch)
         return false;
     pthread_mutex_lock(&s_ch_table_lock);
-    HASH_FIND_PTR(s_ch_table, a_ch, l_ret);
+    HASH_FIND_PTR(s_ch_table, &a_ch, l_ret);
     pthread_mutex_unlock(&s_ch_table_lock);
     return l_ret;
 }
@@ -132,8 +133,8 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch)
 void dap_stream_ch_delete(dap_stream_ch_t *a_ch)
 {
     pthread_mutex_lock(&s_ch_table_lock);
-    struct dap_stream_ch_table_t *l_ret;;
-    HASH_FIND_PTR(s_ch_table, a_ch, l_ret);
+    struct dap_stream_ch_table_t *l_ret;
+    HASH_FIND_PTR(s_ch_table, &a_ch, l_ret);
     HASH_DEL(s_ch_table, l_ret);
     pthread_mutex_unlock(&s_ch_table_lock);
 
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 49f99545f1a23285076ede10e04aa18cf5b63243..6d1abf4cf3a5c10ff884a89ed9cc27c5d21277ac 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -86,6 +86,11 @@ if (CELLFRAME_MODULES MATCHES "srv-stake")
     add_subdirectory(service/stake)
 endif()
 
+# Support for dynamic modules
+if (CELLFRAME_MODULES MATCHES "modules-dynamic")
+    add_subdirectory(modules_dynamic)
+endif()
+
 # Unit tests
 if( BUILD_TESTS)
     add_subdirectory(test)
diff --git a/modules_dynamic/CMakeLists.txt b/modules/modules_dynamic/CMakeLists.txt
similarity index 100%
rename from modules_dynamic/CMakeLists.txt
rename to modules/modules_dynamic/CMakeLists.txt
diff --git a/modules_dynamic/cdb/CMakeLists.txt b/modules/modules_dynamic/cdb/CMakeLists.txt
similarity index 100%
rename from modules_dynamic/cdb/CMakeLists.txt
rename to modules/modules_dynamic/cdb/CMakeLists.txt
diff --git a/modules_dynamic/cdb/dap_modules_dynamic_cdb.c b/modules/modules_dynamic/cdb/dap_modules_dynamic_cdb.c
similarity index 100%
rename from modules_dynamic/cdb/dap_modules_dynamic_cdb.c
rename to modules/modules_dynamic/cdb/dap_modules_dynamic_cdb.c
diff --git a/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h b/modules/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h
similarity index 100%
rename from modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h
rename to modules/modules_dynamic/cdb/include/dap_modules_dynamic_cdb.h
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 3ecd46abc29c7c3e132f1f95be4751f774164818..8ce67e110d60662c97414ff023879980889f7c8a 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -308,7 +308,10 @@ static void* thread_one_client_func(void *args)
                         list = dap_list_next(list);
                         DAP_DELETE(str_cmd_prev);
                     }
-                    log_it(L_INFO, "execute command=%s", str_cmd);
+                    if(l_cmd->overrides.log_cmd_call)
+                        l_cmd->overrides.log_cmd_call(str_cmd);
+                    else
+                        log_it(L_INFO, "execute command=%s", str_cmd);
                     // exec command
 
                     char **l_argv = dap_strsplit(str_cmd, ";", -1);
@@ -733,6 +736,12 @@ void dap_chain_node_cli_cmd_item_create(const char * a_name, cmdfunc_t *a_func,
     log_it(L_DEBUG,"Added command %s",l_cmd_item->name);
 }
 
+void dap_chain_node_cli_cmd_item_apply_overrides(const char * a_name, const dap_chain_node_cmd_item_func_overrides_t * a_overrides){
+    dap_chain_node_cmd_item_t *l_cmd_item = dap_chain_node_cli_cmd_find(a_name);
+    if(l_cmd_item)
+        l_cmd_item->overrides = *a_overrides;
+}
+
 /**
  * @brief dap_chain_node_cli_command_get_first
  * @return
diff --git a/modules/net/include/dap_chain_node_cli.h b/modules/net/include/dap_chain_node_cli.h
index e9df748e7ebb56c7c81a2436e018ef33c4c14a18..e9f9e81285841034f5426920590532760acabcd3 100644
--- a/modules/net/include/dap_chain_node_cli.h
+++ b/modules/net/include/dap_chain_node_cli.h
@@ -40,12 +40,20 @@ typedef int SOCKET;
 
 typedef int cmdfunc_t(int argc, char ** argv, void *arg_func, char **str_reply);
 
+typedef void cmd_item_func_override_log_cmd_call(const char*);
+
+typedef struct dap_chain_node_cmd_item_func_overrides{
+    /* use it if you want to prevent logging of some sensetive data */
+    cmd_item_func_override_log_cmd_call * log_cmd_call;
+} dap_chain_node_cmd_item_func_overrides_t;
+
 typedef struct dap_chain_node_cmd_item{
     char name[32]; /* User printable name of the function. */
     cmdfunc_t *func; /* Function to call to do the job. */
     void *arg_func; /* additional argument of function*/
     char *doc; /* Documentation for this function.  */
     char *doc_ex; /* Full documentation for this function.  */
+    dap_chain_node_cmd_item_func_overrides_t overrides; /* Used to change default behaviour */
     UT_hash_handle hh;
 } dap_chain_node_cmd_item_t;
 
@@ -60,6 +68,7 @@ long s_recv(SOCKET sock, unsigned char *buf, size_t bufsize, int timeout);
 dap_chain_node_cmd_item_t* dap_chain_node_cli_cmd_get_first();
 dap_chain_node_cmd_item_t* dap_chain_node_cli_cmd_find(const char *a_name);
 void dap_chain_node_cli_cmd_item_create(const char * a_name, cmdfunc_t *a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex);
+void dap_chain_node_cli_cmd_item_apply_overrides(const char * a_name, const dap_chain_node_cmd_item_func_overrides_t * a_overrides);
 
 void dap_chain_node_cli_set_reply_text(char **str_reply, const char *str, ...);
 
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 10db028050013b28ac642d57ce77e109cad90cdd..2f92c769503adf7510ff220ecc9f3a3a57b4a47e 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -1139,7 +1139,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                             HASH_DELETE(hh2, sf_socks, sf_sock);
                             HASH_DELETE(hh_sock, sf_socks_client, sf_sock);
 
-                            struct epoll_event ev;
+                            struct epoll_event ev = {0, {0}};
                             ev.data.fd = sf_sock->sock;
                             ev.events = EPOLLIN;
                             if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) {
@@ -1170,7 +1170,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                         pthread_mutex_lock(&s_sf_socks_mutex);
                         HASH_DELETE(hh2, sf_socks, sf_sock);
                         HASH_DELETE(hh_sock, sf_socks_client, sf_sock);
-                        struct epoll_event ev;
+                        struct epoll_event ev  = {0, {0}};;
                         ev.data.fd = sf_sock->sock;
                         ev.events = EPOLLIN;
                         if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) {
@@ -1244,7 +1244,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                                 pthread_mutex_unlock(&s_sf_socks_mutex);
                                 pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex));
 
-                                struct epoll_event ev;
+                                struct epoll_event ev = {0, {0}};
                                 ev.data.fd = s;
                                 ev.events = EPOLLIN | EPOLLERR;
 
@@ -1380,7 +1380,7 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
  */
 void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock)
 {
-    struct epoll_event ev;
+    struct epoll_event ev = {0, {0}};
     ev.data.fd = sf_sock->sock;
     ev.events = EPOLLIN | EPOLLERR;
     if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) == -1) {
@@ -1409,7 +1409,7 @@ void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock)
 void * srv_ch_sf_thread(void * a_arg)
 {
     UNUSED(a_arg);
-    struct epoll_event ev, events[SF_MAX_EVENTS] = { 0 };
+    struct epoll_event ev = {0, {0}}, events[SF_MAX_EVENTS] = { {0, {0}} };
     //pthread_mutex_lock(&sf_socks_mutex);
     sf_socks_epoll_fd = epoll_create(SF_MAX_EVENTS);
     sigset_t sf_sigmask;
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index 9109e9320c28d6a7b677901982c23649be93ca4c..ef7b2d77df63ed27bc32567ec122c3f7730ca794 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -492,7 +492,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t*
                         HASH_DELETE(hh2, sf_socks, sf_sock);
                         HASH_DELETE(hh_sock, sf_socks_client, sf_sock);
 
-                        struct epoll_event ev;
+                        struct epoll_event ev = {0, {0}};
                         ev.data.fd = sf_sock->sock;
                         ev.events = EPOLLIN;
                         if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) {
@@ -525,7 +525,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t*
                     HASH_DELETE(hh2, sf_socks, sf_sock);
                     HASH_DELETE(hh_sock, sf_socks_client, sf_sock);
 
-                    struct epoll_event ev;
+                    struct epoll_event ev = {0, {0}};
                     ev.data.fd = sf_sock->sock;
                     ev.events = EPOLLIN;
                     if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) {
@@ -612,7 +612,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t*
                             pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex));
                             pthread_mutex_unlock(&sf_socks_mutex);
 
-                            struct epoll_event ev;
+                            struct epoll_event ev = { 0, {0} };
                             ev.data.fd = s;
                             ev.events = EPOLLIN | EPOLLERR;