diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp
index db716258d02401ab50dc1b4222c21a7f3a039def..2ea26278c066e03b02e45edfb1f15b4ef3062227 100644
--- a/app/src/websockets/websocketserver.cpp
+++ b/app/src/websockets/websocketserver.cpp
@@ -93,8 +93,9 @@ void WebSocketServer::wsTextMessageReceived(const QString &message)
     QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
     if (wsClient) {
         qtlib::Json json(message.toUtf8());
-        if (json.isValid()) {
-            execRequest(json.toObject());
+        if (json.isObject()) {
+            QJsonObject object = json.toObject();
+            receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
         }
     }
 }
@@ -104,270 +105,222 @@ void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
     QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
     if (wsClient) {
         qtlib::Json json(message);
-        if (json.isValid()) {
-            execRequest(json.toObject());
+        if (json.isObject()) {
+            QJsonObject object = json.toObject();
+            receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
         }
     }
 }
 
 void WebSocketServer::itemMetadataSetChanged()
 {
-    QJsonArray results;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::metadataSetChanged");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    sendMessage("", "ItemHandler::metadataSetChanged", data);
 }
 
 void WebSocketServer::itemDownloadStarted(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::downloadStarted");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::downloadStarted", data);
 }
 
 void WebSocketServer::itemDownloadFinished(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::downloadFinished");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::downloadFinished", data);
 }
 
 void WebSocketServer::itemDownloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal)
 {
-    QJsonArray results;
-    results[0] = id;
-    results[1] = bytesReceived;
-    results[2] = bytesTotal;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::downloadProgress");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = id;
+    data[1] = bytesReceived;
+    data[2] = bytesTotal;
+    sendMessage("", "ItemHandler::downloadProgress", data);
 }
 
 void WebSocketServer::itemInstallStarted(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::installStarted");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::installStarted", data);
 }
 
 void WebSocketServer::itemInstallFinished(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::installFinished");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::installFinished", data);
 }
 
 void WebSocketServer::itemUninstallStarted(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::uninstallStarted");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::uninstallStarted", data);
 }
 
 void WebSocketServer::itemUninstallFinished(QJsonObject result)
 {
-    QJsonArray results;
-    results[0] = result;
-
-    QJsonObject response;
-    response["id"] = QString("");
-    response["func"] = QString("ItemHandler::uninstallFinished");
-    response["result"] = results;
-
-    sendResponse(response);
+    QJsonArray data;
+    data[0] = result;
+    sendMessage("", "ItemHandler::uninstallFinished", data);
 }
 
-void WebSocketServer::execRequest(const QJsonObject &request)
+void WebSocketServer::receiveMessage(const QString &id, const QString &func, const QJsonArray &data)
 {
-    /* request object format
+    /* message object format
     {
         "id": "example",
         "func": "functionName",
-        "arg": ["value", 2, true]
+        "data": ["value", 2, true]
     }
     */
 
-    QString id = request["id"].toString();
-    QString func = request["func"].toString();
-    QJsonArray arg = request["arg"].toArray();
-
-    QJsonArray results;
+    QJsonArray resultData;
 
     // WebSocketServer
     if (func == "WebSocketServer::stop") {
         stop();
     }
     else if (func == "WebSocketServer::isError") {
-        results[0] = isError();
+        resultData[0] = isError();
     }
     else if (func == "WebSocketServer::errorString") {
-        results[0] = errorString();
+        resultData[0] = errorString();
     }
     else if (func == "WebSocketServer::serverUrl") {
-        results[0] = serverUrl().toString();
+        resultData[0] = serverUrl().toString();
     }
     // ConfigHandler
     else if (func == "ConfigHandler::getAppConfigApplication") {
-        results[0] = configHandler_->getAppConfigApplication();
+        resultData[0] = configHandler_->getAppConfigApplication();
     }
     else if (func == "ConfigHandler::getAppConfigInstallTypes") {
-        results[0] = configHandler_->getAppConfigInstallTypes();
+        resultData[0] = configHandler_->getAppConfigInstallTypes();
     }
     else if (func == "ConfigHandler::getUsrConfigApplication") {
-        results[0] = configHandler_->getUsrConfigApplication();
+        resultData[0] = configHandler_->getUsrConfigApplication();
     }
     else if (func == "ConfigHandler::setUsrConfigApplication") {
-        results[0] = configHandler_->setUsrConfigApplication(arg[0].toObject());
+        resultData[0] = configHandler_->setUsrConfigApplication(data[0].toObject());
     }
     else if (func == "ConfigHandler::getUsrConfigProviders") {
-        results[0] = configHandler_->getUsrConfigProviders();
+        resultData[0] = configHandler_->getUsrConfigProviders();
     }
     else if (func == "ConfigHandler::setUsrConfigProviders") {
-        results[0] = configHandler_->setUsrConfigProviders(arg[0].toObject());
+        resultData[0] = configHandler_->setUsrConfigProviders(data[0].toObject());
     }
     else if (func == "ConfigHandler::getUsrConfigCategories") {
-        results[0] = configHandler_->getUsrConfigCategories();
+        resultData[0] = configHandler_->getUsrConfigCategories();
     }
     else if (func == "ConfigHandler::setUsrConfigCategories") {
-        results[0] = configHandler_->setUsrConfigCategories(arg[0].toObject());
+        resultData[0] = configHandler_->setUsrConfigCategories(data[0].toObject());
     }
     else if (func == "ConfigHandler::getUsrConfigInstalledItems") {
-        results[0] = configHandler_->getUsrConfigInstalledItems();
+        resultData[0] = configHandler_->getUsrConfigInstalledItems();
     }
     else if (func == "ConfigHandler::setUsrConfigInstalledItems") {
-        results[0] = configHandler_->setUsrConfigInstalledItems(arg[0].toObject());
+        resultData[0] = configHandler_->setUsrConfigInstalledItems(data[0].toObject());
     }
     else if (func == "ConfigHandler::setUsrConfigProvidersProvider") {
-        results[0] = configHandler_->setUsrConfigProvidersProvider(arg[0].toString(), arg[1].toObject());
+        resultData[0] = configHandler_->setUsrConfigProvidersProvider(data[0].toString(), data[1].toObject());
     }
     else if (func == "ConfigHandler::removeUsrConfigProvidersProvider") {
-        results[0] = configHandler_->removeUsrConfigProvidersProvider(arg[0].toString());
+        resultData[0] = configHandler_->removeUsrConfigProvidersProvider(data[0].toString());
     }
     else if (func == "ConfigHandler::setUsrConfigCategoriesProvider") {
-        results[0] = configHandler_->setUsrConfigCategoriesProvider(arg[0].toString(), arg[1].toObject());
+        resultData[0] = configHandler_->setUsrConfigCategoriesProvider(data[0].toString(), data[1].toObject());
     }
     else if (func == "ConfigHandler::removeUsrConfigCategoriesProvider") {
-        results[0] = configHandler_->removeUsrConfigCategoriesProvider(arg[0].toString());
+        resultData[0] = configHandler_->removeUsrConfigCategoriesProvider(data[0].toString());
     }
     else if (func == "ConfigHandler::setUsrConfigCategoriesInstallType") {
-        results[0] = configHandler_->setUsrConfigCategoriesInstallType(arg[0].toString(), arg[1].toString(), arg[2].toString());
+        resultData[0] = configHandler_->setUsrConfigCategoriesInstallType(data[0].toString(), data[1].toString(), data[2].toString());
     }
     else if (func == "ConfigHandler::setUsrConfigInstalledItemsItem") {
-        results[0] = configHandler_->setUsrConfigInstalledItemsItem(arg[0].toString(), arg[1].toObject());
+        resultData[0] = configHandler_->setUsrConfigInstalledItemsItem(data[0].toString(), data[1].toObject());
     }
     else if (func == "ConfigHandler::removeUsrConfigInstalledItemsItem") {
-        results[0] = configHandler_->removeUsrConfigInstalledItemsItem(arg[0].toString());
+        resultData[0] = configHandler_->removeUsrConfigInstalledItemsItem(data[0].toString());
     }
     // SystemHandler
     else if (func == "SystemHandler::isUnix") {
-        results[0] = systemHandler_->isUnix();
+        resultData[0] = systemHandler_->isUnix();
     }
     else if (func == "SystemHandler::desktopEnvironment") {
-        results[0] = systemHandler_->desktopEnvironment();
+        resultData[0] = systemHandler_->desktopEnvironment();
     }
     else if (func == "SystemHandler::isApplicableType") {
-        results[0] = systemHandler_->isApplicableType(arg[0].toString());
+        resultData[0] = systemHandler_->isApplicableType(data[0].toString());
     }
     else if (func == "SystemHandler::applyFile") {
-        results[0] = false;
+        resultData[0] = false;
 #ifdef QTLIB_UNIX
-        results[0] = systemHandler_->applyFile(arg[0].toString(), arg[1].toString());
+        resultData[0] = systemHandler_->applyFile(data[0].toString(), data[1].toString());
 #endif
     }
     // OcsHandler
     else if (func == "OcsHandler::addProviders") {
-        results[0] = ocsHandler_->addProviders(arg[0].toString());
+        resultData[0] = ocsHandler_->addProviders(data[0].toString());
     }
     else if (func == "OcsHandler::removeProvider") {
-        results[0] = ocsHandler_->removeProvider(arg[0].toString());
+        resultData[0] = ocsHandler_->removeProvider(data[0].toString());
     }
     else if (func == "OcsHandler::updateAllCategories") {
-        results[0] = ocsHandler_->updateAllCategories(arg[0].toBool());
+        resultData[0] = ocsHandler_->updateAllCategories(data[0].toBool());
     }
     else if (func == "OcsHandler::updateCategories") {
-        results[0] = ocsHandler_->updateCategories(arg[0].toString(), arg[1].toBool());
+        resultData[0] = ocsHandler_->updateCategories(data[0].toString(), data[1].toBool());
     }
     else if (func == "OcsHandler::getContents") {
-        results[0] = ocsHandler_->getContents(arg[0].toString(), arg[1].toString(),
-                arg[2].toString(), arg[3].toString(),
-                arg[4].toString(), arg[5].toString(), arg[6].toInt(), arg[7].toInt());
+        resultData[0] = ocsHandler_->getContents(data[0].toString(), data[1].toString(),
+                data[2].toString(), data[3].toString(),
+                data[4].toString(), data[5].toString(), data[6].toInt(), data[7].toInt());
     }
     else if (func == "OcsHandler::getContent") {
-        results[0] = ocsHandler_->getContent(arg[0].toString(), arg[1].toString());
+        resultData[0] = ocsHandler_->getContent(data[0].toString(), data[1].toString());
     }
     // ItemHandler
     else if (func == "ItemHandler::metadataSet") {
-        results[0] = itemHandler_->metadataSet();
+        resultData[0] = itemHandler_->metadataSet();
     }
     else if (func == "ItemHandler::download") {
-        itemHandler_->download(arg[0].toString(), arg[1].toString(), arg[2].toString(), arg[3].toString());
+        itemHandler_->download(data[0].toString(), data[1].toString(), data[2].toString(), data[3].toString());
     }
     else if (func == "ItemHandler::uninstall") {
-        itemHandler_->uninstall(arg[0].toString());
+        itemHandler_->uninstall(data[0].toString());
     }
-    // Default
+    // Not supported
     else {
         return;
     }
 
-    QJsonObject response;
-    response["id"] = id;
-    response["func"] = func;
-    response["result"] = results;
-
-    sendResponse(response);
+    sendMessage(id, func, resultData);
 }
 
-void WebSocketServer::sendResponse(const QJsonObject &response)
+void WebSocketServer::sendMessage(const QString &id, const QString &func, const QJsonArray &data)
 {
-    /* response object format
+    /* message object format
     {
         "id": "example",
         "func": "functionName",
-        "result": ["value", 2, true]
+        "data": ["value", 2, true]
     }
     */
 
+    QJsonObject object;
+    object["id"] = id;
+    object["func"] = func;
+    object["data"] = data;
+
+    QByteArray binaryMessage = qtlib::Json(object).toJson();
+    QString textMessage = QString::fromUtf8(binaryMessage);
+
     foreach (QWebSocket *wsClient, wsClients_) {
-        wsClient->sendTextMessage(QString(qtlib::Json(response).toJson()));
-        //wsClient->sendBinaryMessage(qtlib::Json(response).toJson());
+        wsClient->sendTextMessage(textMessage);
+        //wsClient->sendBinaryMessage(binaryMessage);
     }
 }
diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h
index 2e314ef3ae4cff1ddb739f9ada33d9d85222ba1e..698bd5c2b1fdd2794d35bfe501ff864ff2494ba7 100644
--- a/app/src/websockets/websocketserver.h
+++ b/app/src/websockets/websocketserver.h
@@ -2,7 +2,8 @@
 
 #include <QObject>
 #include <QUrl>
-//#include <QJsonObject>
+#include <QJsonObject>
+#include <QJsonArray>
 
 class QWebSocketServer;
 class QWebSocket;
@@ -47,8 +48,8 @@ private slots:
     void itemUninstallFinished(QJsonObject result);
 
 private:
-    void execRequest(const QJsonObject &request);
-    void sendResponse(const QJsonObject &response);
+    void receiveMessage(const QString &id, const QString &func, const QJsonArray &data);
+    void sendMessage(const QString &id, const QString &func, const QJsonArray &data);
 
     ConfigHandler *configHandler_;
     SystemHandler *systemHandler_;