diff --git a/http/http2_connection.hpp b/http/http2_connection.hpp
index aeb46ab..4e3da8e 100644
--- a/http/http2_connection.hpp
+++ b/http/http2_connection.hpp
@@ -283,7 +283,7 @@
                 return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
             }
         }
-        crow::Request& thisReq = *it->second.req;
+        Request& thisReq = *it->second.req;
         using boost::beast::http::field;
         it->second.accept = thisReq.getHeaderValue(field::accept);
         it->second.acceptEnc = thisReq.getHeaderValue(field::accept_encoding);
@@ -291,7 +291,7 @@
         BMCWEB_LOG_DEBUG("Handling {} \"{}\"", logPtr(&thisReq),
                          thisReq.url().encoded_path());
 
-        crow::Response& thisRes = it->second.res;
+        Response& thisRes = it->second.res;
 
         thisRes.setCompleteRequestHandler(
             [this, streamId](Response& completeRes) {
@@ -306,10 +306,10 @@
             std::make_shared<bmcweb::AsyncResp>(std::move(it->second.res));
         if constexpr (!BMCWEB_INSECURE_DISABLE_AUTH)
         {
-            thisReq.session = crow::authentication::authenticate(
+            thisReq.session = authentication::authenticate(
                 {}, asyncResp->res, thisReq.method(), thisReq.req, mtlsSession);
-            if (!crow::authentication::isOnAllowlist(thisReq.url().path(),
-                                                     thisReq.method()) &&
+            if (!authentication::isOnAllowlist(thisReq.url().path(),
+                                               thisReq.method()) &&
                 thisReq.session == nullptr)
             {
                 BMCWEB_LOG_WARNING("Authentication failed");
@@ -465,7 +465,7 @@
             return -1;
         }
 
-        crow::Request& thisReq = *thisStream->second.req;
+        Request& thisReq = *thisStream->second.req;
 
         if (nameSv == ":path")
         {
diff --git a/http/http_connection.hpp b/http/http_connection.hpp
index 8f03e3e..64aac00 100644
--- a/http/http_connection.hpp
+++ b/http/http_connection.hpp
@@ -376,7 +376,7 @@
         {
             return;
         }
-        req = std::make_shared<crow::Request>(parser->release(), reqEc);
+        req = std::make_shared<Request>(parser->release(), reqEc);
         if (reqEc)
         {
             BMCWEB_LOG_DEBUG("Request failed to construct{}", reqEc.message());
@@ -416,8 +416,8 @@
 
         if (authenticationEnabled)
         {
-            if (!crow::authentication::isOnAllowlist(req->url().path(),
-                                                     req->method()) &&
+            if (!authentication::isOnAllowlist(req->url().path(),
+                                               req->method()) &&
                 req->session == nullptr)
             {
                 BMCWEB_LOG_WARNING("Authentication failed");
@@ -433,7 +433,7 @@
         auto asyncResp = std::make_shared<bmcweb::AsyncResp>();
         BMCWEB_LOG_DEBUG("Setting completion handler");
         asyncResp->res.setCompleteRequestHandler(
-            [self(shared_from_this())](crow::Response& thisRes) {
+            [self(shared_from_this())](Response& thisRes) {
                 self->completeRequest(thisRes);
             });
         if (doUpgrade(asyncResp))
@@ -489,7 +489,7 @@
         }
     }
 
-    void completeRequest(crow::Response& thisRes)
+    void completeRequest(Response& thisRes)
     {
         res = std::move(thisRes);
         res.keepAlive(keepAlive);
@@ -938,12 +938,12 @@
 
     boost::beast::flat_static_buffer<8192> buffer;
 
-    std::shared_ptr<crow::Request> req;
+    std::shared_ptr<Request> req;
     std::string accept;
     std::string http2settings;
     std::string acceptEncoding;
 
-    crow::Response res;
+    Response res;
 
     std::shared_ptr<persistent_data::UserSession> userSession;
     std::shared_ptr<persistent_data::UserSession> mtlsSession;
diff --git a/http/http_response.hpp b/http/http_response.hpp
index 33f24b3..0d32982 100644
--- a/http/http_response.hpp
+++ b/http/http_response.hpp
@@ -43,7 +43,7 @@
 struct Response
 {
     template <typename Adaptor, typename Handler>
-    friend class crow::Connection;
+    friend class Connection;
 
     http::response<bmcweb::HttpBody> response;
 
diff --git a/http/routing/sserule.hpp b/http/routing/sserule.hpp
index 9fb6ba3..5e9ba5e 100644
--- a/http/routing/sserule.hpp
+++ b/http/routing/sserule.hpp
@@ -54,9 +54,8 @@
     }
 
   private:
-    std::function<void(crow::sse_socket::Connection&, const crow::Request&)>
-        openHandler;
-    std::function<void(crow::sse_socket::Connection&)> closeHandler;
+    std::function<void(sse_socket::Connection&, const Request&)> openHandler;
+    std::function<void(sse_socket::Connection&)> closeHandler;
 };
 
 } // namespace crow
diff --git a/http/routing/taggedrule.hpp b/http/routing/taggedrule.hpp
index b785d88..7066784 100644
--- a/http/routing/taggedrule.hpp
+++ b/http/routing/taggedrule.hpp
@@ -37,12 +37,12 @@
     void operator()(Func&& f)
     {
         static_assert(
-            std::is_invocable_v<Func, crow::Request,
+            std::is_invocable_v<Func, Request,
                                 std::shared_ptr<bmcweb::AsyncResp>&, Args...>,
             "Handler type is mismatched with URL parameters");
         static_assert(
             std::is_same_v<
-                void, std::invoke_result_t<Func, crow::Request,
+                void, std::invoke_result_t<Func, Request,
                                            std::shared_ptr<bmcweb::AsyncResp>&,
                                            Args...>>,
             "Handler function with response argument should have void return type");
@@ -83,7 +83,7 @@
     }
 
   private:
-    std::function<void(const crow::Request&,
+    std::function<void(const Request&,
                        const std::shared_ptr<bmcweb::AsyncResp>&, Args...)>
         handler;
 };
diff --git a/http/routing/websocketrule.hpp b/http/routing/websocketrule.hpp
index 56bc6ca..b5ca92e 100644
--- a/http/routing/websocketrule.hpp
+++ b/http/routing/websocketrule.hpp
@@ -89,15 +89,15 @@
     }
 
   protected:
-    std::function<void(crow::websocket::Connection&)> openHandler;
-    std::function<void(crow::websocket::Connection&, const std::string&, bool)>
+    std::function<void(websocket::Connection&)> openHandler;
+    std::function<void(websocket::Connection&, const std::string&, bool)>
         messageHandler;
-    std::function<void(crow::websocket::Connection&, std::string_view,
-                       crow::websocket::MessageType type,
+    std::function<void(websocket::Connection&, std::string_view,
+                       websocket::MessageType type,
                        std::function<void()>&& whenComplete)>
         messageExHandler;
-    std::function<void(crow::websocket::Connection&, const std::string&)>
+    std::function<void(websocket::Connection&, const std::string&)>
         closeHandler;
-    std::function<void(crow::websocket::Connection&)> errorHandler;
+    std::function<void(websocket::Connection&)> errorHandler;
 };
 } // namespace crow
