diff --git a/cellframe-sdk b/cellframe-sdk
index 807aee87a16b623be9c32b6bcd0fffaeefd1a8f4..da5591166a865e40c875dcf8fe16ce8759226547 160000
--- a/cellframe-sdk
+++ b/cellframe-sdk
@@ -1 +1 @@
-Subproject commit 807aee87a16b623be9c32b6bcd0fffaeefd1a8f4
+Subproject commit da5591166a865e40c875dcf8fe16ce8759226547
diff --git a/dap-sdk b/dap-sdk
index 628e8fd05782d701bb1be115d3b5ba8268ee8fa6..09462f6ea2c421c663d6e946924b231b7c99f176 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 628e8fd05782d701bb1be115d3b5ba8268ee8fa6
+Subproject commit 09462f6ea2c421c663d6e946924b231b7c99f176
diff --git a/dist.linux/share/cellframe-node.asan.service b/dist.linux/share/cellframe-node.asan.service
index 2e5c90cbcac4ae955881fabf6326a96b5b094daa..402399f736f5f3fdd1147b9be4dc87a98b19a419 100644
--- a/dist.linux/share/cellframe-node.asan.service
+++ b/dist.linux/share/cellframe-node.asan.service
@@ -13,7 +13,7 @@ Group=root
 RestartSec=10
 LogNamespace=cellframe
 CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_IPC_LOCK CAP_KILL CAP_LEASE CAP_MKNOD CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_RAWIO CAP_SYSLOG CAP_WAKE_ALARM CAP_SYS_RESOURCE CAP_DAC_READ_SEARCH
-Environment="ASAN_OPTIONS=strict_string_checks=1:detect_stack_use_after_return=1:detect_invalid_pointer_pairs=2:debug=1:atexit=1:abort_on_error=1:log_path=asanlog.txt"
+Environment="ASAN_OPTIONS=strict_string_checks=1:detect_invalid_pointer_pairs=2:debug=1:atexit=1:abort_on_error=1:log_path=asanlog.txt"
 
 [Install]
 WantedBy=multi-user.target
diff --git a/dist/etc/network/Backbone/chain-0.cfg b/dist/etc/network/Backbone/chain-0.cfg
index 73ca33f943852008b98dae4902888407ed6606b3..af1ac938fdb3ff0189f8af3e84a80a7998dea925 100755
--- a/dist/etc/network/Backbone/chain-0.cfg
+++ b/dist/etc/network/Backbone/chain-0.cfg
@@ -8,6 +8,7 @@ datum_types=[token,emission,ca,custom,decree]
 default_datum_types=[token,emission,ca,decree,custom]
 mempool_auto_types=[emission, decree]
 consensus=dag_poa
+authorized_nodes_addrs=[FE39::A741::BCD1::1920,6F96::DAA6::2AF1::1004,7149::F58A::E7E2::A4BA,9DBE::6AC5::BFB0::5D8C,197A::C7D8::372D::6D64,F546::A2C3::B230::6068,3168::6ED3::6B53::9A21,4B4D::8DB3::0BDC::4209,C35A::748F::11FC::F05D,73BC::A885::D21E::01CC,1B98::8F04::5822::87E9]
 
 [files]
 storage_dir=../../../var/lib/network/scorpion/zerochain/
diff --git a/dist/etc/network/Backbone/main.cfg b/dist/etc/network/Backbone/main.cfg
index 34146ab02947949f65802a19cc7039b86ad48ba0..d81abcde0b3d3e8c4dc9142f81a7050f83937ecc 100755
--- a/dist/etc/network/Backbone/main.cfg
+++ b/dist/etc/network/Backbone/main.cfg
@@ -19,7 +19,6 @@ static_genesis_block=0xD3E07282FC1C4FC733AEE7898BA1017DF7659CA7B64047886FA12EDD8
 
 
 [esbocs]
-consensus_debug=true
 #poa_mode=true
 min_validators_count=1
 auth_certs_prefix=scorpion.master
diff --git a/dist/etc/network/KelVPN/chain-0.cfg b/dist/etc/network/KelVPN/chain-0.cfg
index 2430325677340e56a91b962a8e5c0b32e9cce849..6a523f4f9fe6a2355a0b20c32974f54c4fc516d5 100644
--- a/dist/etc/network/KelVPN/chain-0.cfg
+++ b/dist/etc/network/KelVPN/chain-0.cfg
@@ -8,6 +8,7 @@ datum_types=[token,emission,ca,decree,custom]
 default_datum_types=[token,emission,ca,decree, custom]
 mempool_auto_types=[]
 consensus=dag_poa
+authorized_nodes_addrs=[4243::D90D::5B87::D579, 6D8C::9224::5C12::8AD4, F546::A2C3::B230::6068, 3168::6ED3::6B53::9A21, 4B4D::8DB3::0BDC::4209, C35A::748F::11FC::F05D, 73BC::A885::D21E::01CC, 1B98::8F04::5822::87E9]
 
 [files]
 storage_dir=../../../var/lib/network/kelvpn/zerochain/
diff --git a/dist/etc/network/KelVPN/main.cfg b/dist/etc/network/KelVPN/main.cfg
index 9764075f67e1e0409d8da3058f34f69f5832a7e6..bf0f1c3d672d9594c3a95a515f0b4473a4982e00 100644
--- a/dist/etc/network/KelVPN/main.cfg
+++ b/dist/etc/network/KelVPN/main.cfg
@@ -18,7 +18,6 @@ is_static_genesis_block=true
 static_genesis_block=0xAB7EE08EF7FFD1D20A4660B7963601E831488AEA4B16149C02F6CCBD0847E858
 
 [esbocs]
-consensus_debug=true
 min_validators_count=1
 auth_certs_prefix=kelvpn.master
 auth_certs_count=3
diff --git a/dist/etc/network/kelvpn-minkowski/main.cfg b/dist/etc/network/kelvpn-minkowski/main.cfg
index 90f7896f53caa52dcbd05a1f10d9e456c36e1cde..62f3a65732b9dd3c2f790f8e5f1448b69954c5be 100755
--- a/dist/etc/network/kelvpn-minkowski/main.cfg
+++ b/dist/etc/network/kelvpn-minkowski/main.cfg
@@ -18,7 +18,6 @@ is_static_genesis_event=true
 static_genesis_event=0x5C6C3BDD89F7317A1E3D01E6C440021D81C17F16431ECF3D2BFCA0BE50143728
 
 [esbocs]
-consensus_debug=true
 min_validators_count=1
 auth_certs_prefix=minkowski.master
 validators_addrs=[1234::0000::0000::0000]
diff --git a/dist/etc/network/mileena/main.cfg b/dist/etc/network/mileena/main.cfg
index 00df2b4609b642f1547c9a5218b7b948ef690bce..708d573375fb15b9856e2427c7a2e7e3f7b6c517 100755
--- a/dist/etc/network/mileena/main.cfg
+++ b/dist/etc/network/mileena/main.cfg
@@ -18,7 +18,6 @@ is_static_genesis_block=true
 static_genesis_block=0x1DB1E136B583A1553E4829D6A0453338B7413DDB1B12189F8456B064E822667F
 
 [esbocs]
-consensus_debug=true
 min_validators_count=2
 auth_certs_prefix=mileena.master
 validators_addrs=[CCCC::1234::0000::0000,CCCC::1234::0000::0001]
diff --git a/dist/etc/network/raiden/chain-0.cfg b/dist/etc/network/raiden/chain-0.cfg
index 43d50d86edac97d7acf5d5bf167cf55a97f406ac..73512fbb8b53cf032bac244b794eac35735e0cc2 100644
--- a/dist/etc/network/raiden/chain-0.cfg
+++ b/dist/etc/network/raiden/chain-0.cfg
@@ -8,6 +8,7 @@ datum_types=[token,emission,ca,decree]
 default_datum_types=[token,emission,ca,decree]
 mempool_auto_types=[emission]
 consensus=dag_poa
+authorized_nodes_addrs=[BCA3::B097::DCDC::CB2B,038E::0C9B::A3E8::C533,CC88::3F68::5313::1577,72F9::511B::616A::A46F,A2C2::0CD4::38BA::2E8C,A983::7C3F::7FD4::4950,D1E4::F837::F42C::BFEF,B6E5::1B78::847A::F026]
 
 [files]
 storage_dir=../../../var/lib/network/raiden/zerochain/
diff --git a/dist/etc/network/raiden/main.cfg b/dist/etc/network/raiden/main.cfg
index efbd3e520e9c6593fd2e06f8168f2f1762eae8d3..32d6e42cad30dcaba11753bfd8a1fa9306752689 100755
--- a/dist/etc/network/raiden/main.cfg
+++ b/dist/etc/network/raiden/main.cfg
@@ -18,7 +18,6 @@ is_static_genesis_block=true
 static_genesis_block=0x23003F4E373523075FF5EB7025DDAD7FA0DA44889E8A63335A22CCFA99E2C649
 
 [esbocs]
-consensus_debug=true
 min_validators_count=2
 auth_certs_prefix=raiden.master
 validators_addrs=[3A58::8BB3::7B56::A74C,D6CB::5510::2544::FCBB,FF76::A533::1896::4ECC]
diff --git a/dist/etc/network/riemann/chain-0.cfg b/dist/etc/network/riemann/chain-0.cfg
index 5a13cc1492cd3680946e3b39311f1c91bb74dd73..1febfb770d7f23c06491ad31670fde40eaea7335 100644
--- a/dist/etc/network/riemann/chain-0.cfg
+++ b/dist/etc/network/riemann/chain-0.cfg
@@ -8,6 +8,7 @@ datum_types=[token,emission,ca,decree]
 default_datum_types=[token,emission,ca,decree]
 mempool_auto_types=[emission]
 consensus=dag_poa
+authorized_nodes_addrs=[D420::C2A9::0637::040C,AC33::9A06::AAD8::B288,5DA8::C171::E316::C923,72F9::511B::616A::A46F,A2C2::0CD4::38BA::2E8C,A983::7C3F::7FD4::4950,D1E4::F837::F42C::BFEF]
 
 [files]
 storage_dir=../../../var/lib/network/riemann/zerochain/
diff --git a/dist/etc/network/riemann/main.cfg b/dist/etc/network/riemann/main.cfg
index 29f09c91fa8ef87ba851dbc3e97ae47d6fd0c683..284238f5462e7ec1107b1e140f266ac2353229d6 100644
--- a/dist/etc/network/riemann/main.cfg
+++ b/dist/etc/network/riemann/main.cfg
@@ -18,7 +18,6 @@ is_static_genesis_block=true
 static_genesis_block=0x5FDA4B2952C89AB639AD77E00A8EAE9CBC5B472444F1003844DEAF3F4D618D0F
 
 [esbocs]
-consensus_debug=true
 min_validators_count=1
 auth_certs_prefix=riemann.master
 validators_addrs=[6074::5C74::C320::A0F5,DBBA::AED3::2C72::87A7,FE4E::4EEC::007D::07E9]
diff --git a/dist/etc/network/subzero/chain-0.cfg b/dist/etc/network/subzero/chain-0.cfg
index 292ed3f8683363581dc2319db5da806b9ce6575a..96445d4682bbfa38e3d55a26b697470ce1038ad8 100644
--- a/dist/etc/network/subzero/chain-0.cfg
+++ b/dist/etc/network/subzero/chain-0.cfg
@@ -8,6 +8,7 @@ datum_types=[token,emission,ca,decree]
 default_datum_types=[token,emission,ca,decree]
 mempool_auto_types=[]
 consensus=dag_poa
+authorized_nodes_addrs=[608C::F7B7::D476::2438, 7497::4FB4::CFA1::9823, 5641::292F::13F5::F039]
 
 [files]
 storage_dir=../../../var/lib/network/subzero/zerochain/
diff --git a/dist/etc/network/subzero/main.cfg b/dist/etc/network/subzero/main.cfg
index d7d4d7152a5324e9704e4fe80d7c6a6c205c3bb1..93768990ff9d57cea44fb98e68eff1abed969467 100644
--- a/dist/etc/network/subzero/main.cfg
+++ b/dist/etc/network/subzero/main.cfg
@@ -19,7 +19,6 @@ static_genesis_block=0x4E4FC8F1B04683861370C023D23C4DD67CEF4B82698E405537BA64BDD
 hard_accept_list=[0x89FDBFD7AAB3BEEE3907C6158684004468E8FDFC3F2AC50AF147E5208A0CFCB3,0x538988B7AB4593EDDC7ECB75F780D12DA7CE75356C94AA14CAFFC7350F0F97AC]
 
 [esbocs]
-consensus_debug=true
 min_validators_count=2
 auth_certs_prefix=subzero.master
 validators_addrs=[6E38::C103::53BE::C7BD, 8CA6::AB31::5798::4469, 8EA1::0678::E93F::55B4]
diff --git a/dist/share/configs/network/Backbone.cfg b/dist/share/configs/network/Backbone.cfg
index fd4835ec21e03c1a97e231447cfb63228e078097..fb67e61e3cb8cfe5b25890d0ecff3ed46d18fc4d 100755
--- a/dist/share/configs/network/Backbone.cfg
+++ b/dist/share/configs/network/Backbone.cfg
@@ -13,7 +13,6 @@ node-role=
 
 seed_nodes_hosts=[0.root.scorpion.cellframe.net:8079,1.root.scorpion.cellframe.net:8079,2.root.scorpion.cellframe.net:8079,3.root.scorpion.cellframe.net:8079,4.root.scorpion.cellframe.net:8079]
 #roots + dag goes here
-authorized_nodes_addrs=[FE39::A741::BCD1::1920,6F96::DAA6::2AF1::1004,7149::F58A::E7E2::A4BA,9DBE::6AC5::BFB0::5D8C,197A::C7D8::372D::6D64,F546::A2C3::B230::6068,3168::6ED3::6B53::9A21,4B4D::8DB3::0BDC::4209,C35A::748F::11FC::F05D,73BC::A885::D21E::01CC,1B98::8F04::5822::87E9]
 
 #permanent_nodes_addrs=[0404::2022::0000::0005,0404::2022::0000::0006]
 
diff --git a/dist/share/configs/network/KelVPN.cfg b/dist/share/configs/network/KelVPN.cfg
index 5b50fcb5d4eb8ab449ae8b224d2753cf9d391fbe..0df7436192412fe331b12c9a753b5e34ff9a9fb8 100644
--- a/dist/share/configs/network/KelVPN.cfg
+++ b/dist/share/configs/network/KelVPN.cfg
@@ -11,8 +11,6 @@ bridged_network_ids=[0x0404202200000000]
 # Possible values: light, full, archive, master, root
 node-role=
 seed_nodes_hosts=[0.root.kelvpn.com:8079,1.root.kelvpn.com:8079,2.root.kelvpn.com:8079]
-#root addresses
-authorized_nodes_addrs=[4243::D90D::5B87::D579, 6D8C::9224::5C12::8AD4, F546::A2C3::B230::6068, 3168::6ED3::6B53::9A21, 4B4D::8DB3::0BDC::4209, C35A::748F::11FC::F05D, 73BC::A885::D21E::01CC, 1B98::8F04::5822::87E9]
 
 #[auth]
 #type=ca
diff --git a/dist/share/configs/network/raiden.cfg b/dist/share/configs/network/raiden.cfg
index dc391c681718ae05c6bf051002999537e8455bd0..07bc8d3b0bd827d6d5b08312861c00247b2174ed 100644
--- a/dist/share/configs/network/raiden.cfg
+++ b/dist/share/configs/network/raiden.cfg
@@ -18,8 +18,6 @@ node-role=
 #permanent_nodes_addrs=[]
 # If permanent addresses pointed without hosts then information about host will be retrieved from GDB
 #permanent_nodes_hosts=[]
-# This addresses will have priviledged acceess to some GDB groups
-authorized_nodes_addrs=[BCA3::B097::DCDC::CB2B, 038E::0C9B::A3E8::C533, CC88::3F68::5313::1577, 72F9::511B::616A::A46F, A2C2::0CD4::38BA::2E8C, A983::7C3F::7FD4::4950, D1E4::F837::F42C::BFEF, B6E5::1B78::847A::F026]
 # This hosts will be used as bootstrap balancers for first net access
 seed_nodes_hosts=[0.root.raiden.cellframe.net:8079, 1.root.raiden.cellframe.net:8079, 2.root.raiden.cellframe.net:8079]
 
diff --git a/dist/share/configs/network/riemann.cfg b/dist/share/configs/network/riemann.cfg
index bb83cc77ac8a72f37c92e779bdc0033c0316f7fb..0264e674c13ef6d71be2ba1aa45222c06050c296 100644
--- a/dist/share/configs/network/riemann.cfg
+++ b/dist/share/configs/network/riemann.cfg
@@ -18,8 +18,6 @@ node-role=
 #permanent_nodes_addrs=[]
 # If permanent addresses pointed without hosts then information about host will be retrieved from GDB
 #permanent_nodes_hosts=[]
-# This addresses will have priviledged acceess to some GDB groups
-authorized_nodes_addrs=[D420::C2A9::0637::040C,AC33::9A06::AAD8::B288,5DA8::C171::E316::C923,72F9::511B::616A::A46F,A2C2::0CD4::38BA::2E8C,A983::7C3F::7FD4::4950,D1E4::F837::F42C::BFEF]
 
 # This hosts will be used as bootstrap balancers for first net access
 seed_nodes_hosts=[0.root.riemann.cellframe.net:8079, 1.root.riemann.cellframe.net:8079, 2.root.riemann.cellframe.net:8079]
diff --git a/dist/share/configs/network/subzero.cfg b/dist/share/configs/network/subzero.cfg
index 0e91294f6e98c2aebdae17fedd4e85431d17e398..298158d715dea5952f133a616a0f343a649a1393 100755
--- a/dist/share/configs/network/subzero.cfg
+++ b/dist/share/configs/network/subzero.cfg
@@ -16,8 +16,6 @@ node-role=
 #permanent_nodes_addrs=[]
 # If permanent addresses pointed without hosts then information about host will be retrieved from GDB
 #permanent_nodes_hosts=[]
-# This addresses will have priviledged acceess to some GDB groups
-authorized_nodes_addrs=[608C::F7B7::D476::2438, 7497::4FB4::CFA1::9823, 5641::292F::13F5::F039]
 # This hosts will be used as bootstrap balancers for first net access
 seed_nodes_hosts=[0.root.subzero.cellframe.net:8190, 1.root.subzero.cellframe.net:8190, 2.root.subzero.cellframe.net:8190]
 
diff --git a/dist/share/default.setup b/dist/share/default.setup
index 1c19b4a66e9d00bc22e2239e6dac4ba8e79be196..b2f2d7b28760146c72ea7eaaa497c11dfb40b40d 100644
--- a/dist/share/default.setup
+++ b/dist/share/default.setup
@@ -101,10 +101,12 @@ config  mileena      general     node-role   default     full
 config  subzero      general     node-role   default     full
 
 config Backbone general seed_nodes_hosts ensure [0.root.scorpion.cellframe.net:8079,1.root.scorpion.cellframe.net:8079,2.root.scorpion.cellframe.net:8079,3.root.scorpion.cellframe.net:8079,4.root.scorpion.cellframe.net:8079]
-config Backbone general authorized_nodes_addrs ensure [FE39::A741::BCD1::1920,6F96::DAA6::2AF1::1004,7149::F58A::E7E2::A4BA,9DBE::6AC5::BFB0::5D8C,197A::C7D8::372D::6D64,F546::A2C3::B230::6068,3168::6ED3::6B53::9A21,4B4D::8DB3::0BDC::4209,C35A::748F::11FC::F05D,73BC::A885::D21E::01CC,1B98::8F04::5822::87E9]
 
-config KelVPN general authorized_nodes_addrs ensure [4243::D90D::5B87::D579,6D8C::9224::5C12::8AD4,F546::A2C3::B230::6068,3168::6ED3::6B53::9A21,4B4D::8DB3::0BDC::4209,C35A::748F::11FC::F05D,73BC::A885::D21E::01CC,1B98::8F04::5822::87E9]
 config KelVPN general seed_nodes_hosts ensure [0.root.kelvpn.com:8079,1.root.kelvpn.com:8079,2.root.kelvpn.com:8079]
 
-config riemann general authorized_nodes_addrs ensure [D420::C2A9::0637::040C,AC33::9A06::AAD8::B288,5DA8::C171::E316::C923,72F9::511B::616A::A46F,A2C2::0CD4::38BA::2E8C,A983::7C3F::7FD4::4950,D1E4::F837::F42C::BFEF]
-config raiden general authorized_nodes_addrs ensure [BCA3::B097::DCDC::CB2B,038E::0C9B::A3E8::C533,CC88::3F68::5313::1577,72F9::511B::616A::A46F,A2C2::0CD4::38BA::2E8C,A983::7C3F::7FD4::4950,D1E4::F837::F42C::BFEF,B6E5::1B78::847A::F026]
\ No newline at end of file
+config Backbone esbocs consensus_debug ensure true
+config KelVPN esbocs consensus_debug ensure true
+config raiden esbocs consensus_debug ensure true
+config riemann esbocs consensus_debug ensure true
+config mileena esbocs consensus_debug ensure true
+config subzero esbocs consensus_debug ensure true
diff --git a/python-cellframe b/python-cellframe
index c131a8ac5476c9d87fd9cf969d6c9846decacf03..d560eca88c78ef003f1377af8b02eefda9ea8525 160000
--- a/python-cellframe
+++ b/python-cellframe
@@ -1 +1 @@
-Subproject commit c131a8ac5476c9d87fd9cf969d6c9846decacf03
+Subproject commit d560eca88c78ef003f1377af8b02eefda9ea8525
diff --git a/sources/cellframe-node.c b/sources/cellframe-node.c
index 82b74eddb4fe0bd51f25e09b46458ea9667d2275..253c3feae65e707d6b384c373994275d96796c29 100755
--- a/sources/cellframe-node.c
+++ b/sources/cellframe-node.c
@@ -143,6 +143,8 @@ static int s_proc_running_check(const char *a_path);
 #define BUILD_TS "undefined"
 #endif
 
+#define NODE_NAME "cellframe-node"
+
 const char *dap_node_version() {
     return "CellframeNode, " DAP_VERSION ", " BUILD_TS ", " BUILD_HASH;
 }
@@ -162,15 +164,15 @@ int main( int argc, const char **argv )
     bool bServerEnabled = false;
     int rc = 0;
 
-    dap_set_appname("cellframe-node");
+    dap_set_appname(NODE_NAME);
 #if defined(_WIN32) && defined(NDEBUG)
     S_SetExceptionFilter( );
 #endif
 
     // get relative path to config
 #if !DAP_OS_ANDROID
-    if (argv[1] && argv[2] &&!dap_strcmp("-B" , argv[1]))
-        g_sys_dir_path = (char*)argv[2];
+    if (argc > 2 && !dap_strcmp("-B" , argv[1]))
+        g_sys_dir_path = dap_strdup(argv[2]);
 #endif
 
     if (!g_sys_dir_path) {
@@ -178,51 +180,50 @@ int main( int argc, const char **argv )
         g_sys_dir_path = dap_strdup_printf("%s/%s", regGetUsrPath(), dap_get_appname());
 #elif DAP_OS_MAC
         g_sys_dir_path = dap_strdup_printf("/Applications/CellframeNode.app/Contents/Resources");
-#elif DAP_OS_ANDROID
-        //must be set from jni through set_global_sys_dir befor main starts
-        //g_sys_dir_path = dap_strdup_printf("/storage/emulated/0/opt/%s",dap_get_appname());
 #elif DAP_OS_UNIX
         g_sys_dir_path = dap_strdup_printf("/opt/%s", dap_get_appname());
 #endif
     }
-
-    {
-        char *l_log_dir = dap_strdup_printf("%s/var/log", g_sys_dir_path);
-        dap_mkdir_with_parents(l_log_dir);
-        char * l_log_file = dap_strdup_printf( "%s/%s.log", l_log_dir, dap_get_appname());
-        if (dap_common_init(dap_get_appname(), l_log_file, l_log_dir) != 0)
-            return printf("Fatal Error: Can't init common functions module"), -2;
+    if ( !dap_dir_test(g_sys_dir_path) ) {
+        printf("Invalid path \"%s\"", g_sys_dir_path);
+        rc = -1;
+    } else {
+        char l_path[MAX_PATH + 1];
+        int pos = snprintf(l_path, sizeof(l_path), "%s/var/log", g_sys_dir_path);
+        if ( dap_mkdir_with_parents(l_path) ) {
+            printf("Can't create directory %s, error %d", l_path, errno);
+            rc = -2;
+        } else {
+            snprintf(l_path + pos, sizeof(l_path) - pos, "/%s.log", dap_get_appname());
+            if ( dap_common_init(dap_get_appname(), l_path) ) {
+                printf("Fatal Error: Can't init common functions module");
+                rc = -3;
+            } else {
 #if defined (DAP_DEBUG) || !defined(DAP_OS_WINDOWS)
-        dap_log_set_external_output(LOGGER_OUTPUT_STDOUT, NULL);
+                dap_log_set_external_output(LOGGER_OUTPUT_STDOUT, NULL);
 #else
-        dap_log_set_external_output(LOGGER_OUTPUT_NONE, NULL);
+                dap_log_set_external_output(LOGGER_OUTPUT_NONE, NULL);
 #endif
 #ifdef DAP_OS_ANDROID
-        dap_log_set_external_output(LOGGER_OUTPUT_ALOG, "NativeCellframeNode");
-
+                dap_log_set_external_output(LOGGER_OUTPUT_ALOG, "NativeCellframeNode");
 #endif
-
-        DAP_DELETE(l_log_dir);
-        DAP_DELETE(l_log_file);
-    }
-    log_it(L_DEBUG, "Use main path: %s", g_sys_dir_path);
-
-    {
-        char l_config_dir[MAX_PATH] = {'\0'};
-        sprintf(l_config_dir, "%s/etc", g_sys_dir_path);
-        if (dap_config_init(l_config_dir) != 0) {
-            log_it( L_CRITICAL,"Can't init general configurations" );
-            return -1;
+                log_it(L_DEBUG, "Use main path: %s", g_sys_dir_path);
+                snprintf(l_path, sizeof(l_path), "%s/etc", g_sys_dir_path);
+                if ( dap_config_init(l_path) ) {
+                    log_it( L_CRITICAL,"Can't init general config \"%s/%s.cfg\"\n", l_path, NODE_NAME );
+                    rc = -4;
+                }
+            }
         }
     }
+    if ( rc )
+        return DAP_DELETE(g_sys_dir_path), rc;
 
-    if ((g_config = dap_config_open(dap_get_appname())) == NULL ) {
-        log_it( L_CRITICAL,"Can't init general configurations" );
-        return -1;
-    }
+    if (!( g_config = dap_config_open(dap_get_appname()) ))
+        return log_it( L_CRITICAL,"Can't open general config %s.cfg", dap_get_appname() ), DAP_DELETE(g_sys_dir_path), -5;
 #ifndef DAP_OS_WINDOWS
-    char l_default_dir[MAX_PATH] = {'\0'};
-    sprintf(l_default_dir, "%s/tmp", g_sys_dir_path);
+    char l_default_dir[MAX_PATH + 1];
+    snprintf(l_default_dir, MAX_PATH + 1, "%s/tmp", g_sys_dir_path);
     char *l_pid_file_path = dap_config_get_item_str_path_default(g_config,  "resources", "pid_path", l_default_dir);
     int l_pid_check = s_proc_running_check(l_pid_file_path);
     DAP_DELETE(l_pid_file_path);
@@ -231,7 +232,7 @@ int main( int argc, const char **argv )
 #else
     if ( s_proc_running_check("DAP_CELLFRAME_NODE_74E9201D33F7F7F684D2FEF1982799A79B6BF94"
                               "B568446A8D1DE947B00E3C75060F3FD5BF277592D02F77D7E50935E56") )
-        return 2;
+        return DAP_DELETE(g_sys_dir_path), 2;
 #endif
 
     log_it(L_DEBUG, "Parsing command line args");
@@ -252,7 +253,6 @@ int main( int argc, const char **argv )
                 l_max_file_size     = dap_config_get_item_int64(g_config, "log", "rotate_size");
         log_it(L_NOTICE, "Log rotation every %lu min enabled, max log file size %lu MB",
                          l_timeout_minutes, l_max_file_size);
-        int64_t l_timeout = l_timeout_minutes * 60000;
         dap_common_enable_cleaner_log(l_timeout_minutes * 60000, l_max_file_size);
     }
 
@@ -434,7 +434,7 @@ int main( int argc, const char **argv )
 
         const char *str_start_mempool = dap_config_get_item_str( g_config, "mempool", "accept" );
         if ( str_start_mempool && !strcmp(str_start_mempool, "true")) {
-                dap_chain_mempool_add_proc(DAP_HTTP_SERVER(l_server), MEMPOOL_URL);
+            dap_chain_mempool_add_proc(DAP_HTTP_SERVER(l_server), MEMPOOL_URL);
         }
 
         // Built in WWW server
@@ -613,9 +613,8 @@ int s_proc_running_check(const char *a_path) {
     FILE *l_pidfile = fopen(a_path, "r");
     if (l_pidfile) {
         pid_t f_pid = 0;
-        fscanf( l_pidfile, "%d", &f_pid );
-        if (lockf(fileno(l_pidfile), F_TEST, 0) == -1) {
-            return log_it(L_ERROR, "Error %ld: \"%s\", dap_server is already running with PID %d",
+        if ( fscanf( l_pidfile, "%d", &f_pid ) && lockf(fileno(l_pidfile), F_TEST, 0) == -1 ) {
+            return log_it(L_ERROR, "Error %d: \"%s\", dap_server is already running with PID %d",
                            errno, dap_strerror(errno), f_pid), 1;
         }
         else
@@ -630,4 +629,4 @@ int s_proc_running_check(const char *a_path) {
     fflush(l_pidfile);
     return lockf(fileno(l_pidfile), F_TLOCK, sizeof(pid_t));
 #endif
-}
\ No newline at end of file
+}
diff --git a/sources/exh_win32.c b/sources/exh_win32.c
index 330cb834d24981484e9dbe1c22ef018c61fc7668..0828c62f2a8e65a65fed337c3359d3dbe596ea37 100644
--- a/sources/exh_win32.c
+++ b/sources/exh_win32.c
@@ -12,90 +12,16 @@ LONG ExceptionFilter( EXCEPTION_POINTERS *ep );
 
 void  S_SetExceptionFilter( void )
 {
-  SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX );
+    SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX );
 
-  #ifdef WIN64
+#ifdef WIN64
     AddVectoredExceptionHandler( 1, ExceptionFilter );
-  #else
+#else
     SetUnhandledExceptionFilter( (LPTOP_LEVEL_EXCEPTION_FILTER) ExceptionFilter );
-  #endif
-
-  return;
-}
-
-#if 0
-typedef struct _EXCEPTION_RECORD {
-  DWORD                    ExceptionCode;
-  DWORD                    ExceptionFlags;
-  struct _EXCEPTION_RECORD *ExceptionRecord;
-  PVOID                    ExceptionAddress;
-  DWORD                    NumberParameters;
-  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-} EXCEPTION_RECORD;
 #endif
+}
 
 LONG ExceptionFilter( EXCEPTION_POINTERS *ep )
 {
-//  printf( "\r\nExceptionCode = 0x%0X[%s]\r\n", ep->ExceptionRecord->ExceptionCode, buff );
-
-  uint8_t buff[128];
-
-  if ( ep->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
-    memcpy( buff, "EXCEPTION_ACCESS_VIOLATION", 27  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_ARRAY_BOUNDS_EXCEEDED)
-    memcpy( buff, "EXCEPTION_ARRAY_BOUNDS_EXCEEDED", 32  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_BREAKPOINT)
-    memcpy( buff, "EXCEPTION_BREAKPOINT", 21  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_DATATYPE_MISALIGNMENT)
-    memcpy( buff, "EXCEPTION_DATATYPE_MISALIGNMENT", 32  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_DENORMAL_OPERAND)
-    memcpy( buff, "EXCEPTION_FLT_DENORMAL_OPERAND", 31 );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_DIVIDE_BY_ZERO)
-    memcpy( buff, "EXCEPTION_FLT_DIVIDE_BY_ZERO", 29  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_INEXACT_RESULT)
-    memcpy( buff, "EXCEPTION_FLT_INEXACT_RESULT", 29  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_INVALID_OPERATION)
-    memcpy( buff, "EXCEPTION_FLT_INVALID_OPERATION", 32  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_OVERFLOW)
-    memcpy( buff, "EXCEPTION_FLT_OVERFLOW", 23  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_STACK_CHECK)
-    memcpy( buff, "EXCEPTION_FLT_STACK_CHECK", 26  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_FLT_UNDERFLOW)
-    memcpy( buff, "EXCEPTION_FLT_UNDERFLOW", 24  );
-  else if (ep->ExceptionRecord->ExceptionCode == STATUS_ILLEGAL_INSTRUCTION)
-    memcpy( buff, "EXCEPTION_ILLEGAL_INSTRUCTION", 30  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_IN_PAGE_ERROR)
-    memcpy( buff, "EXCEPTION_IN_PAGE_ERROR", 24  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_INT_DIVIDE_BY_ZERO)
-    memcpy( buff, "EXCEPTION_INT_DIVIDE_BY_ZERO", 29  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_INT_OVERFLOW)
-    memcpy( buff, "EXCEPTION_INT_OVERFLOW", 23  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_INVALID_DISPOSITION)
-    memcpy( buff, "EXCEPTION_INVALID_DISPOSITION", 30  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_NONCONTINUABLE_EXCEPTION)
-    memcpy( buff, "EXCEPTION_NONCONTINUABLE_EXCEPTION", 35  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)
-    memcpy( buff, "EXCEPTION_PRIV_INSTRUCTION", 27  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP)
-    memcpy( buff, "EXCEPTION_SINGLE_STEP", 22  );
-  else if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW)
-    memcpy( buff, "EXCEPTION_STACK_OVERFLOW", 25  );
-  else
-    memcpy( buff, "EXCEPTION_UNKNOWN", 18  );
-
-  HANDLE hConOut = GetStdHandle( STD_OUTPUT_HANDLE );
-  SetConsoleTextAttribute( hConOut, 12 );
-
-  printf( "\r\nExceptionCode = 0x%0lX[%s]\r\n", ep->ExceptionRecord->ExceptionCode, buff );
-
-  SetConsoleTextAttribute( hConOut, 7 );
-
-  dap_common_deinit( ); // close log file
-
-  Beep( 1000, 200 );
-  Sleep( 1000 );
-  getch( );
-
-  ExitProcess( -1 );
-  return 0;
+    return Beep( 1000, 200 );
 }
diff --git a/sources/main_node_cli.c b/sources/main_node_cli.c
index adb4f6fa7a196060417d89970bb82e8248c392be..d56a987f55da4db9666037a29f99432cbda97c3b 100644
--- a/sources/main_node_cli.c
+++ b/sources/main_node_cli.c
@@ -50,62 +50,52 @@ static const char *listen_socket = NULL;
 
 #if !DAP_OS_ANDROID
 int main(int argc, const char *argv[])
-
 {
     dap_set_appname(NODE_NAME "-cli");
+    // get relative path to config
+    if (argc > 2 && !dap_strcmp("-B" , argv[1])) {
+        g_sys_dir_path = dap_strdup(argv[2]);
+        if (! dap_dir_test(g_sys_dir_path) )
+            return printf("Invalid path \"%s\"", g_sys_dir_path), DAP_DELETE(g_sys_dir_path), -1;
+        argc -= 2;
+        argv += 2;
+    } else {
+        g_sys_dir_path =
+#ifdef DAP_OS_WINDOWS
+            dap_strdup_printf("%s/%s", regGetUsrPath(), NODE_NAME);
+#elif defined DAP_OS_MAC
+            dap_strdup_printf("/Applications/CellframeNode.app/Contents/Resources");
+#elif defined DAP_OS_UNIX
+            dap_strdup_printf("/opt/%s", NODE_NAME);
+#endif
+    }
 #ifdef DAP_OS_WINDOWS
     SetConsoleCP(1252);
     SetConsoleOutputCP(1252);
     WSADATA wsaData;
     WSAStartup(MAKEWORD(2,2), &wsaData);
 #endif
-
-    // get relative path to config
-    int l_rel_path = 0;
-    if (argv[1] && argv[2] && !dap_strcmp("-B" , argv[1])) {
-        g_sys_dir_path = (char*)argv[2];
-        l_rel_path = 1;
-    }
-    if (!g_sys_dir_path) {
-    #ifdef DAP_OS_WINDOWS
-        g_sys_dir_path = dap_strdup_printf("%s/%s", regGetUsrPath(), NODE_NAME);
-    #elif DAP_OS_MAC
-        g_sys_dir_path = dap_strdup_printf("/Applications/CellframeNode.app/Contents/Resources");
-    #elif DAP_OS_ANDROID
-        g_sys_dir_path = dap_strdup_printf("/storage/emulated/0/opt/%s", NODE_NAME);
-    #elif DAP_OS_UNIX
-        g_sys_dir_path = dap_strdup_printf("/opt/%s", NODE_NAME);
-    #endif
-    }
-
-
-    /*if (dap_common_init(dap_get_appname(), NULL, NULL) != 0) {
-        printf("Fatal Error: Can't init common functions module");
-        return -2;
-    }
-
-    */{
-        char l_config_dir[MAX_PATH] = {'\0'};
-        sprintf(l_config_dir, "%s/etc", g_sys_dir_path);
-        dap_config_init(l_config_dir);
-    }
     dap_log_level_set(L_CRITICAL);
-    int res = dap_app_cli_main(NODE_NAME, l_rel_path ? argc - 2 : argc, l_rel_path ? argv + 2 : argv);
+    int res = dap_app_cli_main(NODE_NAME, argc, argv);
     switch (res) {
-        case DAP_CLI_ERROR_FORMAT:
-            printf("Response format error!\n");
-            break;
-        case DAP_CLI_ERROR_SOCKET:
-            printf("Socket read error!\n");
-            break;
-        case DAP_CLI_ERROR_TIMEOUT:
-            printf("No response recieved\n");
-            break;
-        case DAP_CLI_ERROR_INCOMPLETE:
-            printf("Connection closed by peer\n");
-        default:
-            break;
+    case DAP_CLI_ERROR_FORMAT:
+        printf("Response format error!\n");
+        break;
+    case DAP_CLI_ERROR_SOCKET:
+        printf("Socket read error!\n");
+        break;
+    case DAP_CLI_ERROR_TIMEOUT:
+        printf("No response recieved\n");
+        break;
+    case DAP_CLI_ERROR_INCOMPLETE:
+        printf("Connection closed by peer\n");
+    default:
+        break;
     }
+    DAP_DELETE(g_sys_dir_path);
+#ifdef DAP_OS_WINDOWS
+    WSACleanup();
+#endif
     return res;
 }
-#endif
+#endif
\ No newline at end of file
diff --git a/sources/main_node_tool.c b/sources/main_node_tool.c
index b65c9f7855c200a0424024c7f93d31fda351561b..1769f34b2a01cfecef213d1c964c8477f1c42b0c 100644
--- a/sources/main_node_tool.c
+++ b/sources/main_node_tool.c
@@ -36,6 +36,7 @@
 #include "dap_file_utils.h"
 
 #define LOG_TAG "main_node_tool"
+#define NODE_NAME "cellframe-node"
 
 #undef log_it
 #ifdef DAP_OS_WINDOWS
@@ -111,76 +112,62 @@ int cellframe_node_tool_Main(int argc, const char **argv)
 int main(int argc, const char **argv)
 #endif
 {
-  dap_set_appname("cellframe-node");
-
+    dap_set_appname(NODE_NAME);
     // get relative path to config
-    int l_rel_path = 0;
-    if (argv[1] && argv[2] && !dap_strcmp("-B" , argv[1])) {
-        g_sys_dir_path = (char*)argv[2];
-        l_rel_path = 1;
+    int l_argv_start = 1, l_argvi, l_err = -2, l_ret_cmd = -1;
+    if (argc > 2 && !dap_strcmp("-B" , argv[1])) {
+        g_sys_dir_path = dap_strdup(argv[2]);
+        if (! dap_dir_test(g_sys_dir_path) )
+            return printf("Invalid path \"%s\"", g_sys_dir_path), DAP_DELETE(g_sys_dir_path), -1;
+        argc -= 2;
+        argv += 2;
+        l_argv_start += 2;
+    } else {
+        g_sys_dir_path =
+#ifdef DAP_OS_WINDOWS
+            dap_strdup_printf("%s/%s", regGetUsrPath(), dap_get_appname());
+#elif defined DAP_OS_MAC
+            dap_strdup_printf("/Applications/CellframeNode.app/Contents/Resources");
+#elif defined DAP_OS_UNIX
+            dap_strdup_printf("/opt/%s", dap_get_appname());
+#endif
     }
-
-    if (!g_sys_dir_path) {
-    #ifdef DAP_OS_WINDOWS
-        g_sys_dir_path = dap_strdup_printf("%s/%s", regGetUsrPath(), dap_get_appname());
-    #elif DAP_OS_MAC
-        g_sys_dir_path = dap_strdup_printf("/Applications/CellframeNode.app/Contents/Resources");
-    #elif DAP_OS_ANDROID
-        g_sys_dir_path = dap_strdup_printf("/storage/emulated/0/opt/%s",dap_get_appname());
-    #elif DAP_OS_UNIX
-        g_sys_dir_path = dap_strdup_printf("/opt/%s", dap_get_appname());
-    #endif
+    if ( argc < 2 )
+        return s_help( ), DAP_DELETE(g_sys_dir_path), -2;
+    if ( s_init() )
+        return log_it( L_ERROR, "Can't init modules" ), DAP_DELETE(g_sys_dir_path), -3;
+
+    size_t i, l_size = sizeof(s_opts) / sizeof(struct options);
+    for (i = 0; i < l_size; ++i) {
+        l_argvi = l_argv_start;
+        if (argc >= l_argvi && !strncmp(s_opts[i].cmd, argv[l_argvi], strlen (argv[l_argvi]) + 1)) {
+            l_err = 0;
+            for (int isub = 0; isub < s_opts[i].count_of_subcommands; isub++) {
+                if ( argc - 1 < ++l_argvi || strncmp(s_opts[i].subcmd[isub], argv[l_argvi], strlen(argv[l_argvi]) + 1) ) {
+                    l_err = -1;
+                    break;
+                }
+            }
+            if ( !l_err ) {
+                l_ret_cmd = s_opts[i].handler(argc, argv);
+                break;
+            }
+        }
     }
-
-  int ret = s_init();
-
-  if ( ret ) {
-    log_it( L_ERROR, "Can't init modules" );
-    return ret;
-  }
-
-  if ( argc < 2 ) {
-    log_it( L_INFO, "No params. Nothing to do" );
-    s_help( );
-    exit( -1000 );
-  }
-
-  size_t l_size = sizeof(s_opts) / sizeof(struct options);
-  bool l_find_cmd = false;
-  bool l_find_subcmd = true;
-  for (size_t i = 0; i < l_size; i++) {
-      int argv_index = 1 + l_rel_path*2;
-      if (argc >= argv_index && !strncmp(s_opts[i].cmd, argv[argv_index], strlen (argv[argv_index]) + 1)) {
-          l_find_cmd = true;
-          l_find_subcmd = false;
-          int match = 1;
-          for (int isub = 0; isub < s_opts[i].count_of_subcommands; isub++) {
-              if ((argc - 1) < ++argv_index) {
-                  match = 0;
-                  break;
-              }
-              if (strncmp(s_opts[i].subcmd[isub], argv[argv_index], strlen(argv[argv_index]) + 1)) {
-                  match = 0;
-                  break;
-              }
-          }
-          if (match) {
-              int l_ret = s_opts[i].handler(l_rel_path ? argc-2 : argc, l_rel_path ? argv+2 : argv);
-              return l_ret;
-          }
-      }
-  }
-  if (!l_find_cmd) {
-      printf("Command %s not found.\n", argv[1]);
-  }
-  if (!l_find_subcmd) {
-      printf("No subcommand was found for the %s command or the number of command arguments is less than the minimum.\n",
-             argv[1]);
-  }
-
-  s_help();
-  dap_config_close(g_config);
-  return -1;
+    switch ( l_err ) {
+    case -2:
+        printf("Command \"%s\" not found.\n", argv[1]);
+        s_help();
+        break;
+    case -1:
+        printf("No subcommand was found for command \"%s\".\n", argv[1]);
+        s_help();
+        break;
+    default: break;
+    }
+    dap_config_close(g_config);
+    DAP_DELETE(g_sys_dir_path);
+    return l_err ? l_err : l_ret_cmd;
 }
 
 static int s_wallet_create(int argc, const char **argv) {
@@ -633,7 +620,7 @@ static int s_cert_get_addr(int argc, const char **argv) {
  */
 static int s_init()
 {
-    if (dap_common_init(dap_get_appname(), NULL, NULL) != 0)
+    if ( dap_common_init(dap_get_appname(), NULL) )
         return printf("Fatal Error: Can't init common functions module"), -2;
 #if defined (DAP_DEBUG) || !defined(DAP_OS_WINDOWS)
         dap_log_set_external_output(LOGGER_OUTPUT_STDOUT, NULL);
@@ -641,25 +628,19 @@ static int s_init()
         dap_log_set_external_output(LOGGER_OUTPUT_NONE, NULL);
 #endif
     dap_log_level_set(L_ERROR);
-    char l_config_dir[MAX_PATH] = {'\0'};
-    sprintf(l_config_dir, "%s/etc", g_sys_dir_path);
-    dap_config_init(l_config_dir);
-    g_config = dap_config_open(dap_get_appname());
-    if (g_config) {
-        uint16_t l_ca_folders_size = 0;
-        char **l_ca_folders = dap_config_get_item_str_path_array(g_config, "resources", "ca_folders", &l_ca_folders_size);
-        dap_stpcpy(s_system_ca_dir, l_ca_folders[0]);
-        dap_config_get_item_str_path_array_free(l_ca_folders, &l_ca_folders_size);
-        int t = dap_strlen(s_system_ca_dir);
-        if (s_system_ca_dir[t - 1] == '/')
-            s_system_ca_dir[t-1] = '\0';
-        char *l_wallet_folder = dap_config_get_item_str_path_default(g_config, "resources", "wallets_path", NULL);
-        dap_stpcpy(s_system_wallet_dir, l_wallet_folder);
-        DAP_DEL_Z(l_wallet_folder);
-    } else {
-        dap_stpcpy(s_system_ca_dir, "./");
-        dap_stpcpy(s_system_wallet_dir, "./");
-    }
+    {
+        char l_config_dir[MAX_PATH];
+        snprintf(l_config_dir, MAX_PATH, "%s/etc", g_sys_dir_path);
+        if ( dap_config_init(l_config_dir) || !(g_config = dap_config_open(dap_get_appname())) )
+            return printf("Can't init general config \"%s/%s.cfg\"\n", l_config_dir, dap_get_appname()), -3;
+    }
+    char *l_ca_path = dap_config_get_item_str_path_default(g_config, "resources", "ca_folders", "."),
+         *l_wal_path = dap_config_get_item_str_path_default(g_config, "resources", "wallets_path", ".");
+    char *l_pos = dap_strncpy(s_system_ca_dir, l_ca_path, MAX_PATH);
+    if (*--l_pos == '/')
+        *l_pos = '\0';
+    dap_strncpy(s_system_wallet_dir, l_wal_path, MAX_PATH);
+    DAP_DEL_MULTY(l_ca_path, l_wal_path);
     return 0;
 }
 
@@ -671,10 +652,9 @@ static int s_init()
  */
 static int s_is_file_available (char *l_path, const char *name, const char *ext)
 {
-    char l_buf_path[255];
-    snprintf (l_buf_path, 255, "%s/%s%s", l_path, name, ext ? ext : 0);
-    if (access (l_buf_path, F_OK)) return -1;
-    return 0;
+    char l_buf_path[MAX_PATH + 1];
+    snprintf (l_buf_path, MAX_PATH, "%s/%s%s", l_path, name, ext ? ext : 0);
+    return access (l_buf_path, F_OK) ? -1 : 0;
 }
 
 /**
@@ -694,8 +674,7 @@ static void s_fill_hash_key_for_data(dap_enc_key_t *l_key, void *l_data)
         size_t l_sign_ser_size = l_sign_unserialized_size;
         uint8_t *l_sign_ser = dap_enc_key_serialize_sign(l_key->type, l_sign_unserialized, &l_sign_ser_size);
         if ( l_sign_ser ) {
-            dap_sign_t *l_ret;
-            DAP_NEW_Z_SIZE_RET(l_ret, dap_sign_t, sizeof(dap_sign_hdr_t) + l_sign_ser_size + l_pub_key_size, NULL);
+            dap_sign_t *l_ret = DAP_NEW_Z_SIZE_RET_IF_FAIL(dap_sign_t, sizeof(dap_sign_hdr_t) + l_sign_ser_size + l_pub_key_size);
             // write serialized public key to dap_sign_t
             memcpy(l_ret->pkey_n_sign, l_pub_key, l_pub_key_size);
             l_ret->header.type = dap_sign_type_from_key_type(l_key->type);