diff --git a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
index 2eb04c7ae82ff0cfde884c2af04d2e1d4dfe1ff7..a9bc51329619874adb7c770098624a7646ed7a93 100644
--- a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
+++ b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
@@ -275,7 +275,7 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
                 char *l_addr_str = dap_chain_addr_to_str(&l_addr);
                 log_it(L_WARNING, "Verify of event is false, because bal=0 for addr=%s", l_addr_str);
                 DAP_DELETE(l_addr_str);
-                return -1;
+                return 0; //-1;
             }
         }
 
diff --git a/modules/net/CMakeLists.txt b/modules/net/CMakeLists.txt
index 856e4c5e3b9cf32c5c2d03f059adac498f9d3b81..09cbb1cf9633cd5724c651b7ce5f27f3a27b01e9 100644
--- a/modules/net/CMakeLists.txt
+++ b/modules/net/CMakeLists.txt
@@ -39,12 +39,13 @@ endif()
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRCS} ${DAP_CHAIN_NET_HEADERS} ${IPUTILS_SRCS} ${IPUTILS_HEADERS})
 
 if(WIN32)
-  target_link_libraries(dap_chain_net dap_core dap_crypto dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_chain dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db )
+  target_link_libraries(dap_chain_net dap_core dap_crypto dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_chain dap_chain_wallet dap_chain_net_srv
+                            dap_chain_mempool dap_chain_global_db dap_chain_net_srv_stake)
 endif()
 
 if(UNIX)
     target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_chain
-      dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db
+      dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db dap_chain_net_srv_stake
       resolv
       )
 endif()
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index cc09de5d242098665f42c8779b4b8db26bc9737d..e55befd9d9a5ec51fa1fdb537c05c36369af8f8e 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -67,6 +67,7 @@
 #include "dap_chain_node_cli.h"
 #include "dap_chain_node_cli_cmd.h"
 #include "dap_chain_ledger.h"
+#include "dap_chain_net_srv_stake.h"
 
 #include "dap_chain_global_db.h"
 #include "dap_chain_global_db_remote.h"
@@ -263,28 +264,34 @@ static void s_gbd_history_callback_notify (void * a_arg, const char a_op_code, c
             }
         }*/
     }
-    if (!dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", false)) {
+    if (!a_value || !dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", false)) {
         return;
     }
     dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg;
     char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net);
-    if (strcmp(a_group, l_gdb_group_str)) {
+    if (!strcmp(a_group, l_gdb_group_str)) {
         dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)a_value;
         if (l_order->version == 1) {
             dap_chain_global_db_gr_del((char *)a_key, a_group);
         } else {
             dap_sign_t *l_sign = (dap_sign_t *)&l_order->ext[l_order->ext_size];
+            if (!dap_sign_verify(l_sign, l_order, sizeof(dap_chain_net_srv_order_t) + l_order->ext_size)) {
+                dap_chain_global_db_gr_del((char *)a_key, a_group);
+                DAP_DELETE(l_gdb_group_str);
+                return;
+            }
             dap_chain_hash_fast_t l_pkey_hash;
             if (!dap_sign_get_pkey_hash(l_sign, &l_pkey_hash)) {
+                dap_chain_global_db_gr_del((char *)a_key, a_group);
+                DAP_DELETE(l_gdb_group_str);
                 return;
             }
-            dap_chain_addr_t l_addr = {0};
+            dap_chain_addr_t l_addr = {};
             dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, l_net->pub.id);
             uint64_t l_solvency = dap_chain_ledger_calc_balance(l_net->pub.ledger, &l_addr, l_order->price_ticker);
-            if (l_solvency < l_order->price) {
+            if (l_solvency < l_order->price && !dap_chain_net_srv_stake_key_delegated(&l_addr)) {
                 dap_chain_global_db_gr_del((char *)a_key, a_group);
             }
-            // TODO check for delegated key
         }
         DAP_DELETE(l_gdb_group_str);
     }
diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c
index 2dc64bfa7c705ddaac0323959680aed83c9a7cf6..fb49da89f356e0dddb24ecebce8268eea3884516 100644
--- a/modules/service/stake/dap_chain_net_srv_stake.c
+++ b/modules/service/stake/dap_chain_net_srv_stake.c
@@ -124,6 +124,24 @@ bool dap_chain_net_srv_stake_verificator(dap_chain_tx_out_cond_t *a_cond, dap_ch
     return false;
 }
 
+bool dap_chain_net_srv_stake_key_delegated(dap_chain_addr_t *a_addr)
+{
+    if (!s_srv_stake) {
+        return true;
+    }
+    while (!s_srv_stake->initialized);
+
+    if (!a_addr) {
+        return false;
+    }
+    dap_chain_net_srv_stake_item_t *l_stake = NULL;
+    HASH_FIND(hh, s_srv_stake->itemlist, a_addr, sizeof(dap_chain_addr_t), l_stake);
+    if (l_stake) { // public key delegated for this network
+        return true;
+    }
+    return false;
+}
+
 bool dap_chain_net_srv_stake_validator(dap_chain_addr_t *a_addr, dap_chain_datum_tx_t *a_tx)
 {
     if (!s_srv_stake) {
@@ -139,33 +157,36 @@ bool dap_chain_net_srv_stake_validator(dap_chain_addr_t *a_addr, dap_chain_datum
     if (l_stake == NULL) { // public key not delegated for this network
         return true;
     }
+    dap_chain_tx_sig_t *l_tx_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_SIG, NULL);
+    dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig);
+    dap_chain_hash_fast_t l_pkey_hash = {};
+    dap_sign_get_pkey_hash(l_sign, &l_pkey_hash);
+    dap_chain_addr_t l_owner_addr = {};
+    dap_chain_addr_fill(&l_owner_addr, l_sign->header.type, &l_pkey_hash, a_addr->net_id);
     uint64_t l_outs_sum = 0, l_fee_sum = 0;
     dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(a_tx, TX_ITEM_TYPE_OUT_ALL, NULL);
     uint32_t l_out_idx_tmp = 0; // current index of 'out' item
     for (dap_list_t *l_list_tmp = l_list_out_items; l_list_tmp; l_list_tmp = dap_list_next(l_list_tmp), l_out_idx_tmp++) {
         dap_chain_tx_item_type_t l_type = *(uint8_t *)l_list_tmp->data;
-        if (l_type == TX_ITEM_TYPE_OUT_COND) {
-            dap_chain_tx_out_cond_t *l_out_cond = (dap_chain_tx_out_cond_t *)l_list_tmp->data;
-            l_outs_sum += l_out_cond->header.value;
-        }
         if (l_type == TX_ITEM_TYPE_OUT) {
             dap_chain_tx_out_t *l_out = (dap_chain_tx_out_t *)l_list_tmp->data;
-            if (memcmp(&l_stake->addr_fee, &l_out->addr, sizeof(dap_chain_addr_t))) {
+            if (!memcmp(&l_stake->addr_fee, &l_out->addr, sizeof(dap_chain_addr_t))) {
                 l_fee_sum += l_out->header.value;
-            } else {
+            } else if (memcmp(&l_owner_addr, &l_out->addr, sizeof(dap_chain_addr_t))) {
                 l_outs_sum += l_out->header.value;
             }
-        } else { // TX_ITEM_TYPE_OUT_EXT
+        }
+        if (l_type == TX_ITEM_TYPE_OUT_EXT) {
             dap_chain_tx_out_ext_t *l_out_ext = (dap_chain_tx_out_ext_t *)l_list_tmp->data;
-            if (memcmp(&l_stake->addr_fee, &l_out_ext->addr, sizeof(dap_chain_addr_t))) {
+            if (!memcmp(&l_stake->addr_fee, &l_out_ext->addr, sizeof(dap_chain_addr_t))) {
                 l_fee_sum += l_out_ext->header.value;
-            } else {
+            } else if (memcmp(&l_owner_addr, &l_out_ext->addr, sizeof(dap_chain_addr_t))) {
                 l_outs_sum += l_out_ext->header.value;
             }
         }
     }
     dap_list_free(l_list_out_items);
-    if (l_outs_sum * l_stake->fee_value / 100.0 < l_fee_sum) {
+    if (l_fee_sum < l_outs_sum * l_stake->fee_value / 100.0) {
         return false;
     }
     return true;
@@ -440,7 +461,6 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             l_stake->fee_value = l_fee;
             // Create the order & put it to GDB
             char *l_order_hash_str = s_stake_order_create(l_stake, l_cert->enc_key);
-            dap_cert_delete(l_cert);
             if (l_order_hash_str) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Successfully created order %s", l_order_hash_str);
                 DAP_DELETE(l_order_hash_str);
@@ -545,7 +565,6 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             // Create the order & put it to GDB
             dap_chain_net_srv_order_delete_by_hash_str(l_net, l_order_hash_str);
             l_order_hash_str = s_stake_order_create(l_stake, l_cert->enc_key);
-            dap_cert_delete(l_cert);
             if (l_order_hash_str) {
                 dap_chain_node_cli_set_reply_text(a_str_reply, "Successfully created order %s", l_order_hash_str);
                 DAP_DELETE(l_order_hash_str);
diff --git a/modules/service/stake/include/dap_chain_net_srv_stake.h b/modules/service/stake/include/dap_chain_net_srv_stake.h
index 34b16264371774ecd25e3c475b61de7d0c30c8c3..4a89391531b1a3fa7881344ba2ce6fc53f405750 100644
--- a/modules/service/stake/include/dap_chain_net_srv_stake.h
+++ b/modules/service/stake/include/dap_chain_net_srv_stake.h
@@ -57,3 +57,4 @@ int dap_chain_net_srv_stake_init();
 void dap_chain_net_srv_stake_deinit();
 bool dap_chain_net_srv_stake_verificator(dap_chain_tx_out_cond_t *a_cond, dap_chain_datum_tx_t *a_tx);
 bool dap_chain_net_srv_stake_validator(dap_chain_addr_t *a_addr, dap_chain_datum_tx_t *a_tx);
+bool dap_chain_net_srv_stake_key_delegated(dap_chain_addr_t *a_addr);
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
index 6d328957f96aa402776db57aa281638d9dd1240b..10a4b262f1a35cea817c94501bb248ece81d1831 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
@@ -1,4 +1,5 @@
 #include <dap_chain_node_cli.h>
+#include "dap_chain_node_cli_cmd.h"
 #include "dap_chain_net_srv_vpn_cmd.h"
 #include "dap_chain_net_vpn_client.h"