diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea07339f7e29b13c647a12566f106a2e66988dae..0c004d8990799addb100c55defdfca7735539d57 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ set(DAP_CHAIN_NET_SRCS
         dap_chain_node_ctl.c
         dap_chain_node_cli.c
         dap_chain_node_cli_cmd.c
-        dap_chain_node_cli_connect.c
+        dap_chain_node_client.c
         dap_chain_node_remote.c
         )
 
@@ -17,7 +17,7 @@ set(DAP_CHAIN_NET_HEADERS
         dap_chain_node_ctl.h
         dap_chain_node_cli.h
         dap_chain_node_cli_cmd.h
-        dap_chain_node_cli_connect.h
+        dap_chain_node_client.h
         dap_chain_node_remote.h
     )
 
diff --git a/dap_chain_net.h b/dap_chain_net.h
index 9444216806654efaa2d75ae7aa7cb7a17d1f425c..d3a6264f22d24c853d7633baf5e11a321d4d05fb 100644
--- a/dap_chain_net.h
+++ b/dap_chain_net.h
@@ -41,8 +41,8 @@ typedef struct dap_chain_net{
     uint8_t pvt[];
 } dap_chain_net_t;
 
-int dap_chain_net_init();
-void dap_chain_net_deinit();
+int dap_chain_net_init(void);
+void dap_chain_net_deinit(void);
 
 dap_chain_net_t * dap_chain_net_new (const char * a_id,  const char * a_name,
                                      const char* a_node_role , const char* a_node_name );
diff --git a/dap_chain_node_cli.c b/dap_chain_node_cli.c
index 9e29499c40c368e13f14a0c8f6d27fb919e6451c..6f267f06a62ca13448b1ad759d7b16d605352848 100644
--- a/dap_chain_node_cli.c
+++ b/dap_chain_node_cli.c
@@ -49,7 +49,7 @@ typedef int SOCKET;
 #include "iputils/iputils.h"
 #include "dap_common.h"
 #include "dap_chain_node_cli_cmd.h"
-#include "dap_chain_node_cli_connect.h"
+#include "dap_chain_node_client.h"
 #include "dap_chain_node_cli.h"
 
 //#include "dap_chain_node_cli.h"
@@ -379,7 +379,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     //strcpy(server.sun_path, SOCKET_FILE);
 
     // init client for handshake
-    chain_node_client_init();
+    dap_chain_node_client_init();
 
     SOCKET sockfd;
 
@@ -432,5 +432,5 @@ void dap_chain_node_cli_delete(void)
         closesocket(server_sockfd);
 
     // deinit client for handshake
-    chain_node_client_deinit();
+    dap_chain_node_client_deinit();
 }
diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index f17c9383dc548ffe85f1d936adcf68c3b3051d9c..eddac8d1615a4626ce208a8e4a1c483d24c6a998 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -33,7 +33,7 @@
 //#include "dap_common.h"
 #include "dap_chain_node.h"
 #include "dap_chain_global_db.h"
-#include "dap_chain_node_cli_connect.h"
+#include "dap_chain_node_client.h"
 #include "dap_chain_node_remote.h"
 #include "dap_chain_node_cli_cmd.h"
 
@@ -735,7 +735,7 @@ int com_node(int argc, const char ** argv, char **str_reply)
         }
         int timeout_ms = 100000; //100 sec.
         // start handshake
-        chain_node_client_t *client = chain_node_client_connect(node_info);
+        dap_chain_node_client_t *client = dap_chain_node_client_connect(node_info);
         if(!client) {
             set_reply_text(str_reply, "can't connect");
             DAP_DELETE(node_info);
@@ -746,7 +746,7 @@ int com_node(int argc, const char ** argv, char **str_reply)
         if(res != 1) {
             set_reply_text(str_reply, "no response from node");
             // clean client struct
-            chain_node_client_close(client);
+            dap_chain_node_client_close(client);
             DAP_DELETE(node_info);
             return -1;
         }
diff --git a/dap_chain_node_cli_connect.c b/dap_chain_node_client.c
similarity index 73%
rename from dap_chain_node_cli_connect.c
rename to dap_chain_node_client.c
index b3bf58164381c40a2844b81b91a429db3180bc8b..b9cec781ecdbbc43efa5f59bd8a283cefcb340ae 100644
--- a/dap_chain_node_cli_connect.c
+++ b/dap_chain_node_client.c
@@ -29,13 +29,12 @@
 
 #include "dap_common.h"
 #include "dap_client.h"
-#include "dap_client_pvt.h"
 #include "dap_config.h"
 #include "dap_events.h"
 #include "dap_http_client_simple.h"
-#include "dap_chain_node_cli_connect.h"
+#include "dap_chain_node_client.h"
 
-#define LOG_TAG "chain_node_cli_connect"
+#define LOG_TAG "dap_chain_node_client"
 
 #define DAP_APP_NAME NODE_NETNAME"-node"
 #define SYSTEM_PREFIX "/opt/"DAP_APP_NAME
@@ -43,7 +42,7 @@
 
 static int listen_port_tcp = 8079;
 
-int chain_node_client_init(void)
+int dap_chain_node_client_init(void)
 {
     int res = dap_client_init();
     res = dap_http_client_simple_init();
@@ -62,7 +61,7 @@ int chain_node_client_init(void)
     return res;
 }
 
-void chain_node_client_deinit()
+void dap_chain_node_client_deinit()
 {
     dap_http_client_simple_deinit();
     dap_client_deinit();
@@ -82,7 +81,7 @@ static void stage_status_error_callback(dap_client_t *a_client, void *a_arg)
 // callback for the end of handshake in dap_client_go_stage() / chain_node_client_connect()
 static void a_stage_end_callback(dap_client_t *a_client, void *a_arg)
 {
-    chain_node_client_t *client = a_client->_inheritor;
+    dap_chain_node_client_t *client = a_client->_inheritor;
     assert(client);
     if(client) {
         pthread_mutex_lock(&client->wait_mutex);
@@ -97,21 +96,20 @@ static void a_stage_end_callback(dap_client_t *a_client, void *a_arg)
  *
  * return a connection handle, or NULL, if an error
  */
-chain_node_client_t* chain_node_client_connect(dap_chain_node_info_t *node_info)
+dap_chain_node_client_t* dap_chain_node_client_connect(dap_chain_node_info_t *node_info)
 {
     if(!node_info)
         return NULL;
-    chain_node_client_t *client = DAP_NEW_Z(chain_node_client_t);
-    client->state = NODE_CLIENT_STATE_INIT;
+    dap_chain_node_client_t *l_node_client = DAP_NEW_Z(dap_chain_node_client_t);
+    l_node_client->state = NODE_CLIENT_STATE_INIT;
     pthread_condattr_t attr;
     pthread_condattr_init(&attr);
     pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
-    pthread_cond_init(&client->wait_cond, &attr);
-    pthread_mutex_init(&client->wait_mutex, NULL);
-    client->a_events = dap_events_new();
-    client->a_client = dap_client_new(client->a_events, stage_status_callback, stage_status_error_callback);
-    client->a_client->_inheritor = client;
-    dap_client_pvt_t *l_client_internal = DAP_CLIENT_PVT(client->a_client);
+    pthread_cond_init(&l_node_client->wait_cond, &attr);
+    pthread_mutex_init(&l_node_client->wait_mutex, NULL);
+    l_node_client->events = dap_events_new();
+    l_node_client->client = dap_client_new(l_node_client->events, stage_status_callback, stage_status_error_callback);
+    l_node_client->client->_inheritor = l_node_client;
 
     int hostlen = 128;
     char host[hostlen];
@@ -127,34 +125,31 @@ chain_node_client_t* chain_node_client_connect(dap_chain_node_info_t *node_info)
     }
     // address not defined
     if(!strcmp(host, "::")) {
-        chain_node_client_close(client);
+        dap_chain_node_client_close(l_node_client);
         return NULL;
     }
-    l_client_internal->uplink_addr = strdup(host);
-    l_client_internal->uplink_port = listen_port_tcp; // reads from settings, default 8079
-    l_client_internal->uplink_protocol_version = DAP_PROTOCOL_VERSION;
-    dap_client_stage_t a_stage_target = STAGE_ENC_INIT;
+    dap_client_set_uplink( l_node_client->client, strdup(host), listen_port_tcp );
+    dap_client_stage_t a_stage_target = STAGE_STREAM_STREAMING;
 
-    client->state = NODE_CLIENT_STATE_CONNECT;
+    l_node_client->state = NODE_CLIENT_STATE_CONNECT;
     // Handshake
-    dap_client_go_stage(client->a_client, a_stage_target, a_stage_end_callback);
-    return client;
+    dap_client_go_stage(l_node_client->client, a_stage_target, a_stage_end_callback);
+    return l_node_client;
 }
 
+
 /**
  * Close connection to server, delete chain_node_client_t *client
  */
-void chain_node_client_close(chain_node_client_t *client)
+void dap_chain_node_client_close(dap_chain_node_client_t *a_client)
 {
-    if(client) {
+    if(a_client) {
         // clean client
-        dap_client_pvt_t *l_client_internal = DAP_CLIENT_PVT(client->a_client);
-        DAP_DELETE(l_client_internal->uplink_addr);
-        dap_client_delete(client->a_client);
-        dap_events_delete(client->a_events);
-        pthread_cond_destroy(&client->wait_cond);
-        pthread_mutex_destroy(&client->wait_mutex);
-        DAP_DELETE(client);
+        dap_client_delete(a_client->client);
+        dap_events_delete(a_client->events);
+        pthread_cond_destroy(&a_client->wait_cond);
+        pthread_mutex_destroy(&a_client->wait_mutex);
+        DAP_DELETE(a_client);
     }
 }
 
@@ -165,7 +160,7 @@ void chain_node_client_close(chain_node_client_t *client)
  * waited_state state which we will wait, sample NODE_CLIENT_STATE_CONNECT or NODE_CLIENT_STATE_SENDED
  * return -1 false, 0 timeout, 1 end of connection or sending data
  */
-int chain_node_client_wait(chain_node_client_t *client, int waited_state, int timeout_ms)
+int chain_node_client_wait(dap_chain_node_client_t *client, int waited_state, int timeout_ms)
 {
     int ret = -1;
     if(!client)
diff --git a/dap_chain_node_cli_connect.h b/dap_chain_node_client.h
similarity index 71%
rename from dap_chain_node_cli_connect.h
rename to dap_chain_node_client.h
index c2f91c1ecf31182e587d4d2180cf8dab26ea011f..d6b86bfd6bc1f3f79ea7951a3235a7c04d5ac13f 100644
--- a/dap_chain_node_cli_connect.h
+++ b/dap_chain_node_client.h
@@ -38,31 +38,39 @@ enum {
     NODE_CLIENT_STATE_END
 };
 
+typedef struct dap_chain_node_client dap_chain_node_client_t;
+
+typedef void (*dap_chain_node_client_callback_t) (dap_chain_node_client_t *, void*);
+
 // state for a client connection
-typedef struct chain_node_client {
+typedef struct dap_chain_node_client {
     int state;
-    dap_client_t *a_client;
-    dap_events_t *a_events;
+    dap_client_t *client;
+    dap_events_t *events;
+
+    dap_chain_node_client_callback_t callback_stream_connected;
     pthread_cond_t wait_cond;
     pthread_mutex_t wait_mutex;
-} chain_node_client_t;
+} dap_chain_node_client_t;
 
 
-int chain_node_client_init(void);
+int dap_chain_node_client_init(void);
 
-void chain_node_client_deinit();
+void dap_chain_node_client_deinit();
 
 /**
- * Create connection to server
+ * Create handshake to server
  *
  * return a connection handle, or NULL, if an error
  */
-chain_node_client_t* chain_node_client_connect(dap_chain_node_info_t *node_info);
+dap_chain_node_client_t* dap_chain_node_client_connect(dap_chain_node_info_t *node_info);
+
+
 
 /**
  * Close connection to server, delete chain_node_client_t *client
  */
-void chain_node_client_close(chain_node_client_t *client);
+void dap_chain_node_client_close(dap_chain_node_client_t *client);
 
 /**
  * wait for the complete of request
@@ -71,5 +79,5 @@ void chain_node_client_close(chain_node_client_t *client);
  * waited_state state which we will wait, sample NODE_CLIENT_STATE_CONNECT or NODE_CLIENT_STATE_SENDED
  * return -1 false, 0 timeout, 1 end of connection or sending data
  */
-int chain_node_client_wait(chain_node_client_t *client, int waited_state, int timeout_ms);
+int chain_node_client_wait(dap_chain_node_client_t *client, int waited_state, int timeout_ms);
 
diff --git a/dap_chain_node_remote.c b/dap_chain_node_remote.c
index 914a847221d0a14ae9b7cc78e7fcaea4bf2ffca9..9ba16a39893c26a2a7afe4174b629d8830041f95 100644
--- a/dap_chain_node_remote.c
+++ b/dap_chain_node_remote.c
@@ -37,7 +37,7 @@ static pthread_mutex_t connect_list_mutex = PTHREAD_MUTEX_INITIALIZER;
 /**
  * Add new established connection in the list
  */
-bool chain_node_client_list_add(chain_node_client_t *client)
+bool chain_node_client_list_add(dap_chain_node_client_t *client)
 {
     if(!client)
         return false;
@@ -50,7 +50,7 @@ bool chain_node_client_list_add(chain_node_client_t *client)
 /**
  * Delete established connection from the list
  */
-bool chain_node_client_list_del(chain_node_client_t *client)
+bool chain_node_client_list_del(dap_chain_node_client_t *client)
 {
     pthread_mutex_lock(&connect_list_mutex);
     GList *list = g_list_find(connect_list, client);
@@ -70,10 +70,10 @@ bool chain_node_client_list_del(chain_node_client_t *client)
  *
  * return client, or NULL if the position is off the end of the list
  */
-chain_node_client_t* chain_node_client_list_get_item(int n)
+dap_chain_node_client_t* chain_node_client_list_get_item(int n)
 {
     pthread_mutex_lock(&connect_list_mutex);
-    chain_node_client_t *client = g_list_nth_data(connect_list, (guint) n);
+    dap_chain_node_client_t *client = g_list_nth_data(connect_list, (guint) n);
     pthread_mutex_unlock(&connect_list_mutex);
     return client;
 }
diff --git a/dap_chain_node_remote.h b/dap_chain_node_remote.h
index ef7f4c5ef5452c2d5f5a1fdcfb046c67e03391a2..0ce1cfdb528e863fb0f0ede875d996af0629b215 100644
--- a/dap_chain_node_remote.h
+++ b/dap_chain_node_remote.h
@@ -23,17 +23,17 @@
 
 #include <stdbool.h>
 
-#include "dap_chain_node_cli_connect.h"
+#include "dap_chain_node_client.h"
 
 /**
  * Add new established connection in the list
  */
-bool chain_node_client_list_add(chain_node_client_t *client);
+bool chain_node_client_list_add(dap_chain_node_client_t *client);
 
 /**
  * Delete established connection from the list
  */
-bool chain_node_client_list_del(chain_node_client_t *client);
+bool chain_node_client_list_del(dap_chain_node_client_t *client);
 
 /**
  * Get one established connection
@@ -42,7 +42,7 @@ bool chain_node_client_list_del(chain_node_client_t *client);
  *
  * return client, or NULL if the position is off the end of the list
  */
-chain_node_client_t* chain_node_client_list_get_item(int n);
+dap_chain_node_client_t* chain_node_client_list_get_item(int n);
 
 /**
  * Get the number of established connections