diff --git a/app/src/main.cpp b/app/src/main.cpp
index 6d2aa87a511bbdea3e7b628d93db7140b12f1e0a..a702c0219fd173d6a2ed3b00740b59896e85e86f 100644
--- a/app/src/main.cpp
+++ b/app/src/main.cpp
@@ -48,14 +48,14 @@ int main(int argc, char *argv[])
     int port = clParser.value(clOptionPort).toInt();
 
     // Setup websocket server
-    WebSocketServer *webSocketServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app);
-    QObject::connect(webSocketServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
+    WebSocketServer *wsServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app);
+    QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
 
-    if (webSocketServer->start()) {
-        qDebug() << "Websocket server started at:" << webSocketServer->serverUrl().toString();
+    if (wsServer->start()) {
+        qDebug() << "Websocket server started at:" << wsServer->serverUrl().toString();
     }
     else {
-        qCritical() << "Failed to start websocket server:" << webSocketServer->errorString();
+        qCritical() << "Failed to start websocket server:" << wsServer->errorString();
         return 1;
     }
 
diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp
index dc4d30871ae37f5adac05319cb7f2b48c21dfc9a..440a191187cc772fea6c42771b6006611dbe1d25 100644
--- a/app/src/websockets/websocketserver.cpp
+++ b/app/src/websockets/websocketserver.cpp
@@ -2,23 +2,25 @@
 
 #include <QHostAddress>
 #include <QWebSocketServer>
+#include <QWebSocket>
 
 WebSocketServer::WebSocketServer(const QString &serverName, quint16 serverPort, QObject *parent)
     : QObject(parent), serverName_(serverName), serverPort_(serverPort)
 {
-    webSocketServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
-    connect(webSocketServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
+    wsServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
+    connect(wsServer_, &QWebSocketServer::newConnection, this, &WebSocketServer::wsNewConnection);
+    connect(wsServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
 }
 
 WebSocketServer::~WebSocketServer()
 {
     stop();
-    webSocketServer_->deleteLater();
+    wsServer_->deleteLater();
 }
 
 bool WebSocketServer::start()
 {
-    if (webSocketServer_->listen(QHostAddress::Any, serverPort_)) {
+    if (wsServer_->listen(QHostAddress::Any, serverPort_)) {
         emit started();
         return true;
     }
@@ -27,12 +29,12 @@ bool WebSocketServer::start()
 
 void WebSocketServer::stop()
 {
-    webSocketServer_->close();
+    wsServer_->close();
 }
 
 bool WebSocketServer::isError()
 {
-    if (webSocketServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
+    if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
         return true;
     }
     return false;
@@ -40,10 +42,44 @@ bool WebSocketServer::isError()
 
 QString WebSocketServer::errorString()
 {
-    return webSocketServer_->errorString();
+    return wsServer_->errorString();
 }
 
 QUrl WebSocketServer::serverUrl()
 {
-    return webSocketServer_->serverUrl();
+    return wsServer_->serverUrl();
+}
+
+void WebSocketServer::wsNewConnection()
+{
+    QWebSocket *wsClient = wsServer_->nextPendingConnection();
+    connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
+    connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
+    connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected);
+    wsClients_ << wsClient;
+}
+
+void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
+{
+    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    if (wsClient) {
+        wsClient->sendBinaryMessage(message);
+    }
+}
+
+void WebSocketServer::wsTextMessageReceived(const QString &message)
+{
+    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    if (wsClient) {
+        wsClient->sendTextMessage(message);
+    }
+}
+
+void WebSocketServer::wsDisconnected()
+{
+    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    if (wsClient) {
+        wsClients_.removeAll(wsClient);
+        wsClient->deleteLater();
+    }
 }
diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h
index d17dd502d84c94b446437f5cc3c7e7d8ee39b958..01d4591ba9792cb4699d7405699f94f623312fd6 100644
--- a/app/src/websockets/websocketserver.h
+++ b/app/src/websockets/websocketserver.h
@@ -4,6 +4,7 @@
 #include <QUrl>
 
 class QWebSocketServer;
+class QWebSocket;
 
 class WebSocketServer : public QObject
 {
@@ -20,14 +21,19 @@ signals:
 public slots:
     bool start();
     void stop();
-
     bool isError();
     QString errorString();
-
     QUrl serverUrl();
 
+private slots:
+    void wsNewConnection();
+    void wsBinaryMessageReceived(const QByteArray &message);
+    void wsTextMessageReceived(const QString &message);
+    void wsDisconnected();
+
 private:
     QString serverName_;
     quint16 serverPort_;
-    QWebSocketServer *webSocketServer_;
+    QWebSocketServer *wsServer_;
+    QList<QWebSocket *> wsClients_;
 };