diff --git a/dap_chain_net.c b/dap_chain_net.c
index f8edbc70b8b56cb2f6fe4322517e097ee7538363..2e6ae1abd3d4f8c0c56018f0ce1af227d4feb6ea 100644
--- a/dap_chain_net.c
+++ b/dap_chain_net.c
@@ -413,7 +413,13 @@ lb_proc_state:
                         case NODE_ROLE_MASTER:{
                             PVT(l_net)->state = NET_STATE_ADDR_REQUEST;
                         } break;
-                       default: PVT( l_net)->state = NET_STATE_SYNC_GDB;
+                       default:{
+                        // get addr for current node if it absent
+                        if(dap_chain_net_get_cur_addr_int(l_net))
+                            PVT(l_net)->state = NET_STATE_ADDR_REQUEST;
+                        else
+                            PVT( l_net)->state = NET_STATE_SYNC_GDB;
+                       }
                     }
                 }pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state;
                 case NET_STATE_SYNC_GDB: // we need only to sync gdb
@@ -452,7 +458,11 @@ lb_proc_state:
             dap_chain_node_client_t * l_node_client = NULL, *l_node_client_tmp = NULL;
             HASH_ITER(hh,PVT(l_net)->links,l_node_client,l_node_client_tmp){
                 uint8_t l_ch_id = dap_stream_ch_chain_net_get_id(); // Channel id for chain net request
-                size_t res = dap_stream_ch_chain_net_pkt_write(dap_client_get_stream_ch(l_node_client->client, l_ch_id),
+                dap_stream_ch_t * l_ch_chain = dap_client_get_stream_ch(l_node_client->client, l_ch_id);
+                // set callback for l_ch_id
+                dap_chain_node_client_set_callbacks( l_node_client->client, l_ch_id);
+                // send request for new address
+                size_t res = dap_stream_ch_chain_net_pkt_write(l_ch_chain,
                         DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR_LEASE_REQUEST,
                         //DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR_REQUEST,
                         l_net->pub.id, NULL, 0);
@@ -464,13 +474,18 @@ lb_proc_state:
                 }
 
                 // wait for finishing of request
-                int timeout_ms = 5000; // 2 min = 120 sec = 120 000 ms
+                int timeout_ms = 5000; // 5 sec = 5 000 ms
                 // TODO add progress info to console
                 PVT(l_net)->addr_request_attempts++;
                 int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_NODE_ADDR_LEASED, timeout_ms);
                 switch (l_res) {
                     case -1:
                         log_it(L_WARNING,"Timeout with addr leasing");
+                        // try again 3 times
+                        if(PVT(l_net)->addr_request_attempts < 3) {
+                            pthread_mutex_unlock(&PVT(l_net)->state_mutex);
+                            goto lb_proc_state;
+                        }
                     continue; // try with another link
                     case 0:
                         log_it(L_INFO, "Node address leased");
@@ -1511,6 +1526,12 @@ dap_chain_node_addr_t * dap_chain_net_get_cur_addr( dap_chain_net_t * l_net)
     return  PVT(l_net)->node_info? &PVT(l_net)->node_info->hdr.address: PVT(l_net)->node_addr;
 }
 
+uint64_t dap_chain_net_get_cur_addr_int(dap_chain_net_t * l_net)
+{
+    return 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);
+}
+
 dap_chain_cell_id_t * dap_chain_net_get_cur_cell( dap_chain_net_t * l_net)
 {
     return  PVT(l_net)->node_info? &PVT(l_net)->node_info->hdr.cell_id: 0;
diff --git a/dap_chain_net.h b/dap_chain_net.h
index 9cff00b5e499d4e780252e4ca17f83cd4bc67ce1..05d9e73f13bd4e687299c83e89e91d342501908a 100644
--- a/dap_chain_net.h
+++ b/dap_chain_net.h
@@ -102,6 +102,7 @@ dap_ledger_t * dap_chain_ledger_by_net_name( const char * a_net_name);
 dap_chain_t * dap_chain_net_get_chain_by_name( dap_chain_net_t * l_net, const char * a_name);
 
 dap_chain_node_addr_t * dap_chain_net_get_cur_addr( dap_chain_net_t * l_net);
+uint64_t dap_chain_net_get_cur_addr_int(dap_chain_net_t * l_net);
 dap_chain_cell_id_t * dap_chain_net_get_cur_cell( dap_chain_net_t * l_net);
 
 void dap_chain_net_links_connect(dap_chain_net_t * a_net);
diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index 3dfe96961b54af3db5ab4649ce1420e14825a07c..505008291e708c44740dedf35bd88e3531ca0177 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -1058,11 +1058,10 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
          // fill end id = 0 - no time limit
          //l_sync_request.ts_end = 0;
          // 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(l_net->pub.name);
-        //feature-2630
-        //if(!l_sync_request.node_addr.uint64 )
+         l_sync_request.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
+
+        // if need to get current node address (feature-2630)
+        if(!l_sync_request.node_addr.uint64 )
         {
             log_it(L_NOTICE, "Now get node addr");
             uint8_t l_ch_id = dap_stream_ch_chain_net_get_id();
@@ -1215,7 +1214,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
         dap_chain_node_info_t *node_info = node_info_read_and_reply(l_net, &l_node_addr, a_str_reply);
         if(!node_info)
             return -6;
-        int timeout_ms = 10000; //10 sec = 10000 ms
+        int timeout_ms = 5000; //5 sec = 5000 ms
         // start handshake
         dap_chain_node_client_t *client = dap_chain_node_client_connect(node_info);
         if(!client) {