diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index f05f6440e3747da5b293a48aab5ebe7111f132e3..33f62641861bbdaf6d191dd37e596796070e396b 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -1305,6 +1305,8 @@ static void s_stream_es_callback_write(dap_events_socket_t * a_es, void * arg)
         // Response received after client_pvt was deleted
         return;
     }
+    if (l_client_pvt->stage_status == STAGE_STATUS_ERROR)
+        return;
     switch (l_client_pvt->stage) {
         case STAGE_STREAM_STREAMING: {
             size_t i;
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 4ccbaf1432d7dc8fd91adc971dde8c75d8e8b573..f4fb4e7dae6bf95efc1df0825fbc7b36c5094301 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -147,6 +147,7 @@ static void s_stage_status_error_callback(dap_client_t *a_client, void *a_arg)
         SetEvent( l_node_client->wait_cond );
 #endif
         pthread_mutex_unlock(&l_node_client->wait_mutex);
+        l_node_client->own_esh.esocket = 0;
         dap_timerfd_start_on_worker(dap_events_worker_get_auto(),s_timer_update_states*1000,s_timer_update_states_callback, l_node_client);
         return;
     }
@@ -189,8 +190,8 @@ static bool s_timer_update_states_callback(void * a_arg )
     dap_worker_t * l_worker = dap_events_get_current_worker(dap_events_get_default());
     assert(l_worker);
     assert(l_me);
-    dap_events_socket_t * l_es = l_me->own_esh->esocket;
-    uint128_t l_es_uuid = l_me->own_esh->uuid;
+    dap_events_socket_t * l_es = l_me->own_esh.esocket;
+    uint128_t l_es_uuid = l_me->own_esh.uuid;
     // check if esocket still in worker
     if(dap_events_socket_check_unsafe(l_worker,l_es)){
         // Check if its exactly ours!
@@ -230,7 +231,6 @@ static bool s_timer_update_states_callback(void * a_arg )
         log_it(L_INFO, "Reconnecting node client with peer "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_me->remote_node_addr));
         dap_chain_node_client_connect_internal(l_me, "CN"); // isn't always CN here?
     }
-    DAP_DELETE(l_me->own_esh);
     return false;
 }
 
@@ -265,10 +265,8 @@ static void s_stage_connected_callback(dap_client_t *a_client, void *a_arg)
 
         dap_stream_t * l_stream  = dap_client_get_stream(a_client);
         if (l_stream) {
-            dap_events_socket_handler_t * l_es_handler = DAP_NEW_Z(dap_events_socket_handler_t);
-            l_es_handler->esocket = l_stream->esocket;
-            l_es_handler->uuid = l_stream->esocket->uuid;
-            l_node_client->own_esh = l_es_handler;
+            l_node_client->own_esh.esocket = l_stream->esocket;
+            l_node_client->own_esh.uuid = l_stream->esocket->uuid;
             dap_timerfd_start_on_worker(l_stream->esocket->worker,s_timer_update_states*1000,s_timer_update_states_callback, l_node_client);
         }
 #ifndef _WIN32
diff --git a/modules/net/include/dap_chain_node_client.h b/modules/net/include/dap_chain_node_client.h
index 4cd81b23dd552728e69aeff7a41bd4e79fc3a2e0..1ea41b65178a16a28a857b67695248b9d519f567 100644
--- a/modules/net/include/dap_chain_node_client.h
+++ b/modules/net/include/dap_chain_node_client.h
@@ -94,7 +94,7 @@ typedef struct dap_chain_node_client {
 
     // Timer
     dap_events_socket_t * timer_update_states;
-    dap_events_socket_handler_t *own_esh;
+    dap_events_socket_handler_t own_esh;
 
 
     #ifndef _WIN32