diff --git a/CMakeLists.txt b/CMakeLists.txt
index b1586fb2bca8918f1d47233fe0cfad9296bc202f..a712896a4d58e89358f9a492b1bf05775507f5a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.5-23")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.5-24")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 
 set(DAPSDK_MODULES "")
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index b164bab85779d8dda73f833c52a7384dd49b14cf..b55f4d0229142f63b2281d71b9c4af76f7b2f5c0 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -109,7 +109,11 @@ MEM_ALLOC_ERR:
 void dap_client_set_uplink(dap_client_t * a_client,const char* a_addr, uint16_t a_port)
 {
     if(a_addr == NULL){
-        log_it(L_ERROR,"Address is NULL");
+        log_it(L_ERROR,"Address is NULL for dap_client_set_uplink");
+        return;
+    }
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_set_uplink");
         return;
     }
     DAP_CLIENT_PVT(a_client)->uplink_addr = strdup(a_addr);
@@ -123,6 +127,11 @@ void dap_client_set_uplink(dap_client_t * a_client,const char* a_addr, uint16_t
  */
 const char* dap_client_get_uplink_addr(dap_client_t * a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_uplink");
+        return NULL;
+    }
+
     return DAP_CLIENT_PVT(a_client)->uplink_addr;
 }
 
@@ -133,9 +142,14 @@ const char* dap_client_get_uplink_addr(dap_client_t * a_client)
  */
 void dap_client_set_active_channels (dap_client_t * a_client, const char * a_active_channels)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_set_active_channels");
+        return;
+    }
+
     if ( DAP_CLIENT_PVT(a_client)->active_channels )
         DAP_DELETE(DAP_CLIENT_PVT(a_client)->active_channels );
-    DAP_CLIENT_PVT(a_client)->active_channels = dap_strdup( a_active_channels);
+    DAP_CLIENT_PVT(a_client)->active_channels =  a_active_channels? dap_strdup( a_active_channels) : NULL;
 }
 
 /**
@@ -145,11 +159,21 @@ void dap_client_set_active_channels (dap_client_t * a_client, const char * a_act
  */
 uint16_t dap_client_get_uplink_port(dap_client_t * a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_uplink_port");
+        return 0;
+    }
+
     return DAP_CLIENT_PVT(a_client)->uplink_port;
 }
 
 void dap_client_set_auth_cert(dap_client_t * a_client, dap_cert_t *a_cert)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_set_auth_cert");
+        return;
+    }
+
     DAP_CLIENT_PVT(a_client)->auth_cert = a_cert;
 }
 
@@ -348,7 +372,11 @@ const char * dap_client_error_str(dap_client_error_t a_client_error)
  */
 const char * dap_client_get_error_str(dap_client_t * a_client)
 {
-   return dap_client_error_str( DAP_CLIENT_PVT(a_client)->last_error );
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_error_str");
+        return NULL;
+    }
+    return dap_client_error_str( DAP_CLIENT_PVT(a_client)->last_error );
 }
 /**
  * @brief dap_client_get_stage
@@ -357,6 +385,10 @@ const char * dap_client_get_error_str(dap_client_t * a_client)
  */
 dap_client_stage_t dap_client_get_stage(dap_client_t * a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_stage");
+        return -1;
+    }
     return DAP_CLIENT_PVT(a_client)->stage;
 }
 
@@ -366,6 +398,10 @@ dap_client_stage_t dap_client_get_stage(dap_client_t * a_client)
  * @return
  */
 const char * dap_client_get_stage_status_str(dap_client_t *a_client){
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_stage_status_str");
+        return NULL;
+    }
     return dap_client_stage_status_str(DAP_CLIENT_PVT(a_client)->stage_status);
 }
 
@@ -392,6 +428,10 @@ const char * dap_client_stage_status_str(dap_client_stage_status_t a_stage_statu
  */
 const char * dap_client_get_stage_str(dap_client_t *a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_stage_str");
+        return NULL;
+    }
     return dap_client_stage_str(DAP_CLIENT_PVT(a_client)->stage);
 }
 
@@ -439,6 +479,11 @@ dap_enc_key_t * dap_client_get_key_stream(dap_client_t * a_client){
  */
 dap_stream_t * dap_client_get_stream(dap_client_t * a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_stream");
+        return NULL;
+    }
+
     dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(a_client);
     return (l_client_internal) ? l_client_internal->stream : NULL;
 }
@@ -450,6 +495,10 @@ dap_stream_t * dap_client_get_stream(dap_client_t * a_client)
  */
 dap_stream_worker_t * dap_client_get_stream_worker(dap_client_t * a_client)
 {
+    if(a_client == NULL){
+        log_it(L_ERROR,"Client is NULL for dap_client_get_stream_worker");
+        return NULL;
+    }
     dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(a_client);
     return (l_client_internal) ? l_client_internal->stream_worker : NULL;
 
@@ -460,7 +509,7 @@ dap_stream_ch_t * dap_client_get_stream_ch(dap_client_t * a_client, uint8_t a_ch
     dap_stream_ch_t * l_ch = NULL;
     dap_client_pvt_t * l_client_internal = a_client ? DAP_CLIENT_PVT(a_client) : NULL;
     if(l_client_internal && l_client_internal->stream && l_client_internal->stream_es)
-        for(int i = 0; i < l_client_internal->stream->channel_count; i++) {
+        for(size_t i = 0; i < l_client_internal->stream->channel_count; i++) {
             if(l_client_internal->stream->channel[i]->proc->id == a_ch_id) {
                 l_ch = l_client_internal->stream->channel[i];
                 break;
diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index acccb093f8348564e3797d504a0b940f32ed0e20..5a3ca7692c94c91b10a17f7e2d2401813e52ce60 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -421,7 +421,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt)
                 l_sign_size = dap_sign_get_size(l_sign);
             }
             uint8_t l_data[l_key_size + l_sign_size];
-            memcpy(l_data, a_client_pvt->session_key_open->pub_key_data, l_key_size);
+            memcpy(l_data,a_client_pvt->session_key_open->pub_key_data, l_key_size);
             if (l_sign) {
                 memcpy(l_data + l_key_size, l_sign, l_sign_size);
             }
diff --git a/dap-sdk/net/client/include/dap_client.h b/dap-sdk/net/client/include/dap_client.h
index b18b329d9500dd5591081722a8b5f0f2d296dee0..272bf758ee390cef9147ae20b2a9b2748421427b 100644
--- a/dap-sdk/net/client/include/dap_client.h
+++ b/dap-sdk/net/client/include/dap_client.h
@@ -34,6 +34,7 @@
  * @brief The dap_client_stage enum. Top level of client's state machine
  **/
 typedef enum dap_client_stage {
+    STAGE_UNDEFINED=-1,
     STAGE_BEGIN=0,
     STAGE_ENC_INIT=1,
     STAGE_STREAM_CTL=2,
diff --git a/dap-sdk/net/server/enc_server/dap_enc_http.c b/dap-sdk/net/server/enc_server/dap_enc_http.c
index 1235945309a220b941313c288c878efd18941a2a..840cdb5a68b0f4f85f8899d6a7afb1712150f48f 100644
--- a/dap-sdk/net/server/enc_server/dap_enc_http.c
+++ b/dap-sdk/net/server/enc_server/dap_enc_http.c
@@ -106,7 +106,8 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg)
         sscanf(cl_st->http_client->in_query_string, "enc_type=%d,pkey_exchange_type=%d,pkey_exchange_size=%zd",
                                       &l_enc_type,&l_pkey_exchange_type,&l_pkey_exchange_size);
 
-
+        log_it(L_DEBUG, "Stream encryption: %s\t public key exchange: %s",dap_enc_get_type_name(l_enc_type),
+               dap_enc_get_type_name(l_pkey_exchange_type));
         uint8_t alice_msg[cl_st->request_size];
         size_t l_decode_len = dap_enc_base64_decode(cl_st->request, cl_st->request_size, alice_msg, DAP_ENC_DATA_TYPE_B64);
         dap_chain_hash_fast_t l_sign_hash = {};
diff --git a/dap-sdk/net/stream/stream/dap_stream_ctl.c b/dap-sdk/net/stream/stream/dap_stream_ctl.c
index dc82ed592ccacebcd472a7bf682e888faec5b6a1..52bf55be3d7ea1de459d6ebd43193bb756723631 100644
--- a/dap-sdk/net/stream/stream/dap_stream_ctl.c
+++ b/dap-sdk/net/stream/stream/dap_stream_ctl.c
@@ -121,26 +121,35 @@ void s_proc(struct dap_http_simple *a_http_simple, void * a_arg)
         char l_channels_str[sizeof(ss->active_channels)];
         dap_enc_key_type_t l_enc_type = s_socket_forward_key.type;
         int l_enc_headers = 0;
-        bool l_is_legacy=false;
-        int l_url_sscanf_res = sscanf(l_dg->url_path, "stream_ctl,channels=%16s,enc_type=%d,enc_headers=%d", l_channels_str, &l_enc_type, &l_enc_headers);
-        if(l_url_sscanf_res > 0){
-            if(l_url_sscanf_res < 3){
-                log_it(L_INFO, "legacy encryption mode used (OAES)");
-                l_enc_type = DAP_ENC_KEY_TYPE_OAES;
-                l_is_legacy = true;
+        bool l_is_legacy=true;
+        char * l_tok_tmp = NULL;
+        char * l_tok = strtok_r(l_dg->url_path, ",",&l_tok_tmp)   ;
+        do {
+            char * l_subtok_tmp = NULL;
+            char * l_subtok_name = strtok_r(l_tok, "=",&l_subtok_tmp);
+            char * l_subtok_value = strtok_r(NULL, "=",&l_subtok_tmp);
+            if (l_subtok_value){
+                log_it(L_DEBUG, "tok = %s value =%s",l_subtok_name,l_subtok_value);
+                if ( strcmp(l_subtok_name,"channels")==0 ){
+                    strncpy(l_channels_str,l_subtok_value,sizeof (l_channels_str)-1);
+                    log_it(L_DEBUG,"Param: channels=%s",l_channels_str);
+                }else if(strcmp(l_subtok_name,"enc_type")==0){
+                    l_enc_type = atoi(l_subtok_value);
+                    log_it(L_DEBUG,"Param: enc_type=%s",dap_enc_get_type_name(l_enc_type));
+                    l_is_legacy = false;
+                }else if(strcmp(l_subtok_name,"enc_headers")==0){
+                    l_enc_headers = atoi(l_subtok_value);
+                    log_it(L_DEBUG,"Param: enc_headers=%d",l_enc_headers);
+                }
             }
+            l_tok = strtok_r(NULL, ",",&l_tok_tmp)   ;
+        } while(l_tok);
+        l_new_session = true;
+        if(l_is_legacy){
+            log_it(L_INFO, "legacy encryption mode used (OAES)");
+            l_enc_type = DAP_ENC_KEY_TYPE_OAES;
             l_new_session = true;
         }
-        else if(strcmp(l_dg->url_path, "socket_forward" ) == 0) {
-            l_channels_str[0]  = '\0';
-            l_new_session = true;
-        }
-        else{
-            log_it(L_ERROR,"ctl command unknown: %s",l_dg->url_path);
-            enc_http_delegate_delete(l_dg);
-            *return_code = Http_Status_MethodNotAllowed;
-            return;
-        }
         if(l_new_session){
 
             ss = dap_stream_session_pure_new();