diff --git a/core/src/dap_common.c b/core/src/dap_common.c
index 9ae95ccfad2245e06acbff5797090ff2d8e9ff92..3e2563e0e8d4f67f8f4d12f3f3cf58dd97d8aeaa 100755
--- a/core/src/dap_common.c
+++ b/core/src/dap_common.c
@@ -196,16 +196,16 @@ static void print_it_stderr(unsigned a_off, const char *a_fmt, va_list va)
 {
     vfprintf(s_print_param, a_fmt, va);
 }
-
+*/
 #if ANDROID
 #include <android/log.h>
 
 static void print_it_alog (unsigned a_off, const char *a_fmt, va_list va)
 {
-    __android_log_vprint(ANDROID_LOG_INFO, s_print_param, a_fmt, va);
+    __android_log_vprint(ANDROID_LOG_INFO, "CellframeNodeNative", a_fmt, va);
 }
 
-#endif*/
+#endif
 
 void dap_log_set_external_output(LOGGER_EXTERNAL_OUTPUT output, void *param)
 {
@@ -230,10 +230,9 @@ void dap_log_set_external_output(LOGGER_EXTERNAL_OUTPUT output, void *param)
         s_print_callback = print_it_none;
         break;
     #ifdef ANDROID
-    /*case LOGGER_OUTPUT_ALOG:
+    case LOGGER_OUTPUT_ALOG:
         s_print_callback = print_it_alog;
-        s_print_param = param;
-        break;*/
+        break;
     #endif
 
   default:
diff --git a/net/app-cli/dap_app_cli.c b/net/app-cli/dap_app_cli.c
index 34866b20ac0210f3a541531f701c40a10a5531c2..c7619ed096f8b3244231dbb0e6d565dbcd1d8f33 100644
--- a/net/app-cli/dap_app_cli.c
+++ b/net/app-cli/dap_app_cli.c
@@ -34,10 +34,10 @@
 #include "dap_app_cli.h"
 #include "dap_app_cli_net.h"
 #include "dap_app_cli_shell.h"
-
-#ifdef DAP_OS_ANDROID
 #include "dap_json_rpc_params.h"
 #include "dap_json_rpc_request.h"
+
+#ifdef DAP_OS_ANDROID
 #include <android/log.h>
 #include <jni.h>
 static dap_config_t *cli_config;
@@ -154,6 +154,28 @@ static int shell_reader_loop()
     return 0;
 }
 
+
+char *dap_cli_exec(int argc, char **argv) {
+
+    dap_app_cli_cmd_state_t cmd = {
+            .cmd_name           = (char*)argv[0],
+            .cmd_param_count    = argc - 2,
+            .cmd_param          = argc - 2 > 0 ? (char**)(argv + 1) : NULL
+    };
+
+    char *l_cmd_str = dap_app_cli_form_command(&cmd);
+    dap_json_rpc_params_t *params = dap_json_rpc_params_create();
+    dap_json_rpc_params_add_data(params, l_cmd_str, TYPE_PARAM_STRING);
+    DAP_DELETE(l_cmd_str);
+    dap_json_rpc_request_t *a_request = dap_json_rpc_request_creation(cmd.cmd_name, params, 0);
+    char    *req_str = dap_json_rpc_request_to_json_string(a_request),
+            *res = dap_cli_cmd_exec(req_str);
+    dap_json_rpc_request_free(a_request);
+    return res;
+
+
+}
+
 #ifdef DAP_OS_ANDROID
 JNIEXPORT jstring JNICALL Java_com_CellframeWallet_Node_cellframeNodeCliMain(JNIEnv *javaEnv, jobject __unused jobj, jobjectArray argvStr)
 {
diff --git a/net/app-cli/dap_app_cli_net.c b/net/app-cli/dap_app_cli_net.c
index 5a043205e20c407a3c895479db1ae255972e391a..a23593c6cc7ef51a61da78e5983555c63d9da26e 100644
--- a/net/app-cli/dap_app_cli_net.c
+++ b/net/app-cli/dap_app_cli_net.c
@@ -121,9 +121,7 @@ dap_app_cli_connect_param_t dap_app_cli_connect()
     if (l_addr) {
         l_addrs[0] = NULL;
         dap_config_get_item_str_path_array_free(l_addrs, &l_array_count);
-#ifdef DAP_OS_WINDOWS
-        printf("Unix socket-based server is not yet implemented, consider localhost usage\n"); // TODO
-        return ~0;
+#if defined(DAP_OS_WINDOWS) || defined(DAP_OS_ANDROID)
 #else
         if ( -1 == (l_socket = socket(AF_UNIX, SOCK_STREAM, 0)) ) {
             printf ("socket() error %d", errno);
diff --git a/net/app-cli/include/dap_app_cli.h b/net/app-cli/include/dap_app_cli.h
index d6749b8690e8f293cb7836a31d60929e366ea7bc..722c53454d8f6eb98854b75a9eaa4cd6da622410 100644
--- a/net/app-cli/include/dap_app_cli.h
+++ b/net/app-cli/include/dap_app_cli.h
@@ -42,6 +42,8 @@ typedef struct dap_app_cli_cmd_state {
 extern "C" {
 #endif
 int dap_app_cli_main(const char *a_app_name, int argc, const char **argv);
+char *dap_cli_exec(int argc, char **argv);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/net/server/notify_server/include/dap_notify_srv.h b/net/server/notify_server/include/dap_notify_srv.h
index 43904e1882300fbd6d44fb8320425c11187b49b5..7041fac8d1d63ff57820990f5150203bae328498 100644
--- a/net/server/notify_server/include/dap_notify_srv.h
+++ b/net/server/notify_server/include/dap_notify_srv.h
@@ -31,4 +31,7 @@ DAP_PRINTF_ATTR(2, 3) int dap_notify_server_send_f_inter(uint32_t a_worker_id, c
 int dap_notify_server_send_mt(const char * a_data);
 DAP_PRINTF_ATTR(1, 2) int dap_notify_server_send_f_mt(const char *a_format, ...);
 
+typedef bool (*dap_notify_data_user_callback_t)(const char *data);
+void dap_notify_data_set_user_callback(dap_notify_data_user_callback_t callback);
+
 void dap_notify_srv_set_callback_new(dap_events_socket_callback_t);
\ No newline at end of file
diff --git a/net/server/notify_server/src/dap_notify_srv.c b/net/server/notify_server/src/dap_notify_srv.c
index 6f305a9ae671d9579e0fa750d5c36ee05410a45b..b894b2216091e941607f339312eece1a67544c7b 100644
--- a/net/server/notify_server/src/dap_notify_srv.c
+++ b/net/server/notify_server/src/dap_notify_srv.c
@@ -48,9 +48,15 @@ pthread_rwlock_t s_notify_server_clients_mutex = PTHREAD_RWLOCK_INITIALIZER;
 static void s_notify_server_callback_queue(dap_events_socket_t * a_es, void * a_arg);
 static void s_notify_server_callback_new(dap_events_socket_t * a_es, void * a_arg);
 static void s_notify_server_callback_delete(dap_events_socket_t * a_es, void * a_arg);
-
+static dap_notify_data_user_callback_t s_notify_data_user_callback = NULL;
 dap_events_socket_callback_t s_notify_server_callback_new_ex = NULL;
 
+void dap_notify_data_set_user_callback(dap_notify_data_user_callback_t callback)
+{
+    s_notify_data_user_callback = callback;
+}
+
+
 void dap_notify_srv_set_callback_new(dap_events_socket_callback_t a_cb) {
     s_notify_server_callback_new_ex = a_cb;
 }
@@ -144,6 +150,7 @@ int dap_notify_server_send_f_inter(uint32_t a_worker_id, const char * a_format,.
  */
 int dap_notify_server_send_mt(const char *a_data)
 {
+    if (s_notify_data_user_callback) s_notify_data_user_callback(a_data);
     if(!s_notify_server_queue) // If not initialized - nothing to notify
         return 0;
     return dap_events_socket_queue_ptr_send(s_notify_server_queue, dap_strdup(a_data));
@@ -157,8 +164,9 @@ int dap_notify_server_send_mt(const char *a_data)
  */
 int dap_notify_server_send_f_mt(const char *a_format, ...)
 {
-    if(!s_notify_server_queue) // If not initialized - nothing to notify
+    if (!s_notify_data_user_callback && s_notify_server_queue)
         return 0;
+
     va_list ap, ap_copy;
     va_start(ap, a_format);
     va_copy(ap_copy, ap);
@@ -178,6 +186,13 @@ int dap_notify_server_send_f_mt(const char *a_format, ...)
     }
     vsprintf(l_str, a_format, ap_copy);
     va_end(ap_copy);
+
+    if (s_notify_data_user_callback) s_notify_data_user_callback(l_str);
+    
+
+    if(!s_notify_server_queue) // If not initialized - nothing to notify
+        return 0;
+
     int l_ret = dap_events_socket_queue_ptr_send(s_notify_server_queue, l_str);
     DAP_DELETE(l_str);
     return l_ret;