diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index 146a1dc8a09350dd6f2fb8aba0f044331f4c26bc..8412b79e584db73e41f71bb03eb3a902ce7c8cec 100644
--- a/modules/chain/dap_chain_cell.c
+++ b/modules/chain/dap_chain_cell.c
@@ -494,7 +494,7 @@ int dap_chain_cell_load(dap_chain_t *a_chain, dap_chain_cell_t *a_cell)
                 break;
             }
             l_pos += sizeof(uint64_t) + ( l_read = fread((void*)l_element, 1, l_el_size, a_cell->file_storage) );
-            a_chain->load_progress = (int)((double)l_pos/l_full_size * 100 + 0.5);
+            a_chain->load_progress = (int)((float)l_pos/l_full_size * 100 + 0.5);
             if (l_read != l_el_size) {
                 log_it(L_ERROR, "Read only %lu of %zu bytes, stop cell loading", l_read, l_el_size);
                 DAP_DELETE(l_element);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index d42f9997a549033e045f6a64bdd54c96a3de5b72..a0265e610a8d9620c9eeda3e32b7649e0a6075c7 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -703,6 +703,28 @@ static dap_chain_net_t *s_net_new(const char *a_net_name, dap_config_t *a_cfg)
     return l_ret;
 }
 
+bool s_net_disk_load_notify_callback(UNUSED_ARG void *a_arg) {
+    json_object *json_obj = json_object_new_object();
+    json_object_object_add(json_obj, "class", json_object_new_string("nets_init"));
+    json_object *l_jobj_nets = json_object_new_object();
+    for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next) {
+        json_object *json_chains = json_object_new_object();
+        for (dap_chain_t *l_chain = net->pub.chains; l_chain; l_chain = l_chain->next) {
+            json_object *l_jobj_chain_info = json_object_new_object();
+            json_object_object_add(l_jobj_chain_info, "count_atoms", json_object_new_int(l_chain->callback_count_atom(l_chain)));
+            json_object_object_add(l_jobj_chain_info, "load_process", json_object_new_int(l_chain->load_progress));
+            json_object_object_add(json_chains, l_chain->name, l_jobj_chain_info);
+            log_it(L_DEBUG, "Loading net \"%s\", chain \"%s\", ID 0x%016"DAP_UINT64_FORMAT_x " [%d%%]",
+                            net->pub.name, l_chain->name, l_chain->id.uint64, l_chain->load_progress);
+        }
+        json_object_object_add(l_jobj_nets, net->pub.name, json_chains);
+    }
+    json_object_object_add(json_obj, "nets", l_jobj_nets);
+    dap_notify_server_send_mt(json_object_get_string(json_obj));
+    json_object_put(json_obj);
+    return true;
+}
+
 /**
  * @brief
  * load network config settings
@@ -716,11 +738,13 @@ void dap_chain_net_load_all()
         pthread_mutex_unlock(&s_net_cond_lock);
         return;
     }
+    dap_timerfd_t *l_load_notify_timer = dap_timerfd_start(5000, (dap_timerfd_callback_t)s_net_disk_load_notify_callback, NULL);
     for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next)
         dap_proc_thread_callback_add(NULL, s_net_load, net);
     while (s_net_loading_count)
         pthread_cond_wait(&s_net_cond, &s_net_cond_lock);
     pthread_mutex_unlock(&s_net_cond_lock);
+    dap_timerfd_delete_mt(l_load_notify_timer->worker, l_load_notify_timer->esocket_uuid);
 }
 
 dap_string_t* dap_cli_list_net()