diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 5adf7d6c33f70594a11e5edc6789301bdf0a2b1c..ef958f750659bdcd7297e82aba4814e9cb462b75 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -130,7 +130,6 @@ struct precached_key {
     uint64_t frequency;
     dap_hash_fast_t pkey_hash;
     size_t pkey_size;
-    struct precached_key *prev, *next;
     byte_t sign_pkey[];
 };
 
@@ -162,7 +161,7 @@ typedef struct dap_chain_esbocs_pvt {
     uint16_t min_validators_count;
     bool check_signs_structure;
     // Internal cache
-    struct precached_key *precached_keys;
+    dap_list_t *precached_keys;
 } dap_chain_esbocs_pvt_t;
 
 #define PVT(a) ((dap_chain_esbocs_pvt_t *)a->_pvt)
@@ -2747,11 +2746,13 @@ static size_t s_callback_block_sign(dap_chain_cs_blocks_t *a_blocks, dap_chain_b
     return dap_chain_block_sign_add(a_block_ptr, a_block_size, l_esbocs_pvt->blocks_sign_key);
 }
 
-static uint64_t s_get_precached_key_hash(struct precached_key **a_precached_keys_list, dap_sign_t *a_source_sign, dap_hash_fast_t *a_result)
+static uint64_t s_get_precached_key_hash(dap_list_t **a_precached_keys_list, dap_sign_t *a_source_sign, dap_hash_fast_t *a_result)
 {
     bool l_found = false;
     struct precached_key *l_key = NULL;
-    DL_FOREACH(*a_precached_keys_list, l_key) {
+    dap_list_t *l_cur;
+    for (l_cur = *a_precached_keys_list; l_cur; l_cur = l_cur->next) {
+        l_key = (struct precached_key*)l_cur->data;
         if (l_key->pkey_size == a_source_sign->header.sign_pkey_size &&
                 !memcmp(l_key->sign_pkey, dap_sign_get_pkey(a_source_sign, NULL), l_key->pkey_size)) {
             l_found = true;
@@ -2760,31 +2761,27 @@ static uint64_t s_get_precached_key_hash(struct precached_key **a_precached_keys
         }
     }
     if (l_found) {
-        struct precached_key *l_key_swap = NULL;
-        DL_FOREACH(*a_precached_keys_list, l_key_swap) {
-            if (l_key_swap == l_key)
-                break;
-            if (l_key_swap->frequency < l_key->frequency) {
-                struct precached_key *l_swapper = l_key->next;
-                l_key->next = l_key_swap->next;
-                l_key_swap->next = l_swapper;
-                l_swapper = l_key->prev;
-                l_key->prev = l_key_swap->prev;
-                l_key_swap->prev = l_swapper;
+        while (l_cur != *a_precached_keys_list) {
+            struct precached_key* l_prev_key = (struct precached_key*)l_cur->prev->data;
+            if (l_key->frequency > l_prev_key->frequency) {
+                l_cur->prev->data = l_cur->data;
+                l_cur->data = l_prev_key;
+                l_key = l_prev_key;
+                l_cur = l_cur->prev;
+            } else
                 break;
-            }
         }
         if (a_result)
             *a_result = l_key->pkey_hash;
         return l_key->frequency;
     }
-    struct precached_key *l_key_new = DAP_NEW_SIZE(struct precached_key,
+    struct precached_key *l_key_new = DAP_NEW_Z_SIZE(struct precached_key,
                                                    sizeof(struct precached_key) + a_source_sign->header.sign_pkey_size);
     l_key_new->pkey_size = a_source_sign->header.sign_pkey_size;
     l_key_new->frequency = 0;
     memcpy(l_key_new->sign_pkey, dap_sign_get_pkey(a_source_sign, NULL), l_key_new->pkey_size);
     dap_sign_get_pkey_hash(a_source_sign, &l_key_new->pkey_hash);
-    DL_APPEND(*a_precached_keys_list, l_key_new);
+    *a_precached_keys_list = dap_list_append(*a_precached_keys_list, l_key_new);
     if (a_result)
         *a_result = l_key_new->pkey_hash;
     return 0;