diff --git a/dap_chain_net.c b/dap_chain_net.c
index 53e70c755043b45ff65c1b0113620a465490c49b..491643b2e899d93731f316c978257621e92e5817 100644
--- a/dap_chain_net.c
+++ b/dap_chain_net.c
@@ -291,7 +291,7 @@ lb_proc_state:
                     dap_chain_node_addr_t l_address;
                     l_address.uint64 = dap_chain_net_get_cur_addr(l_net) ?
                                          dap_chain_net_get_cur_addr(l_net)->uint64 :
-                                         dap_db_get_cur_node_addr();
+                                         dap_db_get_cur_node_addr(l_net->pub.name);
 
                     // get current node info
                     dap_chain_node_info_t *l_cur_node_info = dap_chain_node_info_read(l_net, &l_address);
@@ -500,7 +500,7 @@ lb_proc_state:
 
                 l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ?
                                                   dap_chain_net_get_cur_addr(l_net)->uint64 :
-                                                  dap_db_get_cur_node_addr();
+                                                  dap_db_get_cur_node_addr(l_net->pub.name);
 
                 dap_chain_id_t l_chain_id_null = { { 0 } };
                 dap_chain_cell_id_t l_chain_cell_id_null = { { 0 } };
@@ -979,7 +979,7 @@ static int s_cli_net( int argc, char **argv, char **a_str_reply)
             if ( strcmp(l_get_str,"status") == 0 ) {
                 // get current node address
                 dap_chain_node_addr_t l_cur_node_addr = { 0 };
-                l_cur_node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : dap_db_get_cur_node_addr();
+                l_cur_node_addr.uint64 = dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 : dap_db_get_cur_node_addr(l_net->pub.name);
                 if(!l_cur_node_addr.uint64) {
                     dap_chain_node_cli_set_reply_text(a_str_reply,
                             "Network \"%s\" has state %s (target state %s), active links %u from %u, cur node address not defined",
@@ -1258,7 +1258,7 @@ int s_net_load(const char * a_net_name)
             if ( l_node_addr ) {
                 char *l_addr_hash_str = dap_chain_node_addr_to_hash_str(l_node_addr);
                 // save current node address
-                dap_db_set_cur_node_addr(l_node_addr->uint64);
+                dap_db_set_cur_node_addr(l_node_addr->uint64, l_net->pub.name);
                 if(!l_addr_hash_str){
                     log_it(L_ERROR,"Can't get hash string for node address!");
                 } else {
diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index 98208732c697f76631423cc65f1a8c0cd2c7a672..d62efcd89ba9037e77eb8830cfc9d56bd1f79302 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -289,7 +289,7 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
         return -1;
     }
     // check, current node have this addr or no
-    uint64_t l_cur_addr = dap_db_get_cur_node_addr();
+    uint64_t l_cur_addr = dap_db_get_cur_node_addr(a_net->pub.name);
     if(l_cur_addr && l_cur_addr == a_node_info->hdr.address.uint64) {
         dap_chain_node_cli_set_reply_text(str_reply, "current node cannot be deleted");
         return -1;
@@ -1031,6 +1031,41 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
         if(!l_remote_node_info) {
             return -1;
         }
+        //feature-2630
+        {
+            dap_chain_node_addr_t *l_node_addr = dap_chain_net_get_cur_addr(l_net);
+            uint64_t id = dap_db_get_cur_node_addr(l_net->pub.name);
+            // start connect
+            dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect(l_remote_node_info);
+            if(!l_node_client) {
+                dap_chain_node_cli_set_reply_text(a_str_reply, "can't connect");
+                DAP_DELETE(l_remote_node_info);
+                return -1;
+            }
+            // wait connected
+            int timeout_ms = 5000; //5 sec = 5000 ms
+            int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_CONNECTED, timeout_ms);
+            if(res) {
+                dap_stream_ch_t * l_ch_chain = dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_net_get_id());
+
+                if(0 == dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR_REQUEST,
+                        l_net->pub.id, l_chain_id_null, l_chain_cell_id_null, &l_sync_request,
+                        sizeof(l_sync_request))) {
+                    dap_chain_node_cli_set_reply_text(a_str_reply, "Error: Cant send sync chains request");
+                    // clean client struct
+                    dap_chain_node_client_close(l_node_client);
+                    DAP_DELETE(l_remote_node_info);
+                    return -1;
+                }
+                dap_stream_ch_set_ready_to_write(l_ch_chain, true);
+                // wait for finishing of request
+                timeout_ms = 120000; // 20 min = 1200 sec = 1 200 000 ms
+                // TODO add progress info to console
+                res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms);
+
+            }
+        }
+
         // start connect
         dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect(l_remote_node_info);
         if(!l_node_client) {
@@ -1059,7 +1094,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
         // fill current node address
         l_sync_request.node_addr.uint64 =
                 dap_chain_net_get_cur_addr(l_net) ? dap_chain_net_get_cur_addr(l_net)->uint64 :
-                                                    dap_db_get_cur_node_addr();
+                                                    dap_db_get_cur_node_addr(l_net->pub.name);
         dap_chain_id_t l_chain_id_null = { { 0 } };
         dap_chain_cell_id_t l_chain_cell_id_null = { { 0 } };
         l_chain_id_null.uint64 = l_net->pub.id.uint64;