diff --git a/src/WebSocketClient.cpp b/src/WebSocketClient.cpp
index ab41b0a..a892dff 100644
--- a/src/WebSocketClient.cpp
+++ b/src/WebSocketClient.cpp
@@ -12,7 +12,7 @@ WebSocketClient::WebSocketClient(Client& aClient, const char* aServerName, uint1
 {
 }
 
-WebSocketClient::WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort) 
+WebSocketClient::WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort)
  : HttpClient(aClient, aServerName, aServerPort),
    iTxStarted(false),
    iRxSize(0)
@@ -26,7 +26,7 @@ WebSocketClient::WebSocketClient(Client& aClient, const IPAddress& aServerAddres
 {
 }
 
-int WebSocketClient::begin(const char* aPath)
+int WebSocketClient::begin(const char* aPath, char* (*additionalHeaders)[2], size_t headerRows)
 {
     // start the GET request
     beginRequest();
@@ -51,6 +51,10 @@ int WebSocketClient::begin(const char* aPath)
         sendHeader("Connection", "Upgrade");
         sendHeader("Sec-WebSocket-Key", base64RandomKey);
         sendHeader("Sec-WebSocket-Version", "13");
+        for (size_t i = 0; i < headerRows; ++i)
+        {
+          sendHeader(additionalHeaders[i][0], additionalHeaders[i][1]);
+        }
         endRequest();
 
         status = responseStatusCode();
@@ -67,9 +71,14 @@ int WebSocketClient::begin(const char* aPath)
     return (status == 101) ? 0 : status;
 }
 
+int WebSocketClient::begin(const char* aPath)
+{
+    return begin(aPath, NULL, 0);
+}
+
 int WebSocketClient::begin(const String& aPath)
 {
-    return begin(aPath.c_str());
+    return begin(aPath.c_str(), NULL, 0);
 }
 
 int WebSocketClient::beginMessage(int aType)
@@ -174,7 +183,7 @@ size_t WebSocketClient::write(const uint8_t *aBuffer, size_t aSize)
     memcpy(iTxBuffer + iTxSize, aBuffer, aSize);
 
     iTxSize += aSize;
-    
+
     return aSize;
 }
 
@@ -217,14 +226,14 @@ int WebSocketClient::parseMessage()
     }
     else
     {
-        iRxSize = ((uint64_t)HttpClient::read() << 56) | 
-                    ((uint64_t)HttpClient::read() << 48) | 
-                    ((uint64_t)HttpClient::read() << 40) | 
-                    ((uint64_t)HttpClient::read() << 32) | 
-                    ((uint64_t)HttpClient::read() << 24) | 
-                    ((uint64_t)HttpClient::read() << 16) | 
+        iRxSize = ((uint64_t)HttpClient::read() << 56) |
+                    ((uint64_t)HttpClient::read() << 48) |
+                    ((uint64_t)HttpClient::read() << 40) |
+                    ((uint64_t)HttpClient::read() << 32) |
+                    ((uint64_t)HttpClient::read() << 24) |
+                    ((uint64_t)HttpClient::read() << 16) |
                     ((uint64_t)HttpClient::read() << 8)  |
-                    (uint64_t)HttpClient::read(); 
+                    (uint64_t)HttpClient::read();
     }
 
     // read in the mask, if present
diff --git a/src/WebSocketClient.h b/src/WebSocketClient.h
index 4b009e6..d87a28e 100644
--- a/src/WebSocketClient.h
+++ b/src/WebSocketClient.h
@@ -22,6 +22,13 @@ class WebSocketClient : public HttpClient
     WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort = HttpClient::kHttpPort);
     WebSocketClient(Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort = HttpClient::kHttpPort);
 
+    /** Start the Web Socket connection to the specified path with headers
+      @param aPath     Path to use in request
+      @param additionalHeaders  2D array with headers
+      @param headerRows  amount of rows in additionalHeaders array
+      @return 0 if successful, else error
+     */
+    int begin(const char* aPath, char* (*additionalHeaders)[2], size_t headerRows);
     /** Start the Web Socket connection to the specified path
       @param aURLPath     Path to use in request (optional, "/" is used by default)
       @return 0 if successful, else error