diff --git a/dap_chain_cs_dag_pos.c b/dap_chain_cs_dag_pos.c
index 0025a90d4107899951ee291ef81084357da09700..a37e7a5fabb1e1a0cbab42cec4b692d894fd3baf 100755
--- a/dap_chain_cs_dag_pos.c
+++ b/dap_chain_cs_dag_pos.c
@@ -220,11 +220,10 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
         return -3;
 
     if ( a_dag_event->header.signs_count >= l_pos_pvt->confirmations_minimum ){
-        int l_ret = 0;
+        uint16_t l_verified_num = 0;
+        dap_chain_addr_t l_addr = { 0 };
 
-        // TODO fix verify for signs more than one
         for ( size_t l_sig_pos=0; l_sig_pos < a_dag_event->header.signs_count; l_sig_pos++ ){
-            dap_chain_addr_t l_addr = { 0 };
             dap_sign_t * l_sign = dap_chain_cs_dag_event_get_sign(a_dag_event,0);
             if ( l_sign == NULL){
                 log_it(L_WARNING, "Event is NOT signed with anything");
@@ -240,6 +239,7 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
             dap_chain_addr_fill (&l_addr,l_key,&a_dag->chain->net_id );
             dap_enc_key_delete (l_key); // TODO cache all this operations to prevent useless memory copy ops
 
+            /*
             dap_chain_datum_t *l_datum = dap_chain_cs_dag_event_get_datum(a_dag_event);
             // transaction include emission?
             bool l_is_emit = false;
@@ -254,18 +254,32 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
             }
             // if emission then the wallet can be with zero balance
             if(l_is_emit)
-                return 0;
+                return 0;*/
 
+            bool l_is_enough_balance = false;
             for (size_t i =0; i <l_pos_pvt->tokens_hold_size; i++){
-                if ( dap_chain_ledger_calc_balance ( a_dag->chain->ledger , &l_addr, l_pos_pvt->tokens_hold[i] ) >= l_pos_pvt->tokens_hold_value[i]  )
-                    return 0;
+                if ( dap_chain_ledger_calc_balance ( a_dag->chain->ledger , &l_addr, l_pos_pvt->tokens_hold[i] ) >= l_pos_pvt->tokens_hold_value[i]  ){
+                    l_verified_num++;
+                    l_is_enough_balance = true;
+                    break;
+                }
             }
-            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;
+            if (! l_is_enough_balance ){
+                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;
+            }
+        }
+
+        // Check number
+        if ( l_verified_num >= l_pos_pvt->confirmations_minimum ){
+            // Passed all checks
+            return 0;
+        }else{
+            log_it(L_WARNING, "Wrong event: only %su/%su signs are valid", l_verified_num, l_pos_pvt->confirmations_minimum );
+            return -2;
         }
-        return l_ret;
     }else
        return -2; // Wrong signatures number
 }