diff --git a/net/server/json_rpc/rpc_core/include/dap_json_rpc_request.h b/net/server/json_rpc/rpc_core/include/dap_json_rpc_request.h
index cceded3ed5d763d64b9bf352fcb2ed654dd7127a..c583c41478b8a015d829f5e384be143e8404ef47 100644
--- a/net/server/json_rpc/rpc_core/include/dap_json_rpc_request.h
+++ b/net/server/json_rpc/rpc_core/include/dap_json_rpc_request.h
@@ -44,12 +44,10 @@ typedef struct dap_json_rpc_http_request
     struct {
         uint32_t data_size;
         uint32_t signs_size;
-    } DAP_ALIGN_PACKED header;
-    dap_json_rpc_request_t * request;
-    byte_t tsd_n_signs[];
-}dap_json_rpc_http_request_t;
+    }  header;
+    byte_t request_n_signs[];
+} DAP_ALIGN_PACKED dap_json_rpc_http_request_t;
 
-int dap_json_rpc_request_init(const char *a_url_service);
 /**
  * Create a new dap_json_rpc_request_t instance.
  *
diff --git a/net/server/json_rpc/rpc_core/src/dap_json_rpc_request.c b/net/server/json_rpc/rpc_core/src/dap_json_rpc_request.c
index b7b4f95586ffa544cdcf8b5b3d67289f7d8635a4..a17bec4878dba2e5c20cf3252dbc025d50b73273 100644
--- a/net/server/json_rpc/rpc_core/src/dap_json_rpc_request.c
+++ b/net/server/json_rpc/rpc_core/src/dap_json_rpc_request.c
@@ -4,8 +4,6 @@
 
 #define LOG_TAG "dap_json_rpc_request"
 
-static char *s_url_service = NULL;
-
 struct exec_cmd_request {
     dap_client_pvt_t * client_pvt;
 #ifdef DAP_OS_WINDOWS
@@ -26,14 +24,6 @@ enum ExecCmdRetCode {
     EXEC_CMD_ERR_UNKNOWN
 };
 
-int dap_json_rpc_request_init(const char *a_url_service)
-{
-    if (s_url_service)
-        return 1;
-    s_url_service = dap_strdup(a_url_service);
-    return 0;
-}
-
 static struct exec_cmd_request* s_exec_cmd_request_init(dap_client_pvt_t * a_client_pvt)
 {
     struct exec_cmd_request *l_exec_cmd_request = DAP_NEW_Z(struct exec_cmd_request);
@@ -296,39 +286,24 @@ char *dap_json_rpc_request_to_json_string(const dap_json_rpc_request_t *a_reques
 char *dap_json_rpc_http_request_serialize(dap_json_rpc_http_request_t *a_request, size_t *a_total_size)
 {
     *a_total_size = a_request->header.data_size + a_request->header.signs_size + sizeof(a_request->header);
-
-    char *a_output = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(char, *a_total_size, NULL),
-         *ptr = dap_mempcpy(a_output, &a_request->header, sizeof(a_request->header));
-
-    char *l_str = dap_json_rpc_request_to_json_string(a_request->request);
-    if (!l_str)
-        return DAP_DELETE(a_output), NULL;
-
-    ptr = dap_mempcpy(ptr, l_str, a_request->header.data_size);
-    DAP_DELETE(l_str);
-    memcpy(ptr, a_request->tsd_n_signs, a_request->header.signs_size);
-    return a_output;
+    return (char*)DAP_DUP_SIZE(a_request, *a_total_size);
 }
 
 dap_json_rpc_http_request_t *dap_json_rpc_http_request_deserialize(const void *data, size_t data_size)
 {
-    if (data_size < sizeof(dap_json_rpc_http_request_t))
+    __typeof__( (dap_json_rpc_http_request_t){0}.header ) l_hdr;
+    if (data_size < sizeof(l_hdr))
         return log_it(L_ERROR, "Data size is less than minimum: %zu < %zu",
                                data_size, sizeof(dap_json_rpc_http_request_t)),
                NULL;
-    __typeof__( (dap_json_rpc_http_request_t){0}.header ) l_hdr;
     memcpy(&l_hdr, data, sizeof(l_hdr));
-    if ( data_size < sizeof(dap_json_rpc_http_request_t) + l_hdr.data_size + l_hdr.signs_size )
+    if ( data_size < sizeof(l_hdr) + l_hdr.data_size + l_hdr.signs_size )
         return log_it(L_ERROR, "Data size is less than needed: %zu < %zu",
                                data_size, sizeof(dap_json_rpc_http_request_t) + l_hdr.data_size + l_hdr.signs_size),
                NULL;
 
-    dap_json_rpc_http_request_t *l_ret
-        = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_json_rpc_http_request_t, sizeof(dap_json_rpc_http_request_t) + l_hdr.signs_size, NULL);
-    l_ret->header = l_hdr;
-    l_ret->request = dap_json_rpc_request_from_json((char*)data + sizeof(l_ret->header));
-    if (l_hdr.signs_size)
-        memcpy(l_ret->tsd_n_signs, (byte_t*)data + sizeof(l_hdr) + l_hdr.data_size, l_hdr.signs_size);
+    dap_json_rpc_http_request_t *l_ret = (dap_json_rpc_http_request_t*)DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(byte_t, data_size + 1, NULL);
+    dap_mempcpy(l_ret, data, data_size);
     return l_ret;
 }
 
@@ -337,7 +312,6 @@ void dap_json_rpc_http_request_free(dap_json_rpc_http_request_t *a_http_request)
     if (!a_http_request)
         return;
 
-    dap_json_rpc_request_free(a_http_request->request);
     DAP_DELETE(a_http_request);
 }
 
@@ -348,19 +322,18 @@ dap_json_rpc_http_request_t *dap_json_rpc_request_sign_by_cert(dap_json_rpc_requ
         return log_it(L_ERROR, "Can't convert JSON-request to string!"), NULL;
     int l_len = strlen(l_str);
     dap_sign_t *l_sign = dap_cert_sign(a_cert, l_str, l_len, 0);
-    DAP_DELETE(l_str);
     if (!l_sign)
         return log_it(L_ERROR, "JSON request signing failed"), NULL;
     size_t l_sign_size = dap_sign_get_size(l_sign);
 
     dap_json_rpc_http_request_t *l_ret
-        = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_json_rpc_http_request_t, sizeof(dap_json_rpc_http_request_t) + l_sign_size, NULL, l_sign);
+        = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_json_rpc_http_request_t, sizeof(dap_json_rpc_http_request_t) + l_len + 1 + l_sign_size, NULL, l_sign);
     *l_ret = (dap_json_rpc_http_request_t) {
         .header.data_size = l_len + 1,
         .header.signs_size = l_sign_size,
-        .request = a_request
     };
-    memcpy(l_ret->tsd_n_signs, l_sign, l_sign_size);
+    byte_t* l_cur =  (byte_t*)dap_strncpy((char*)l_ret->request_n_signs, l_str, l_len);
+    dap_mempcpy(l_cur + 1, l_sign, l_sign_size);
     return DAP_DELETE(l_sign), l_ret;
 }
 
diff --git a/net/server/json_rpc/rpc_core/src/dap_json_rpc_request_handler.c b/net/server/json_rpc/rpc_core/src/dap_json_rpc_request_handler.c
index 1bf488d5e0f4b7c1de2d04ec50a4266aa4aad7a3..a36e4f41af42fc451e323fec8d9e7c8b3a43dd3b 100644
--- a/net/server/json_rpc/rpc_core/src/dap_json_rpc_request_handler.c
+++ b/net/server/json_rpc/rpc_core/src/dap_json_rpc_request_handler.c
@@ -53,22 +53,26 @@ char * dap_json_rpc_request_handler(const char * a_request,  size_t a_request_si
         log_it(L_ERROR, "Can't read request");
         return NULL;
     }
-    char * l_data_str = dap_json_rpc_request_to_json_string(l_http_request->request);
+
+    char * l_data_str = DAP_NEW_Z_COUNT(char, l_http_request->header.data_size);
+    dap_mempcpy(l_data_str, l_http_request->request_n_signs, l_http_request->header.data_size);
+
     dap_hash_fast_t l_sign_pkey_hash;
     bool l_sign_correct = false;
-    dap_sign_t * l_sign = (dap_sign_t*)(l_http_request->tsd_n_signs);
+    dap_sign_t * l_sign = (dap_sign_t*)DAP_DUP_SIZE(l_http_request->request_n_signs + l_http_request->header.data_size, l_http_request->header.signs_size);
     dap_sign_get_pkey_hash(l_sign, &l_sign_pkey_hash);
     l_sign_correct =  dap_check_node_pkey_in_map(&l_sign_pkey_hash);
     if (l_sign_correct)
-        l_sign_correct = !dap_sign_verify_all(l_sign, l_http_request->header.signs_size, l_data_str, sizeof(l_data_str));
+        l_sign_correct = !dap_sign_verify_all(l_sign, l_http_request->header.signs_size, l_data_str, strlen(l_data_str));
     if (!l_sign_correct) {
-        dap_json_rpc_response_t* l_no_rights_res = dap_json_rpc_response_create("You have no rights", TYPE_RESPONSE_STRING, l_http_request->request->id);
+        dap_json_rpc_response_t* l_no_rights_res = dap_json_rpc_response_create("You have no rights", TYPE_RESPONSE_STRING, 0); // def id
         char * l_no_rights_res_str = dap_json_rpc_response_to_string(l_no_rights_res);
         dap_json_rpc_http_request_free(l_http_request);
+        DAP_DEL_MULTY(l_sign);
         return l_no_rights_res_str;
     }
     char* l_response = dap_cli_cmd_exec(l_data_str);
     dap_json_rpc_http_request_free(l_http_request);
-    DAP_DEL_MULTY(l_data_str);
+    DAP_DEL_MULTY(l_data_str, l_sign);
     return l_response;
 }
diff --git a/net/server/json_rpc/src/dap_json_rpc.c b/net/server/json_rpc/src/dap_json_rpc.c
index 303ac918a052c8fcfe5c430bbea7e8488b4da316..b42d2bb9ed781b10733001028915105224975069 100644
--- a/net/server/json_rpc/src/dap_json_rpc.c
+++ b/net/server/json_rpc/src/dap_json_rpc.c
@@ -74,7 +74,6 @@ int dap_json_rpc_init(dap_server_t* a_http_server, dap_config_t *a_config)
     }
 
     dap_json_rpc_map_init(a_config);
-    dap_json_rpc_request_init("/exec_cmd");
     dap_http_simple_proc_add(l_http, "/exec_cmd", 24000, dap_json_rpc_http_proc);
     return 0;
 }
@@ -142,10 +141,16 @@ void dap_json_rpc_http_proc(dap_http_simple_t *a_http_simple, void *a_arg)
         char * l_res_str = dap_json_rpc_request_handler(l_dg->request, l_dg->request_size);
         if (l_res_str) {
             enc_http_reply(l_dg, l_res_str, strlen(l_res_str));
+            DAP_DELETE(l_res_str);
         } else {
-            enc_http_reply(l_dg, "Wrong request", strlen("Wrong request"));
+            json_object* l_json_obj_res = json_object_new_array();
+            json_object_array_add(l_json_obj_res, json_object_new_string("Wrong request"));
+            const char * l_json_str_res = json_object_to_json_string(l_json_obj_res);
+            enc_http_reply(l_dg, l_json_str_res, strlen(l_json_str_res));
+            json_object_put(l_json_obj_res);
+            DAP_DELETE(l_json_str_res);
+            log_it(L_ERROR,"Wrong request");
         }
-        DAP_DEL_Z(l_res_str);
         *return_code = Http_Status_OK;
         enc_http_reply_encode(a_http_simple,l_dg);
         enc_http_delegate_delete(l_dg);