diff --git a/KelvinDashboardGUI/DapServiceController.cpp b/KelvinDashboardGUI/DapServiceController.cpp
index 8543ef039b3ed34f5992bb6b921999ef803fe351..e1c01a2ed4f782519f4969cf0b62ab2f88a7f1b2 100644
--- a/KelvinDashboardGUI/DapServiceController.cpp
+++ b/KelvinDashboardGUI/DapServiceController.cpp
@@ -76,28 +76,37 @@ void DapServiceController::getWallets() const
 /// @param aNodeLogs List of node logs.
 void DapServiceController::processGetNodeLogs(const QStringList &aNodeLogs)
 {
-    for(QString s : aNodeLogs)
+    int counter {0};
+    QStringList list;
+    for(int x{0}; x < aNodeLogs.size(); ++x)
     {
-        qDebug() << s;
-        QStringList tempList = s.split(" ");
-        DapLogMessage message;
-        if(tempList.at(1) == "[INF]")
-            message.setType(Type::Info);
-        else if(tempList.at(1) == "[WRN]")
-            message.setType(Type::Warning);
-        else if(tempList.at(1) == "[DBG]")
-            message.setType(Type::Debug);
-        else if(tempList.at(1) == "[ERR]")
-            message.setType(Type::Error);
-        QString str = tempList.at(0);
-        message.setTimeStamp(str.remove("[").remove("]"));
-        QStringList tempList2 = tempList.at(2).split("\t");
-        QString str2 = tempList2.at(0);
-        message.setFile(str2.remove("[").remove("]"));
-        QString str3 = s.split("\t").at(1);
-        int pos = str3.indexOf('\n');
-        message.setMessage(str3.remove(pos, str3.size()-pos));
-        DapLogModel::getInstance().append(message);
+        qDebug() << aNodeLogs[x];
+        if(counter == 4)
+        {
+            DapLogMessage message;
+            message.setTimeStamp(list.at(0));
+            if(list.at(1) == "INF")
+                message.setType(Type::Info);
+            else if(list.at(1) == "WRN")
+                message.setType(Type::Warning);
+            else if(list.at(1) == "DBG")
+                message.setType(Type::Debug);
+            else if(list.at(1) == "ERR")
+                message.setType(Type::Error);
+            else if(list.at(1) == " * ")
+                message.setType(Type::Error);
+            message.setFile(list.at(2));
+            message.setMessage(list.at(3));
+            DapLogModel::getInstance().append(message);
+            list.clear();
+            counter = 0;
+            --x;
+        }
+        else
+        {
+            list.append(aNodeLogs[x]);
+            ++counter;
+        }
     }
 }
 
diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
index ae9cd76bc17319c602ee1c054f4d8df3ecb5fd12..c1719d28d778140de89748fba0f1848a412e14de 100644
--- a/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
+++ b/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
@@ -16,15 +16,15 @@ Page {
             name: "Node 1"
         }
 
-        ListElement
-        {
-            name: "Node 2"
-        }
+//        ListElement
+//        {
+//            name: "Node 2"
+//        }
 
-        ListElement
-        {
-            name: "Node 3"
-        }
+//        ListElement
+//        {
+//            name: "Node 3"
+//        }
     }
 
         TabView
@@ -55,18 +55,22 @@ Page {
                 
                         TableViewColumn {
                             id: columnType
-//                            role: "type"
+                            role: "type"
                             title: "Type"
                             
                              delegate:
                                  Item{
-                                         Image {
-                                             id: names
-                                             anchors.centerIn: parent
-                                             source: "qrc:/Resources/Icons/dialog.png"
-                                             width: 14
-                                             height: 14
-                                         }
+                                 Text {
+                                     anchors.centerIn: parent
+                                     renderType: Text.NativeRendering
+                                     text: styleData.value
+                                 }
+//                                     Image {
+//                                         anchors.centerIn: parent
+//                                         source: styleData.value
+//                                         width: 14
+//                                         height: 14
+//                                     }
                              }
                         }
                         TableViewColumn {
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-error.png b/KelvinDashboardGUI/Resources/Icons/dialog-error.png
new file mode 100644
index 0000000000000000000000000000000000000000..eebba2729b5dce38ccf44e7ff6c8e2fedfbf1ae0
Binary files /dev/null and b/KelvinDashboardGUI/Resources/Icons/dialog-error.png differ
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-information.png b/KelvinDashboardGUI/Resources/Icons/dialog-information.png
new file mode 100644
index 0000000000000000000000000000000000000000..42e42c6144ff2ee5ee48c9a102a5e27ed85e67c6
Binary files /dev/null and b/KelvinDashboardGUI/Resources/Icons/dialog-information.png differ
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-question.png b/KelvinDashboardGUI/Resources/Icons/dialog-question.png
new file mode 100644
index 0000000000000000000000000000000000000000..441fd9363c24a4cd4bebd27fcb8e932fabce9869
Binary files /dev/null and b/KelvinDashboardGUI/Resources/Icons/dialog-question.png differ
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-warning.png b/KelvinDashboardGUI/Resources/Icons/dialog-warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..4149e3d1e04397814fbf114062339b9110f535f9
Binary files /dev/null and b/KelvinDashboardGUI/Resources/Icons/dialog-warning.png differ
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog.png b/KelvinDashboardGUI/Resources/Icons/dialog.png
deleted file mode 100644
index 176bc26d4962885d56ed46d4c7fb9c62f195529e..0000000000000000000000000000000000000000
Binary files a/KelvinDashboardGUI/Resources/Icons/dialog.png and /dev/null differ
diff --git a/KelvinDashboardGUI/qml.qrc b/KelvinDashboardGUI/qml.qrc
index 4d465d5ce350680b684637f53e46c55395c2875c..eedcc5cd713a57ab8abb8e01513b1de28db108a7 100755
--- a/KelvinDashboardGUI/qml.qrc
+++ b/KelvinDashboardGUI/qml.qrc
@@ -24,10 +24,13 @@
         <file>Resources/Icons/about.png</file>
         <file>Resources/Icons/home.png</file>
         <file>Resources/Icons/settings.png</file>
-        <file>Resources/Icons/dialog.png</file>
         <file>Resources/Icons/exit.png</file>
         <file>DapUiQmlScreenDialogAddWallet.qml</file>
         <file>DapUiQmlWidgetChainWallet.qml</file>
         <file>DapUiQmlWidgetChainWalletForm.ui.qml</file>
+        <file>Resources/Icons/dialog-error.png</file>
+        <file>Resources/Icons/dialog-information.png</file>
+        <file>Resources/Icons/dialog-question.png</file>
+        <file>Resources/Icons/dialog-warning.png</file>
     </qresource>
 </RCC>
diff --git a/KelvinDashboardService/DapChainDashboardService.cpp b/KelvinDashboardService/DapChainDashboardService.cpp
index b5530fcc0d07887f65829a66dde5fd0021d1dfb8..f1d558c5b33ac5ab9cdabbda14888508fb4ed82d 100755
--- a/KelvinDashboardService/DapChainDashboardService.cpp
+++ b/KelvinDashboardService/DapChainDashboardService.cpp
@@ -3,7 +3,7 @@
 DapChainDashboardService::DapChainDashboardService() : DapRpcService(nullptr)
 {
     // Log reader
-    m_pDapLogReader = new DapLogReader(this);
+    m_pDapChainLogHandler = new DapChainLogHandler(this);
 
     m_pDapChainWalletHandler = new DapChainWalletHandler(this);
 
@@ -38,7 +38,7 @@ bool DapChainDashboardService::start()
 QStringList DapChainDashboardService::getNodeLogs(int aiTimeStamp, int aiRowCount)
 {
     qInfo() << QString("getNodeLogs(%1, %2)").arg(aiTimeStamp).arg(aiRowCount);
-    return m_pDapLogReader->request(aiTimeStamp, aiRowCount);
+    return m_pDapChainLogHandler->request(aiTimeStamp, aiRowCount);
 }
 
 QStringList DapChainDashboardService::addWallet(const QString &asWalletName)
diff --git a/KelvinDashboardService/DapChainDashboardService.h b/KelvinDashboardService/DapChainDashboardService.h
index 6c0f7399e78a189b06835c81ac697484d77117de..1e4f2663e0dbc5f790dd8a0a8fda3b8af3d00321 100755
--- a/KelvinDashboardService/DapChainDashboardService.h
+++ b/KelvinDashboardService/DapChainDashboardService.h
@@ -23,7 +23,7 @@
 #include "DapRpcTCPServer.h"
 #include "DapRpcService.h"
 
-#include "DapLogReader.h"
+#include "DapChainLogHandler.h"
 #include "DapChainWalletHandler.h"
 
 #include <QLocalServer>
@@ -39,7 +39,7 @@ class DapChainDashboardService : public DapRpcService
     /// Socket of client connection with the service.
     DapUiSocketServer       * m_pSocketService {nullptr};
     /// Log reader.
-    DapLogReader            * m_pDapLogReader {nullptr};
+    DapChainLogHandler            * m_pDapChainLogHandler {nullptr};
 
     DapChainWalletHandler   * m_pDapChainWalletHandler {nullptr};
 public:
diff --git a/KelvinDashboardService/DapChainLogHandler.cpp b/KelvinDashboardService/DapChainLogHandler.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..de6211b918f1dd4ffebc454eb9782fbe5a3e9aa0
--- /dev/null
+++ b/KelvinDashboardService/DapChainLogHandler.cpp
@@ -0,0 +1,41 @@
+#include "DapChainLogHandler.h"
+
+DapChainLogHandler::DapChainLogHandler(QObject *parent) : QObject(parent)
+{
+
+}
+
+QStringList DapChainLogHandler::parse(const QByteArray &aLogMessages)
+{
+    qDebug() << aLogMessages;
+    QRegExp rx("(\\t|\\[)([\\w\\s]{1,1}[\\w\\s\\W]+)(\\n|\\r|\\])");
+    rx.setMinimal(true);
+
+    int pos{0};
+    QStringList list;
+    while((pos = rx.indexIn(aLogMessages, pos)) != -1)
+    {
+        list.append(rx.cap(2));
+        pos += rx.matchedLength();
+    }
+    qDebug() << list;
+    return list;
+}
+
+QStringList DapChainLogHandler::request(int aiTimeStamp, int aiRowCount)
+{
+    QByteArray result;
+    QProcess process;
+    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
+    process.waitForFinished(-1);
+    result = process.readAll();
+
+    if(result.isEmpty())
+        qDebug() << "FALSE";
+    else
+    {
+        qDebug() << "TRUE";
+    }
+
+    return parse(result);
+}
diff --git a/KelvinDashboardService/DapLogReader.h b/KelvinDashboardService/DapChainLogHandler.h
similarity index 78%
rename from KelvinDashboardService/DapLogReader.h
rename to KelvinDashboardService/DapChainLogHandler.h
index a164d3598eb548be7bcc81ff4ea9186d2cfed976..ed50921abb64c269d80df80ae1cf64f3d9954ff1 100644
--- a/KelvinDashboardService/DapLogReader.h
+++ b/KelvinDashboardService/DapChainLogHandler.h
@@ -9,7 +9,7 @@
 
 #include "DapLogMessage.h"
 
-class DapLogReader : public QObject
+class DapChainLogHandler : public QObject
 {
     Q_OBJECT
 
@@ -17,7 +17,7 @@ protected:
     virtual QStringList parse(const QByteArray& aLogMessages);
 
 public:
-    explicit DapLogReader(QObject *parent = nullptr);
+    explicit DapChainLogHandler(QObject *parent = nullptr);
 
 public slots:
     QStringList request(int aiTimeStamp, int aiRowCount);
diff --git a/KelvinDashboardService/DapChainWalletHandler.cpp b/KelvinDashboardService/DapChainWalletHandler.cpp
index 50f3669bd3805475b8037ff5fb9761dfeb7a12e7..b02cb255f3bee348afce5ad48cdf8da52ed4e8ec 100644
--- a/KelvinDashboardService/DapChainWalletHandler.cpp
+++ b/KelvinDashboardService/DapChainWalletHandler.cpp
@@ -16,7 +16,7 @@ QStringList DapChainWalletHandler::createWallet(const QString &asNameWallet)
 {
     QByteArray result;
     QProcess process;
-    process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
+    process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
     process.waitForFinished(-1);
     result = process.readAll();
     QStringList list;
@@ -29,7 +29,7 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets()
 {
     QMap<QString, QVariant> map;
     QProcess process;
-    process.start(QString("%1 wallet list").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli"));
+    process.start(QString("%1 wallet list").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli"));
     process.waitForFinished(-1);
     QString str = QString::fromLatin1(process.readAll()).remove(" ");
     QRegExp rx( ":\\b([a-zA-Z0-9]+)\\n" );
diff --git a/KelvinDashboardService/DapLogReader.cpp b/KelvinDashboardService/DapLogReader.cpp
deleted file mode 100644
index 9907b1c834736ec59737ce759b8f1bf47a910fe2..0000000000000000000000000000000000000000
--- a/KelvinDashboardService/DapLogReader.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "DapLogReader.h"
-
-
-
-DapLogReader::DapLogReader(QObject *parent) : QObject(parent)
-{
-
-}
-
-QStringList DapLogReader::parse(const QByteArray &aLogMessages)
-{
-    QStringList list = QString::fromLatin1(aLogMessages).split(";");
-
-    auto resultEnd = std::remove_if(list.begin(), list.end(),
-    [] (const QString& aLogMessage)
-    {
-        return !aLogMessage.contains('[');
-    });
-    list.erase(resultEnd, list.end());
-    return list;
-}
-
-QStringList DapLogReader::request(int aiTimeStamp, int aiRowCount)
-{
-    QByteArray result;
-    QProcess process;
-    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
-    process.waitForFinished(-1);
-    result = process.readAll();
-
-    if(result.isEmpty())
-        qDebug() << "FALSE";
-    else
-    {
-        qDebug() << "TRUE";
-    }
-    return parse(result);
-}
diff --git a/KelvinDashboardService/KelvinDashboardService.pro b/KelvinDashboardService/KelvinDashboardService.pro
index 83a63af6c65033c33c60b8851cd6eba2433e3656..52458e45e6a29c1abfcf858b7ae9e6bb10a98388 100755
--- a/KelvinDashboardService/KelvinDashboardService.pro
+++ b/KelvinDashboardService/KelvinDashboardService.pro
@@ -41,15 +41,15 @@ SOURCES += \
     DapChainDashboardService.cpp \
     DapChainNode.cpp \
     DapChainNodeCache.cpp \
-    DapLogReader.cpp \
-    DapChainWalletHandler.cpp
+    DapChainWalletHandler.cpp \
+    DapChainLogHandler.cpp
 
 HEADERS += \
     DapChainDashboardService.h \
     DapChainNode.h \
     DapChainNodeCache.h \
-    DapLogReader.h \
-    DapChainWalletHandler.h
+    DapChainWalletHandler.h \
+    DapChainLogHandler.h
 
 include (../libdap/libdap.pri)
 include (../libdap-crypto/libdap-crypto.pri)
diff --git a/KelvinDashboardService/main.cpp b/KelvinDashboardService/main.cpp
index 7919e48f203913c5be2eefb9f56fc57c91fce1a8..9c4130e8aa6dd636ac24723797bd5b6b30df375f 100755
--- a/KelvinDashboardService/main.cpp
+++ b/KelvinDashboardService/main.cpp
@@ -5,7 +5,7 @@
 #include "DapHalper.h"
 #include "DapChainDashboardService.h"
 #include "DapLogger.h"
-#include "DapLogReader.h"
+#include "DapChainLogHandler.h"
 
 int main(int argc, char *argv[])
 {
diff --git a/libKelvinDashboardCommon/DapLogModel.cpp b/libKelvinDashboardCommon/DapLogModel.cpp
index ad8d7d4f3c080b2b11bac5a6cd55b4677ef4abd6..653c0a070634d8460b828bf0bd85a8211e9e33ef 100644
--- a/libKelvinDashboardCommon/DapLogModel.cpp
+++ b/libKelvinDashboardCommon/DapLogModel.cpp
@@ -20,7 +20,30 @@ QVariant DapLogModel::data(const QModelIndex &index, int role) const
 {
     if (index.row() < rowCount())
             switch (role) {
-            case TypeRole: return m_dapLogMessage.at(index.row())->getType();
+            case TypeRole:
+                switch (m_dapLogMessage.at(index.row())->getType()) {
+                case Type::Info:
+                    return "INF";
+                case Type::Warning:
+                    return "WRG";
+                case Type::Error:
+                    return "ERR";
+                case Type::Debug:
+                    return "DBG";
+                default:
+                    break;
+//                case Type::Info:
+//                    return "qrc:/Resources/Icons/dialog-information.png";
+//                case Type::Warning:
+//                    return "qrc:/Resources/Icons/dialog-warning.png";
+//                case Type::Error:
+//                    return "qrc:/Resources/Icons/dialog-error.png";
+//                case Type::Debug:
+//                    return "qrc:/Resources/Icons/dialog-question.png";
+//                default:
+//                    break;
+                }
+
             case TimeStampRole: return m_dapLogMessage.at(index.row())->getTimeStamp();
             case FileRole: return m_dapLogMessage.at(index.row())->getFile();
             case MessageRole: return m_dapLogMessage.at(index.row())->getMessage();