diff --git a/http/http2_connection.hpp b/http/http2_connection.hpp
index 4b1b2dc..8416ff7 100644
--- a/http/http2_connection.hpp
+++ b/http/http2_connection.hpp
@@ -434,7 +434,7 @@
                 close();
                 return -1;
             }
-            thisReq.req.method(verb);
+            thisReq.method(verb);
         }
         else if (nameSv == ":scheme")
         {
@@ -442,7 +442,7 @@
         }
         else
         {
-            thisReq.req.set(nameSv, valueSv);
+            thisReq.addHeader(nameSv, valueSv);
         }
         return 0;
     }
diff --git a/http/http_request.hpp b/http/http_request.hpp
index a3c8fd8..53f51e6 100644
--- a/http/http_request.hpp
+++ b/http/http_request.hpp
@@ -80,6 +80,10 @@
     {
         return req.method();
     }
+    void method(boost::beast::http::verb verb)
+    {
+        return req.method(verb);
+    }
 
     std::string_view getHeaderValue(std::string_view key) const
     {
@@ -91,6 +95,11 @@
         return req[key];
     }
 
+    void clearHeader(boost::beast::http::field key)
+    {
+        req.erase(key);
+    }
+
     std::string_view methodString() const
     {
         return req.method_string();
diff --git a/http/websocket.hpp b/http/websocket.hpp
index d232c02..2ef8412 100644
--- a/http/websocket.hpp
+++ b/http/websocket.hpp
@@ -92,7 +92,8 @@
         BMCWEB_LOG_DEBUG("starting connection {}", logPtr(this));
 
         using bf = boost::beast::http::field;
-        std::string protocolHeader = req.req[bf::sec_websocket_protocol];
+        std::string protocolHeader{
+            req.getHeaderValue(bf::sec_websocket_protocol)};
 
         ws.set_option(boost::beast::websocket::stream_base::decorator(
             [session{session},
