diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d70aec97a94165937137d16102c003b938a8bc17
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,13 @@
+stages:
+    - prepare
+    - build
+    - test
+
+variables:
+    GIT_SUBMODULE_STRATEGY: normal
+
+kelvin-node-schedule:
+    stage: build
+    tags:
+    - kelvin-node
+    script: ~/production/integration/gitlab-CI/build_all_handler.sh kelvin-node && ~/production/integration/gitlab-CI/travis_test.sh
diff --git a/dist/share/configs/kelvin-node.cfg.tpl b/dist/share/configs/kelvin-node.cfg.tpl
index ebc4f0fb263301f15c9be07021125f611dbcdf4f..a119d36edf748c91013d8b004942bf4f44f12e18 100644
--- a/dist/share/configs/kelvin-node.cfg.tpl
+++ b/dist/share/configs/kelvin-node.cfg.tpl
@@ -8,6 +8,8 @@ node_role=full
 #seed_mode=false
 auto_online=false
 
+# Console
+
 # Server part
 [server]
 #   By default you don't need to open you to the world
@@ -28,6 +30,14 @@ access_groups=expats,services,admins
 network_address=10.11.12.0
 network_mask=255.255.255.0
 
+# Console interface server
+[conserver]
+enabled=true
+#listen_tcp_port=12345
+listen_unix_socket_path=/opt/kelvin-node/var/run/node_cli
+# Default permissions 770
+#listen_unix_socket_permissions=770
+
 # Application Resources
 [resources]
 #   0 means auto detect
diff --git a/docs/CellFrame.dia b/docs/CellFrame.dia
new file mode 100644
index 0000000000000000000000000000000000000000..2842fa389f882de944696171ce8ca9995c77a247
Binary files /dev/null and b/docs/CellFrame.dia differ
diff --git a/docs/Cellframe.png b/docs/Cellframe.png
new file mode 100644
index 0000000000000000000000000000000000000000..d271fdba2bdfdec9a6528852be4d17d0d9f2c5bd
Binary files /dev/null and b/docs/Cellframe.png differ
diff --git a/docs/ChainFrame.dia b/docs/ChainFrame.dia
index 9ec80e6539df7d21bb18224210623a42fa5e3c89..2842fa389f882de944696171ce8ca9995c77a247 100644
Binary files a/docs/ChainFrame.dia and b/docs/ChainFrame.dia differ
diff --git a/sources/dap_defines.h b/sources/dap_defines.h
new file mode 100644
index 0000000000000000000000000000000000000000..c82859bfb0ded393029907080717b05ccdb4f84c
--- /dev/null
+++ b/sources/dap_defines.h
@@ -0,0 +1,18 @@
+#pragma once
+#define DAP_APP_NAME NODE_NETNAME "-node"
+#ifdef _WIN32
+  #define SYSTEM_PREFIX "opt/"DAP_APP_NAME
+#else
+  #define SYSTEM_PREFIX "/opt/"DAP_APP_NAME
+#endif
+
+#define LOCAL_PREFIX "~/."DAP_APP_NAME
+
+#define SYSTEM_CONFIGS_DIR SYSTEM_PREFIX"/etc"
+#define LOCAL_CONFIGS_DIR LOCAL_PREFIX"/etc"
+
+#define SYSTEM_CONFIG_GLOBAL_FILENAME SYSTEM_PREFIX"/etc/"DAP_APP_NAME".cfg"
+#define LOCAL_CONFIG_GLOBAL LOCAL_PREFIX"/etc/"DAP_APP_NAME".cfg"
+
+#define SYSTEM_PID_FILE_PATH SYSTEM_PREFIX"/run/"DAP_APP_NAME".pid"
+#define LOCAL_PID_FILE_PATH SYSTEM_PREFIX"/run/"DAP_APP_NAME".pid"
diff --git a/sources/main_node_cli.c b/sources/main_node_cli.c
index 383c506bd6f9a7b3225c10c746930aa9b2eea98a..588aee1fda8717e8efef089b228d785c257aa811 100644
--- a/sources/main_node_cli.c
+++ b/sources/main_node_cli.c
@@ -34,6 +34,8 @@
 #include "main_node_cli_net.h"
 #include "main_node_cli_shell.h"
 
+#include "dap_defines.h"
+
 static connect_param *cparam;
 
 /**
@@ -179,6 +181,9 @@ int main(int argc, const char * argv[])
     //    set_default_locale();
     //    command_execution_string = shell_script_filename = (char *) NULL;
 
+    dap_common_init(DAP_APP_NAME " Console interface", NULL);
+    dap_log_level_set(L_CRITICAL );
+    dap_config_init( SYSTEM_CONFIG_GLOBAL_FILENAME );
     // connect to node
     cparam = node_cli_connect();
     if(!cparam)
diff --git a/sources/main_node_cli_net.c b/sources/main_node_cli_net.c
index 1f989825268e77f098099b531de5cab1efb47e34..88d930458504fbc1cd9ed59517397be2611c2dba 100644
--- a/sources/main_node_cli_net.c
+++ b/sources/main_node_cli_net.c
@@ -68,7 +68,7 @@
  */
 static int add_mem_data(uint8_t **memory, size_t *memory_len, char *add_mem, size_t add_size)
 {
-    *memory = (char*) realloc(*memory, *memory_len + add_size + 1);
+    *memory = (uint8_t*) realloc(*memory, *memory_len + add_size + 1);
     //out of memory!
     if(*memory == NULL) {
         //printf("not enough memory (realloc returned NULL)\n");
@@ -124,9 +124,9 @@ connect_param* node_cli_connect(void)
     CURL *curl_handle = curl_easy_init();
 
 #ifndef _WIN32
-    int ret = curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, UNIX_SOCKET_FILE); // unix socket mode
+    int ret = curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, dap_config_get_item_str( g_config, "conserver", "listen_unix_socket_path") ); // unix socket mode
 #else
-    int ret = curl_easy_setopt(curl_handle, CURLOPT_PORT, 9999); // unix socket mode
+    int ret = curl_easy_setopt(curl_handle, CURLOPT_PORT, dap_config_get_item_uint16 ( g_config, "conserver", "listen_tcp_port")); // unix socket mode
 #endif
 
     curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 60L); // complete within 60 seconds