diff --git a/CMakeLists.txt b/CMakeLists.txt
index 87f693ce8f15040dec97208f3d0ec55173b55224..a7a98f61469e8f8fcd5b097ead26a764fba887cf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@ endif()
 if(NOT DEFINED CELLFRAME_MODULES)
     include (dap-sdk/cmake/OS_Detection.cmake)
 
-    set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-esbocs cs-none srv-app srv-app-db srv-datum srv-stake srv-voting srv-bridge srv-xchange")
+    set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-block-pos cs-esbocs cs-none srv-app srv-app-db srv-datum srv-stake srv-voting srv-bridge srv-xchange")
 
     if(LINUX OR DARWIN)
         set(CELLFRAME_MODULES "${CELLFRAME_MODULES} srv-vpn")
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 3b4079665a1c524cb670301839d79682a042ca25..b177cae7600f4d7ac61547dded161a7437ab548e 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -49,11 +49,6 @@ if (CELLFRAME_MODULES MATCHES "cs-dag-poa")
     add_subdirectory(consensus/dag-poa)
 endif()
 
-# DAG PoS
-if (CELLFRAME_MODULES MATCHES "cs-dag-pos")
-    add_subdirectory(consensus/dag-pos)
-endif()
-
 # Consensus type blocks
 if (CELLFRAME_MODULES MATCHES "cs-block-")
     add_subdirectory(type/blocks)
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 11f1cb0ac4b143b835bb8a303eceefd4e1028e26..2fec03b9320c1ed8d781fc2adfbdcd6e7342ce50 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -85,7 +85,7 @@ static void s_callback_delete(dap_chain_cs_dag_t * a_dag);
 static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg);
 static void s_poa_round_clean(void *a_arg);
 static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_cfg);
-static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_dag_event, size_t a_dag_event_size);
+static int s_callback_event_verify(dap_chain_cs_dag_t *a_dag, dap_chain_cs_dag_event_t *a_dag_event, dap_hash_fast_t *a_event_hash);
 static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a_dag, dap_chain_datum_t * a_datum,
                                                           dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count, size_t* a_event_size);
 static bool s_callback_round_event_to_chain(struct round_timer_arg *a_arg);
@@ -100,6 +100,7 @@ static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply);
 
 static bool s_seed_mode = false;
 static dap_interval_timer_t s_poa_round_timer = NULL;
+static bool s_debug_more = false;
 
 /**
  * @brief
@@ -115,7 +116,7 @@ int dap_chain_cs_dag_poa_init()
     dap_cli_server_cmd_add ("dag_poa", s_cli_dag_poa, "DAG PoA commands",
         "dag_poa event sign -net <net_name> [-chain <chain_name>] -event <event_hash> [-H {hex | base58(default)}]\n"
             "\tSign event <event hash> in the new round pool with its authorize certificate\n\n");
-
+    s_debug_more = dap_config_get_item_bool_default(g_config, "dag", "debug_more", s_debug_more);
     return 0;
 }
 
@@ -492,7 +493,9 @@ static bool s_round_event_ready_minimum_check(dap_chain_cs_dag_t *a_dag, dap_cha
                a_event_hash_hex_str, a_event->header.signs_count, l_poa_pvt->auth_certs_count_verify);
         return false;
     }
-    int l_ret_event_verify = s_callback_event_verify(a_dag, a_event, a_event_size);
+    dap_hash_fast_t l_event_hash;
+    dap_chain_hash_fast_from_hex_str(a_event_hash_hex_str, &l_event_hash);
+    int l_ret_event_verify = s_callback_event_verify(a_dag, a_event, &l_event_hash);
     if (l_ret_event_verify == 0)
         return true;
     log_it(L_ERROR, "Round auto-complete error! Event %s is not passing consensus verification, ret code %d\n",
@@ -926,45 +929,30 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
  * @param a_dag_event_size size_t size of event object
  * @return int
  */
-static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event, size_t a_event_size)
+static int s_callback_event_verify(dap_chain_cs_dag_t *a_dag, dap_chain_cs_dag_event_t *a_event, dap_hash_fast_t *a_event_hash)
 {
-
-    dap_chain_cs_dag_poa_pvt_t * l_poa_pvt = PVT ( DAP_CHAIN_CS_DAG_POA( a_dag ) );
-    size_t l_offset_from_beginning = dap_chain_cs_dag_event_calc_size_excl_signs(a_event, a_event_size);
-    if( l_offset_from_beginning >= a_event_size){
-        log_it(L_WARNING,"Incorrect size with event %p: caled size excl signs %zd is bigger or equal then event size %zd",
-               a_event, l_offset_from_beginning, a_event_size);
-        return -7; // Incorrest size
-    }
+    dap_chain_cs_dag_poa_pvt_t *l_poa_pvt = PVT ( DAP_CHAIN_CS_DAG_POA( a_dag ) );
+    size_t l_offset_from_beginning = dap_chain_cs_dag_event_calc_size_excl_signs(a_event, 0);
+    size_t l_event_size = dap_chain_cs_dag_event_calc_size(a_event, 0);
     uint16_t l_certs_count_verify = l_poa_pvt->auth_certs_count_verify;
-    if (a_event->header.signs_count >= l_certs_count_verify) {
-        size_t l_signs_count = 0;
-        dap_sign_t **l_signs = dap_sign_get_unique_signs(((uint8_t*)a_event)+l_offset_from_beginning,
-                                                a_event_size-l_offset_from_beginning, &l_signs_count);
-
-        if (!l_signs_count){
-            log_it(L_ERROR, "No any signatures at all for event");
-            DAP_DELETE(l_signs);
-            return -2;
-        }
-
-        if ( l_signs_count < l_certs_count_verify ) {
-            log_it(L_ERROR, "Corrupted event: not enough signs: %zu of %hu", l_signs_count, l_certs_count_verify);
-            DAP_DELETE(l_signs);
-            return -1;
-        }
-
-        uint16_t l_signs_verified_count = 0;
-        int l_ret = 0;
+    if (a_event->header.signs_count < l_certs_count_verify) {
+        log_it(L_WARNING, "Wrong signatures number %hu with event %s", a_event->header.signs_count,
+                                            dap_hash_fast_to_str_static(a_event_hash));
+        return -2; // Wrong signatures number
+    }
+    size_t l_signs_count = a_event->header.signs_count;
+    dap_sign_t **l_signs = dap_sign_get_unique_signs((uint8_t *)a_event + l_offset_from_beginning,
+                                                     l_event_size - l_offset_from_beginning, &l_signs_count);
+    if (!l_signs_count) {
+        log_it(L_ERROR, "No any signatures at all for event");
+        DAP_DELETE(l_signs);
+        return -3;
+    }
+    uint16_t l_signs_verified_count = 0;
+    if (l_signs_count >= l_certs_count_verify) {
         uint16_t l_event_signs_count = a_event->header.signs_count;
-        for (size_t i=0; i<l_signs_count; i++) {
+        for (size_t i = 0; i < l_signs_count; i++) {
             dap_sign_t *l_sign = (dap_sign_t *)l_signs[i];
-            if (!dap_sign_verify_size(l_sign, a_event_size - l_offset_from_beginning)) {
-                log_it(L_WARNING,"Incorrect size with event %p", a_event);
-                l_ret = -3;
-                break;
-            }
-
             // Compare signature with auth_certs
             a_event->header.signs_count = i;
             for (uint16_t j = 0; j < l_poa_pvt->auth_certs_count; j++) {
@@ -977,31 +965,14 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
         }
         a_event->header.signs_count = l_event_signs_count;
         DAP_DELETE(l_signs);
-        if (l_signs_verified_count < l_certs_count_verify) {
-            dap_hash_fast_t l_event_hash;
-            dap_hash_fast(a_event, a_event_size, &l_event_hash);
-            char l_event_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
-            dap_hash_fast_to_str(&l_event_hash, l_event_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-            log_it(L_ERROR, "Corrupted event %s, not enough signs %hu from %hu",
-                            l_event_hash_str, l_signs_verified_count, l_certs_count_verify);
-            return l_ret ? l_ret : -4;
-        }
-        return 0;
-    }
-    else if (a_event->header.hash_count == 0){
-        dap_chain_hash_fast_t l_event_hash;
-        dap_chain_cs_dag_event_calc_hash(a_event,a_event_size, &l_event_hash);
-        if ( memcmp( &l_event_hash, &a_dag->static_genesis_event_hash, sizeof(l_event_hash) ) == 0 ){
+        if (l_signs_verified_count >= l_certs_count_verify)
             return 0;
-        }else{
-            log_it(L_WARNING,"Wrong genesis event %p: hash is not equels to what in config", a_event);
-            return -20; // Wrong signatures number
-        }
-    }
-    else{
-        log_it(L_WARNING,"Wrong signatures number with event %p", a_event);
-        return -2; // Wrong signatures number
     }
+    debug_if(s_debug_more, L_ERROR, "Event %s, not enough signs %hu from %hu",
+                                                    dap_hash_fast_to_str_static(a_event_hash),
+                                                    l_signs_count >= l_certs_count_verify ? l_signs_verified_count : (uint16_t)l_signs_count,
+                                                    l_certs_count_verify);
+    return -4;
 }
 
 dap_list_t *dap_chain_cs_dag_poa_get_auth_certs(dap_chain_t *a_chain, size_t *a_auth_certs_count, uint16_t *a_count_verify)
diff --git a/modules/consensus/dag-pos/CMakeLists.txt b/modules/consensus/dag-pos/CMakeLists.txt
deleted file mode 100644
index fd5b077250fb91362675f0fd85369ea739b8cc44..0000000000000000000000000000000000000000
--- a/modules/consensus/dag-pos/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-cmake_minimum_required(VERSION 3.10)
-project (dap_chain_cs_dag_pos)
-  
-file(GLOB DAP_CHAIN_CS_DAG_POS_SRCS *.c)
-file(GLOB DAP_CHAIN_CS_DAG_POS_HEADERS include/*.h)
-
-add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_CS_DAG_POS_SRCS} ${DAP_CHAIN_CS_DAG_POS_HEADERS})
-
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_cs_dag dap_chain_net_srv_stake)
-target_include_directories(${PROJECT_NAME} INTERFACE .)
-target_include_directories(${PROJECT_NAME} PUBLIC include)
-
-if (INSTALL_SDK)
-set_target_properties(${PROJECT_NAME}  PROPERTIES PUBLIC_HEADER "${DAP_CHAIN_CS_DAG_POS_HEADERS}")
-INSTALL(TARGETS ${PROJECT_NAME} 
-        LIBRARY DESTINATION lib/modules/consensus/dag-pos/
-        ARCHIVE DESTINATION lib/modules/consensus/dag-pos/
-        PUBLIC_HEADER DESTINATION include/modules/consensus/dag-pos/ 
-        )
-endif()
\ No newline at end of file
diff --git a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
deleted file mode 100644
index 33911b5a9683b2fdb1cba03e8610c58c3e2a16d0..0000000000000000000000000000000000000000
--- a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Authors:
- * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net>
- * DeM Labs Inc.   https://demlabs.net
- * Kelvin Project https://github.com/kelvinblockchain
- * Copyright  (c) 2017-2019
- * All rights reserved.
-
- This file is part of DAP (Distributed Applications Platform) the open source project
-
-    DAP (Distributed Applications Platform) is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    DAP is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdlib.h>
-
-#include "dap_chain_net.h"
-#include "dap_common.h"
-#include "dap_string.h"
-#include "dap_strfuncs.h"
-#include "dap_chain_cell.h"
-#include "dap_chain_cs.h"
-#include "dap_chain_cs_dag.h"
-#include "dap_chain_cs_dag_pos.h"
-#include "dap_chain_net_srv_stake_pos_delegate.h"
-#include "dap_chain_ledger.h"
-
-#define LOG_TAG "dap_chain_cs_dag_pos"
-
-typedef struct dap_chain_cs_dag_pos_pvt
-{
-    dap_enc_key_t *events_sign_key;
-    char ** tokens_hold;
-    uint64_t * tokens_hold_value;
-    size_t tokens_hold_size;
-    uint16_t confirmations_minimum;
-} dap_chain_cs_dag_pos_pvt_t;
-
-#define PVT(a) ((dap_chain_cs_dag_pos_pvt_t *) a->_pvt )
-
-static void s_callback_delete(dap_chain_cs_dag_t * a_dag);
-static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg);
-static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_cfg);
-static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_dag_event, size_t a_dag_event_size);
-static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a_dag, dap_chain_datum_t * a_datum,
-                                                          dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count, size_t *a_dag_event_size);
-
-/**
- * @brief dap_chain_cs_dag_pos_init
- * @return
- */
-int dap_chain_cs_dag_pos_init()
-{
-    dap_chain_cs_add ("dag_pos", s_callback_new );
-    return 0;
-}
-
-/**
- * @brief dap_chain_cs_dag_pos_deinit
- */
-void dap_chain_cs_dag_pos_deinit(void)
-{
-
-}
-
-/**
- * @brief s_cs_callback
- * @param a_chain
- * @param a_chain_cfg
- */
-static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
-{
-    dap_chain_cs_type_create("dag", a_chain, a_chain_cfg);
-    dap_chain_cs_dag_t *l_dag = DAP_CHAIN_CS_DAG ( a_chain );
-    dap_chain_cs_dag_pos_t *l_pos = DAP_NEW_Z( dap_chain_cs_dag_pos_t);
-    if (!l_pos) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
-        return -1;
-    }
-
-    char ** l_tokens_hold = NULL;
-    char ** l_tokens_hold_value_str = NULL;
-    uint16_t l_tokens_hold_size = 0;
-    uint16_t l_tokens_hold_value_size = 0;
-
-    l_dag->_inheritor = l_pos;
-    l_dag->callback_delete = s_callback_delete;
-    l_dag->callback_cs_verify = s_callback_event_verify;
-    l_dag->callback_cs_event_create = s_callback_event_create;
-    l_pos->_pvt = DAP_NEW_Z(dap_chain_cs_dag_pos_pvt_t);
-    dap_chain_cs_dag_pos_pvt_t *l_pos_pvt = PVT(l_pos);
-    if (!l_pos_pvt) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
-        goto lb_err;
-    }
-
-    l_tokens_hold = dap_config_get_array_str( a_chain_cfg,"dag-pos","tokens_hold",&l_tokens_hold_size);
-    l_tokens_hold_value_str = dap_config_get_array_str( a_chain_cfg,"dag-pos","tokens_hold_value",&l_tokens_hold_value_size);
-
-    if ( l_tokens_hold_size != l_tokens_hold_value_size ){
-        log_it(L_CRITICAL, "Entries tokens_hold and tokens_hold_value are different size!");
-        goto lb_err;
-    }
-    l_pos_pvt->confirmations_minimum = dap_config_get_item_uint16_default( a_chain_cfg,"dag-pos","confirmations_minimum",1);
-    l_pos_pvt->tokens_hold_size = l_tokens_hold_size;
-    l_pos_pvt->tokens_hold = DAP_NEW_Z_SIZE( char*, sizeof(char*) *
-                                             l_tokens_hold_size );
-    if (!l_pos_pvt->tokens_hold) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
-        goto lb_err;
-    }
-    l_pos_pvt->tokens_hold_value = DAP_NEW_Z_SIZE(uint64_t,
-                                                  (l_tokens_hold_value_size +1) *sizeof (uint64_t));
-    if (!l_pos_pvt->tokens_hold_value) {
-        log_it(L_CRITICAL, "%s", c_error_memory_alloc);
-        goto lb_err;
-    }
-    for (size_t i = 0; i < l_tokens_hold_value_size; i++){
-        l_pos_pvt->tokens_hold[i] = dap_strdup( l_tokens_hold[i] );
-        if ( ( l_pos_pvt->tokens_hold_value[i] =
-               strtoull(l_tokens_hold_value_str[i],NULL,10) ) == 0 ) {
-             log_it(L_CRITICAL, "Token %s has inproper hold value %"DAP_UINT64_FORMAT_U, l_pos_pvt->tokens_hold[i],
-                    l_pos_pvt->tokens_hold_value[i] );
-             goto lb_err;
-        }
-    }
-    l_dag->chain->callback_created = s_callback_created;
-    return 0;
-
-lb_err:
-    for (int i = 0; i < l_tokens_hold_size; i++) {
-        if (l_tokens_hold[i])
-            DAP_DELETE(l_tokens_hold[i]);
-    }
-    if (l_tokens_hold)
-        DAP_DELETE(l_tokens_hold);
-    if (l_pos_pvt->tokens_hold_value)
-        DAP_DELETE(l_pos_pvt->tokens_hold_value);
-    if (l_pos_pvt)
-        DAP_DELETE(l_pos_pvt);
-    if (l_pos)
-        DAP_DELETE(l_pos);
-    l_dag->_inheritor = NULL;
-    l_dag->callback_delete = NULL;
-    l_dag->callback_cs_verify = NULL;
-    return -1;
-
-}
-
-/**
- * @brief s_callback_created
- * @param a_chain
- * @param a_chain_cfg
- * @return
- */
-static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_cfg)
-{
-    dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG ( a_chain );
-    dap_chain_cs_dag_pos_t * l_pos = DAP_CHAIN_CS_DAG_POS( l_dag );
-
-    const char * l_sign_cert_str = NULL;
-    if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "dag-pos", "events-sign-cert")) != NULL) {
-        dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str);
-        if (l_sign_cert == NULL) {
-            log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str);
-        } else if (l_sign_cert->enc_key->priv_key_data) {
-            PVT(l_pos)->events_sign_key = l_sign_cert->enc_key;
-            log_it(L_NOTICE, "Loaded \"%s\" certificate to sign PoS events", l_sign_cert_str);
-        } else {
-            log_it(L_ERROR, "Certificate \"%s\" has no private key", l_sign_cert_str);
-        }
-    } else {
-        log_it(L_ERROR, "No sign certificate provided, can't sign any events");
-    }
-    return 0;
-}
-
-
-/**
- * @brief s_chain_cs_dag_callback_delete
- * @param a_dag
- */
-static void s_callback_delete(dap_chain_cs_dag_t * a_dag)
-{
-    dap_chain_cs_dag_pos_t * l_pos = DAP_CHAIN_CS_DAG_POS ( a_dag );
-
-    if ( l_pos->_pvt ) {
-        dap_chain_cs_dag_pos_pvt_t * l_pos_pvt = PVT ( l_pos );
-        DAP_DELETE ( l_pos_pvt);
-    }
-
-    if ( l_pos->_inheritor ) {
-       DAP_DELETE ( l_pos->_inheritor );
-    }
-}
-
-/**
- * @brief
- * create event
- * @param a_dag
- * @param a_datum
- * @param a_hashes
- * @param a_hashes_count
- * @param a_dag_event_size
- * @return dap_chain_cs_dag_event_t*
- */
-static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a_dag, dap_chain_datum_t * a_datum,
-                                                          dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count,
-                                                          size_t *a_dag_event_size)
-{
-    dap_return_val_if_fail(a_dag && a_dag->chain && DAP_CHAIN_CS_DAG_POS(a_dag) && a_datum, NULL);
-    dap_chain_cs_dag_pos_t * l_pos = DAP_CHAIN_CS_DAG_POS(a_dag);
-
-    if( PVT(l_pos)->events_sign_key == NULL) {
-        log_it(L_ERROR, "Can't sign event with events-sign-wallet in [dag-pos] section");
-        return NULL;
-    }
-    if(a_datum || (a_hashes && a_hashes_count)) {
-        dap_chain_cs_dag_event_t * l_event = dap_chain_cs_dag_event_new(a_dag->chain->id, a_dag->chain->cells->id, a_dag->round_current, a_datum,
-                                                                        PVT(l_pos)->events_sign_key, a_hashes, a_hashes_count, a_dag_event_size);
-        return l_event;
-    } else
-        return NULL;
-}
-
-/**
- * @brief
- * function makes event singing verification
- * @param a_dag dag object
- * @param a_dag_event dap_chain_cs_dag_event_t
- * @param a_dag_event_size size_t size of event object
- * @return int
- */
-static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_dag_event, size_t a_dag_event_size)
-{
-    dap_chain_cs_dag_pos_pvt_t * l_pos_pvt = PVT ( DAP_CHAIN_CS_DAG_POS( a_dag ) );
-
-    if (sizeof (a_dag_event->header)>= a_dag_event_size){
-        log_it(L_WARNING,"Incorrect size with event %p on chain %s", a_dag_event, a_dag->chain->name);
-        return  -7;
-    }
-    size_t l_offset_signs = dap_chain_cs_dag_event_calc_size_excl_signs(a_dag_event, a_dag_event_size);
-    if ( a_dag_event->header.signs_count >= l_pos_pvt->confirmations_minimum ){
-        uint16_t l_verified_num = 0;
-
-        for ( size_t l_sig_pos=0; l_sig_pos < a_dag_event->header.signs_count; l_sig_pos++ ){
-            dap_sign_t * l_sign = dap_chain_cs_dag_event_get_sign(a_dag_event, a_dag_event_size,l_sig_pos);
-            if ( l_sign == NULL){
-                log_it(L_WARNING, "Event is NOT signed with anything: sig pos %zu, event size %zu", l_sig_pos, a_dag_event_size);
-                return -4;
-            }
-
-            bool l_sign_size_correct = dap_sign_verify_size(l_sign, a_dag_event_size - l_offset_signs);
-            if (!l_sign_size_correct) {
-                log_it(L_WARNING, "Event's sign size is incorrect");
-                return -41;
-            }
-            size_t l_signs_total = a_dag_event->header.signs_count;
-            a_dag_event->header.signs_count = l_sig_pos;    // temporary change for sign verification
-            size_t l_dag_event_size_without_sign = dap_chain_cs_dag_event_calc_size_excl_signs(a_dag_event,a_dag_event_size);
-            int l_sign_verified = dap_sign_verify(l_sign, a_dag_event, l_dag_event_size_without_sign);
-            a_dag_event->header.signs_count = l_signs_total;
-            if (l_sign_verified) {
-                log_it(L_WARNING, "Event's sign is incorrect: code %d", l_sign_verified);
-                return -41;
-            }
-
-        }
-        // Check number
-        if ( l_verified_num >= l_pos_pvt->confirmations_minimum ){
-            // Passed all checks
-            return 0;
-        }else{
-            log_it(L_WARNING, "Wrong event: only %hu/%hu signs are valid", l_verified_num, l_pos_pvt->confirmations_minimum );
-            return -2;
-        }
-    }else{
-        log_it(L_WARNING,"Wrong signature number with event %p on chain %s", a_dag_event, a_dag->chain->name);
-        return -2; // Wrong signatures number
-    }
-}
diff --git a/modules/consensus/dag-pos/include/dap_chain_cs_dag_pos.h b/modules/consensus/dag-pos/include/dap_chain_cs_dag_pos.h
deleted file mode 100644
index db58e43bdad1ddae42d9b6c02402bea87729f4ea..0000000000000000000000000000000000000000
--- a/modules/consensus/dag-pos/include/dap_chain_cs_dag_pos.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Authors:
- * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net>
- * DeM Labs Inc.   https://demlabs.net
- * Kelvin Project https://github.com/kelvinblockchain
- * Copyright  (c) 2017-2018
- * All rights reserved.
-
- This file is part of DAP (Distributed Applications Platform) the open source project
-
-    DAP (Distributed Applications Platform) is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    DAP is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#pragma once
-#include "dap_chain_cs_dag.h"
-#include "dap_cert.h"
-
-typedef struct dap_chain_cs_dag_pos
-{
-    dap_chain_t * chain;
-    dap_chain_cs_dag_t * dag;
-    void * _pvt;
-    void * _inheritor;
-} dap_chain_cs_dag_pos_t;
-
-#define DAP_CHAIN_CS_DAG_POS(a) ( (dap_chain_cs_dag_pos_t *) (a)->_inheritor)
-
-
-int dap_chain_cs_dag_pos_init();
-void dap_chain_cs_dag_pos_deinit(void);
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 02d71f511d83e8fde1a5c5f151ed41d20f2bf93d..0ce700904af8229199d96890c481b74bc9d344d8 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -456,19 +456,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(a_chain);
     dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) a_atom;
 
-    dap_chain_cs_dag_event_item_t * l_event_item = DAP_NEW_Z(dap_chain_cs_dag_event_item_t);
-    if (!l_event_item) {
-        log_it(L_CRITICAL, "Memory allocation error");
-        return ATOM_REJECT;
-    }
-    pthread_mutex_t *l_events_mutex = &PVT(l_dag)->events_mutex;
-    l_event_item->event = l_event;
-    l_event_item->event_size = a_atom_size;
-    l_event_item->ts_added = dap_time_now();
-
     dap_chain_hash_fast_t l_event_hash = *a_atom_hash;
-    l_event_item->hash = l_event_hash;
-
     if(s_debug_more) {
         char l_event_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = { '\0' };
         dap_chain_hash_fast_to_str(&l_event_hash, l_event_hash_str, sizeof(l_event_hash_str));
@@ -496,8 +484,8 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     default:
         break;
     }
-
-    if ( !(l_event_item = DAP_NEW_Z(dap_chain_cs_dag_event_item_t)) ) {
+    dap_chain_cs_dag_event_item_t *l_event_item = DAP_NEW_Z(dap_chain_cs_dag_event_item_t);
+    if ( !l_event_item ) {
         log_it(L_CRITICAL, "%s", c_error_memory_alloc);
         pthread_mutex_unlock(&PVT(l_dag)->events_mutex);
         return ATOM_REJECT;
@@ -751,48 +739,28 @@ dap_chain_cs_dag_event_t* dap_chain_cs_dag_find_event_by_hash(dap_chain_cs_dag_t
     return l_event;
 }
 
-static bool s_event_verify_size(dap_chain_cs_dag_event_t *a_event, size_t a_event_size)
-{
-    if (sizeof(a_event->header) >= a_event_size) {
-        log_it(L_WARNING, "Size of atom is %zd that is equal or less then header %zd", a_event_size, sizeof(a_event->header));
-        return false;
-    }
-    size_t l_sign_offset = dap_chain_cs_dag_event_calc_size_excl_signs(a_event, a_event_size);
-    if (l_sign_offset >= a_event_size)
-        return false;
-    if (a_event->header.signs_count > UINT8_MAX)
-        return false;
-    uint8_t i;
-    for (i = 0; i < a_event->header.signs_count && l_sign_offset < a_event_size; ++i) {
-        dap_sign_t *l_sign = (dap_sign_t*)((uint8_t*)a_event + l_sign_offset);
-        l_sign_offset += dap_sign_get_size(l_sign);
-    }
-    if (i != a_event->header.signs_count) {
-        log_it(L_WARNING, "Malformed event! Only %d of claimed %d signs fit data size%s",
-               i, a_event->header.signs_count, l_sign_offset == a_event_size ? "" : ", incomplete sequence");
-
-    }
-    return l_sign_offset == a_event_size;
-}
-
 /**
  * @brief s_chain_callback_atom_verify Verify atomic element
  * @param a_chain
  * @param a_atom
  * @return
  */
-static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t  a_atom,size_t a_atom_size, dap_chain_hash_fast_t *a_atom_hash)
+static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t *a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_chain_hash_fast_t *a_atom_hash)
 {
     dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(a_chain);
     dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) a_atom;
     dap_chain_atom_verify_res_t res = ATOM_ACCEPT;
     pthread_mutex_t *l_events_mutex = &PVT(l_dag)->events_mutex;
+    if (a_atom_size < sizeof(dap_chain_cs_dag_event_t)) {
+        log_it(L_WARNING, "Too small event size %zu, less than event header", a_atom_size);
+        return ATOM_REJECT;
+    }
     if (l_event->header.version) {
-        debug_if(s_debug_more, L_WARNING, "Unsupported event version, possible corrupted event");
+        log_it(L_WARNING, "Unsupported event version, possible corrupted event");
         return ATOM_REJECT;
     }
     if (l_event->header.chain_id.uint64 != a_chain->id.uint64) {
-        debug_if(s_debug_more, L_WARNING, "Event from another chain, possible corrupted event");
+        log_it(L_WARNING, "Event from another chain, possible corrupted event");
         return ATOM_REJECT;
     }
     dap_chain_hash_fast_t l_event_hash = *a_atom_hash;
@@ -806,8 +774,8 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_
             return ATOM_ACCEPT;
         }
     }
-    if (!s_event_verify_size(l_event, a_atom_size)) {
-        debug_if(s_debug_more, L_WARNING,"Event size not equal to expected");
+    if (dap_chain_cs_dag_event_calc_size(l_event, a_atom_size) != a_atom_size) {
+        debug_if(s_debug_more, L_WARNING, "Event size not equal to expected");
         return  ATOM_REJECT;
     }
 
@@ -860,9 +828,8 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_
     }
 
     //consensus
-    if(res == ATOM_ACCEPT)
-        if(l_dag->callback_cs_verify ( l_dag, l_event,a_atom_size ))
-            res = ATOM_REJECT;
+    if (res == ATOM_ACCEPT && l_dag->callback_cs_verify(l_dag, l_event, a_atom_hash))
+        res = ATOM_REJECT;
 
     return res;
 }
@@ -1417,7 +1384,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                 size_t l_event_size = l_round_item->event_size;
                 dap_hash_fast(l_event, l_event_size, &l_event_hash);
                 int l_ret_event_verify;
-                if ( ( l_ret_event_verify = l_dag->callback_cs_verify (l_dag,l_event,l_event_size) ) !=0 ){// if consensus accept the event
+                if ( ( l_ret_event_verify = l_dag->callback_cs_verify(l_dag, l_event, &l_event_hash) ) !=0 ) {// if consensus accept the event
                     dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_EVENT_ERR,"Error! Event %s is not passing consensus verification, ret code %d\n",
                                               l_objs[i].key, l_ret_event_verify );
                     ret = -DAP_CHAIN_NODE_CLI_COM_DAG_EVENT_ERR;
diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c
index 8dd90470ede55e569c2113830e3023581073de8a..4402212cd531c7699be33a6d75aac0e7a1e28adc 100644
--- a/modules/type/dag/dap_chain_cs_dag_event.c
+++ b/modules/type/dag/dap_chain_cs_dag_event.c
@@ -95,6 +95,49 @@ dap_chain_cs_dag_event_t *dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id,
     return l_event_new;
 }
 
+/**
+ * @brief dap_chain_cs_dag_event_calc_size_excl_signs
+ * @param a_event
+ * @return
+ */
+size_t dap_chain_cs_dag_event_calc_size_excl_signs(dap_chain_cs_dag_event_t *a_event, size_t a_limit_size)
+{
+    dap_return_val_if_fail(a_event, 0);
+    if (a_limit_size && a_limit_size < sizeof(a_event->header))
+        return 0;
+    size_t l_hashes_size = a_event->header.hash_count * sizeof(dap_chain_hash_fast_t);
+    if (a_limit_size && a_limit_size < l_hashes_size + sizeof(a_event->header) + sizeof(dap_chain_datum_t))
+        return 0;
+    dap_chain_datum_t *l_datum = (dap_chain_datum_t*) (a_event->hashes_n_datum_n_signs + l_hashes_size);
+    size_t l_ret = dap_chain_datum_size(l_datum) + l_hashes_size + sizeof(a_event->header);
+    if (a_limit_size && a_limit_size < l_ret)
+        return 0;
+    return l_ret;
+}
+
+/**
+ * @brief dap_chain_cs_dag_event_calc_size
+ * @param a_event
+ * @return
+ */
+size_t dap_chain_cs_dag_event_calc_size(dap_chain_cs_dag_event_t *a_event, size_t a_limit_size)
+{
+    dap_return_val_if_fail(a_event, 0);
+    size_t l_signs_offset = dap_chain_cs_dag_event_calc_size_excl_signs(a_event, a_limit_size);
+    if (!l_signs_offset)
+        return 0;
+    byte_t *l_signs = (byte_t *)a_event + l_signs_offset;
+    size_t l_signs_size = 0;
+    for (uint16_t l_signs_passed = 0; l_signs_passed < a_event->header.signs_count; l_signs_passed++) {
+        dap_sign_t *l_sign = (dap_sign_t *)(l_signs + l_signs_size);
+        if (a_limit_size && a_limit_size < l_signs_offset + l_signs_size + sizeof(dap_sign_t))
+            return 0;
+        l_signs_size += dap_sign_get_size(l_sign);
+    }
+    size_t l_total_size = l_signs_offset + l_signs_size;
+    return a_limit_size && l_total_size > a_limit_size ? 0 : l_total_size;
+}
+
 /**
  * @brief dap_chain_cs_dag_event_sign_add
  * @param a_event
diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h
index 0043a3afbe2f1c151a2c3e558275ff9f0687403b..1020634067194f1684b3fb16e7197d3690456880 100644
--- a/modules/type/dag/include/dap_chain_cs_dag.h
+++ b/modules/type/dag/include/dap_chain_cs_dag.h
@@ -31,9 +31,9 @@
 
 typedef struct dap_chain_cs_dag dap_chain_cs_dag_t;
 
-typedef void (*dap_chain_cs_dag_callback_t)(dap_chain_cs_dag_t *);
+typedef void (*dap_chain_cs_dag_callback_t)(dap_chain_cs_dag_t *a_dag);
 typedef void (*dap_chain_cs_dag_callback_rc_ptr_t)(dap_chain_cs_dag_t *, int a_rc, void * a_arg);
-typedef int (*dap_chain_cs_dag_callback_event_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_t *,size_t);
+typedef int (*dap_chain_cs_dag_callback_event_t)(dap_chain_cs_dag_t *a_dag, dap_chain_cs_dag_event_t *a_event, dap_hash_fast_t *a_event_hash);
 
 typedef dap_chain_cs_dag_event_t * (*dap_chain_cs_dag_callback_event_create_t)(dap_chain_cs_dag_t *,
                                                                                dap_chain_datum_t *,
diff --git a/modules/type/dag/include/dap_chain_cs_dag_event.h b/modules/type/dag/include/dap_chain_cs_dag_event.h
index 0a5513912997e5a97ffa2bcb1512eafc2402df95..5f4d6a1c94255515bb77d0487764860e1457c3cb 100644
--- a/modules/type/dag/include/dap_chain_cs_dag_event.h
+++ b/modules/type/dag/include/dap_chain_cs_dag_event.h
@@ -90,47 +90,9 @@ bool dap_chain_cs_dag_event_sign_exists(dap_chain_cs_dag_event_t *a_event, size_
 bool dap_chain_cs_dag_event_round_sign_exists(dap_chain_cs_dag_event_round_item_t *a_round_item, dap_enc_key_t * a_key);
 dap_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event, size_t a_event_size, uint16_t a_sign_number);
 
-/**
- * @brief dap_chain_cs_dag_event_calc_size_excl_signs
- * @param a_event
- * @return
- */
-static inline size_t dap_chain_cs_dag_event_calc_size_excl_signs(dap_chain_cs_dag_event_t *a_event, size_t a_event_size)
-{
-    if (a_event_size < sizeof(a_event->header))
-        return 0;
-    size_t l_hashes_size = a_event->header.hash_count*sizeof(dap_chain_hash_fast_t);
-    if (a_event_size < l_hashes_size + sizeof(a_event->header))
-        return 0;
-    dap_chain_datum_t *l_datum = (dap_chain_datum_t*) (a_event->hashes_n_datum_n_signs + l_hashes_size);
-    size_t l_ret = dap_chain_datum_size(l_datum) + l_hashes_size + sizeof(a_event->header);
-    if (a_event_size < l_ret)
-        return 0;
-    return l_ret;
-}
+size_t dap_chain_cs_dag_event_calc_size_excl_signs(dap_chain_cs_dag_event_t *a_event, size_t a_limit_size);
+size_t dap_chain_cs_dag_event_calc_size(dap_chain_cs_dag_event_t *a_event, size_t a_limit_size);
 
-/**
- * @brief dap_chain_cs_dag_event_calc_size
- * @param a_event
- * @return
- */
-static inline size_t dap_chain_cs_dag_event_calc_size(dap_chain_cs_dag_event_t *a_event, size_t a_limit_size)
-{
-    if (!a_event || !a_limit_size)
-        return 0;
-    size_t l_signs_offset = dap_chain_cs_dag_event_calc_size_excl_signs(a_event, a_limit_size);
-    if (!l_signs_offset)
-        return 0;
-    byte_t *l_signs = (byte_t *)a_event + l_signs_offset;
-    size_t l_signs_size = 0;
-    for (uint16_t l_signs_passed = 0; l_signs_passed < a_event->header.signs_count; l_signs_passed++) {
-        dap_sign_t *l_sign = (dap_sign_t *)(l_signs + l_signs_size);
-        l_signs_size += dap_sign_get_size(l_sign);
-        if (a_limit_size < l_signs_offset + l_signs_size)
-            return 0;
-    }
-    return l_signs_offset + l_signs_size;
-}
 
 /**
  * @brief dap_chain_cs_dag_event_calc_hash