diff --git a/core/DapServersListRequester.h b/core/DapServersListRequester.h
index 2f09d6518a9f7b3f162369058f3359597465b531..3a543ec921a5332b534edbea4af2447953d295a8 100644
--- a/core/DapServersListRequester.h
+++ b/core/DapServersListRequester.h
@@ -20,6 +20,11 @@ public:
         }
         return reply->errorString();
     }
+
+    QNetworkReply::NetworkError networkReplyError(){
+        return qobject_cast<QNetworkReply *>(parent())->error();
+    }
+
 signals:
     void sigResponse(const QJsonDocument& doc);
     void sigNetworkError(QNetworkReply::NetworkError);
diff --git a/core/DapSession.cpp b/core/DapSession.cpp
index 5feabbb67d2262b10a867d1e546f526b08b2eca9..3354126657a45c59da883813620c641ff269984f 100644
--- a/core/DapSession.cpp
+++ b/core/DapSession.cpp
@@ -203,8 +203,14 @@ void DapSession::onEnc()
 {
     qDebug() << "Enc reply";
     if (m_netEncryptReply && (m_netEncryptReply->error() != QNetworkReply::NoError)) {
+
         qCritical() << "Network error: " << m_netEncryptReply->errorString();
-        emit errorNetwork(m_netEncryptReply->errorString());
+        if (m_netEncryptReply->error() == QNetworkReply::OperationCanceledError || m_netEncryptReply->error() == QNetworkReply::ConnectionRefusedError)
+            emit errorNetwork(6543 , m_netEncryptReply->errorString());
+        else if (m_netEncryptReply->error() == QNetworkReply::UnknownNetworkError)
+            emit errorNetwork(3244 , m_netEncryptReply->errorString());
+        else
+            emit errorNetwork(m_netEncryptReply->errorString());
         return;
     }
     QByteArray arrData;
@@ -479,7 +485,7 @@ void DapSession::onAuthorize()
                     }
                 } else if (m_xmlStreamReader.name() == "ts_active_till"){
                     DapDataLocal::instance()->serialKeyData()->setLicenseTermTill(m_xmlStreamReader.readElementText());
-                    qDebug() << "ts_active_till: " << DapDataLocal::instance()->serialKeyData()->licenseTermTill();
+                    qDebug() << "ts_active_till: " << DapDataLocal::instance()->serialKeyData()->licenseTermTill().toTime_t();
                 } else {
                     m_userInform[m_xmlStreamReader.name().toString()] = m_xmlStreamReader.readElementText();
                     qDebug() << "Add user information: " << m_xmlStreamReader.name().toString()
diff --git a/core/DapSession.h b/core/DapSession.h
index 2bac3d900e5b74d127ef6e93cdddc1288a35de61..0f910583de8a8f2d9eae65a34fb8976acb10ea3b 100644
--- a/core/DapSession.h
+++ b/core/DapSession.h
@@ -170,6 +170,7 @@ signals:
     void errorAuthorization(const QString &);
     void activateKey();
     void errorNetwork(const QString&);
+    void errorNetwork(const int&, const QString&);
 
     void authRequested();
     void keyActRequested();
diff --git a/vpn/client/DapCmdHandlers/DapCmdAuth.cpp b/vpn/client/DapCmdHandlers/DapCmdAuth.cpp
index 00f1eb95cf5ac3043396eefeffd472417b4494b8..6ca104365d48b9e63c9d144760e261ab637bc81c 100644
--- a/vpn/client/DapCmdHandlers/DapCmdAuth.cpp
+++ b/vpn/client/DapCmdHandlers/DapCmdAuth.cpp
@@ -39,6 +39,19 @@ void DapCmdAuth::sendCmdErrorAuth(const QString errorMsg)
     sendCmd(&response);
 }
 
+void DapCmdAuth::sendCmdErrorAuth(const int& a_errorCode, const QString a_errorMsg)
+{
+    qWarning() <<"Error message: "<< a_errorMsg;
+    QJsonObject response;
+    QJsonObject errorObj;
+
+    errorObj["code"] = a_errorCode;
+    errorObj["message"] = a_errorMsg;
+    response["error"] = errorObj;
+
+    sendCmd(&response);
+}
+
 /**
  * @brief DapCmdAuth::handle
  * @param params
diff --git a/vpn/client/DapCmdHandlers/DapCmdAuth.h b/vpn/client/DapCmdHandlers/DapCmdAuth.h
index d7a40fa22217f45e8082114080bde3e32a6f3ea2..482f581019cc70b81a1b0dbb9494e027561cced4 100644
--- a/vpn/client/DapCmdHandlers/DapCmdAuth.h
+++ b/vpn/client/DapCmdHandlers/DapCmdAuth.h
@@ -13,7 +13,9 @@ public:
     virtual ~DapCmdAuth() override;
 
     void handle(const QJsonObject* params) override;
+public slots:
     void sendCmdErrorAuth(const QString errorMsg); // TODO ENUM with errors and code in response
+    void sendCmdErrorAuth(const int& a_errorCode, const QString a_errorMsg);
 signals:
     void sigAuth(const QString& user, const QString& password, const QString& address, uint16_t port);
 };
diff --git a/vpn/client/DapCmdHandlers/DapCmdConnect.h b/vpn/client/DapCmdHandlers/DapCmdConnect.h
index 5f01f0384667a33e0f914ea7739f66591fce97e3..7229fcc07dff73a6f762685deb42a7d48433a137 100644
--- a/vpn/client/DapCmdHandlers/DapCmdConnect.h
+++ b/vpn/client/DapCmdHandlers/DapCmdConnect.h
@@ -15,6 +15,7 @@ public:
     virtual ~DapCmdConnect() override;
 
     void handle(const QJsonObject* params) override;
+public slots:
     void sendCmdError(const QString errorMsg); // TODO ENUM with errors and code in response
     void sendCmdError(int a_errorCode,const QString a_errorMsg);
 signals:
diff --git a/vpn/client/DapCmdHandlers/DapCmdServersList.cpp b/vpn/client/DapCmdHandlers/DapCmdServersList.cpp
index ea2d0b42bb4f4b8e2cb0423d523126cafef7d906..9fec22f23ebd1e03038523589da1085baa1489c4 100644
--- a/vpn/client/DapCmdHandlers/DapCmdServersList.cpp
+++ b/vpn/client/DapCmdHandlers/DapCmdServersList.cpp
@@ -42,6 +42,9 @@ void DapCmdServersList::handle(const QJsonObject* params)
     connect(reply, &DapServersListNetworkReply::sigNetworkError, [=]{
         qWarning()<< "Network error: " << reply->errorString();
         rotateList();
-        sendSimpleError(-32002, reply->errorString());
+        if (reply->networkReplyError() == QNetworkReply::UnknownNetworkError)
+            sendSimpleError(-32003, reply->errorString());
+        else
+            sendSimpleError(-32002, reply->errorString());
     });
 }
diff --git a/vpn/ui/DapCmdHandlers/DapCmdConnect.cpp b/vpn/ui/DapCmdHandlers/DapCmdConnect.cpp
index 054f3068f2eb0d67d4c18c23f86f24ae6231271a..1b1aef5131c385b548683efe9a03b19e7f7a0568 100644
--- a/vpn/ui/DapCmdHandlers/DapCmdConnect.cpp
+++ b/vpn/ui/DapCmdHandlers/DapCmdConnect.cpp
@@ -45,5 +45,10 @@ void DapCmdConnect::handleError(int code, const QString& message)
     qDebug() << "handleError";
     Q_UNUSED(code);
     qWarning() << *m_errorObject;
+    if (code == 6543 || code == -1025){
+        emit errorMessage("Server not available. Please, try others or the same later");
+        return;
+    }
+
     emit errorMessage(message);
 }
diff --git a/vpn/ui/DapCmdHandlers/DapCmdServersList.cpp b/vpn/ui/DapCmdHandlers/DapCmdServersList.cpp
index 3777b8fe8fa2ae6d463f4eb805978f9c6c3eaa60..9fbbf62cff2e889df3070dc66a836a87beba7976 100644
--- a/vpn/ui/DapCmdHandlers/DapCmdServersList.cpp
+++ b/vpn/ui/DapCmdHandlers/DapCmdServersList.cpp
@@ -14,10 +14,7 @@ void DapCmdServersList::handleResult(const QJsonObject& result)
             if (servers.isEmpty()) {
                 emit sigEmptyList("No servers available on this CDB. Try another...");
             } else {
-                emit sigServersList(servers);
-                for(auto server : servers) {
-                    qDebug() << server;
-                }
+                emit sigServersListUpdate(servers);
             }
         } else {
             qCritical() << "Error parse response from service";
@@ -35,6 +32,8 @@ void DapCmdServersList::handleError(int code, const QString& message)
         emit sigEmptyList(message);
     } else if (code == -32002) {
         emit sigErrorNetwork(message);
+    } else if (code == -32003) {
+        emit sigNetworkUnreachable(message);
     }
     qWarning() << *m_errorObject;
 }
diff --git a/vpn/ui/DapCmdHandlers/DapCmdServersList.h b/vpn/ui/DapCmdHandlers/DapCmdServersList.h
index b0714f839a9431af6091bcaec5bad6070822d007..dd00d0c8a6675ed0ef5b31c0c7e188b96d104867 100644
--- a/vpn/ui/DapCmdHandlers/DapCmdServersList.h
+++ b/vpn/ui/DapCmdHandlers/DapCmdServersList.h
@@ -13,9 +13,10 @@ protected:
 public:
     explicit DapCmdServersList(QObject *parent = nullptr);
 signals:
-    void sigServersList(const DapServerInfoList& servers);
+    void sigServersListUpdate(const DapServerInfoList& servers);
     void sigEmptyList(const QString &msg);
     void sigErrorNetwork(const QString &msg);
+    void sigNetworkUnreachable(const QString &msg);
 public slots:
     void sendCmdGetServersList() { sendCmd(); }
 };
diff --git a/vpn/ui/dialogs/SignInScreenSerialNumberBase.cpp b/vpn/ui/dialogs/SignInScreenSerialNumberBase.cpp
index e2214bb6803f00214410fbf3850a61d9acad3585..512f4d5b5f8a79ccf69ae948184aa89666fe9042 100644
--- a/vpn/ui/dialogs/SignInScreenSerialNumberBase.cpp
+++ b/vpn/ui/dialogs/SignInScreenSerialNumberBase.cpp
@@ -348,6 +348,9 @@ QString SignInScreenSerialNumberBase::translatedErrorMsg(QString a_errorMsg)
     else if (a_errorMsg == "Serial key activated, try to authorize")
         return  tr("Serial key activated, try to authorize");
 
+    else if (a_errorMsg == "Server not available. Please, try others or the same later")
+            return tr("Server not available. Please, try others or the same later");
+
     else return a_errorMsg;
 }
 
diff --git a/vpn/ui/dialogs/StartScreen.cpp b/vpn/ui/dialogs/StartScreen.cpp
index 697c200d8a2ef87d87402a27e4074a2efbbc4f89..47057794b346eeaee29cb51c6f2909d6238985dc 100644
--- a/vpn/ui/dialogs/StartScreen.cpp
+++ b/vpn/ui/dialogs/StartScreen.cpp
@@ -24,7 +24,13 @@ void StartScreen::setState(ConnectionState a_state)
     m_ui->lblSystemStatus->setText(statusText);
 }
 
+void StartScreen::setErrorMessage(const QString &msg)
+{
+    m_ui->lblSystemStatus->setText(msg);
+}
+
 void StartScreen::initVariantUi(QWidget *a_widget)
 {
     Q_UNUSED(a_widget)
 }
+
diff --git a/vpn/ui/dialogs/StartScreen.h b/vpn/ui/dialogs/StartScreen.h
index 386b79dc054504e0186fcf206ce23e56d8c8441b..ca8f6a77a493bba87a76ad6b3c97b27be06efb70 100644
--- a/vpn/ui/dialogs/StartScreen.h
+++ b/vpn/ui/dialogs/StartScreen.h
@@ -26,6 +26,7 @@ public:
     virtual QString screenName() override;
 
     void setState(ConnectionState a_state);
+    void setErrorMessage(const QString &msg);
 
 protected: