diff --git a/http/http_request.hpp b/http/http_request.hpp
index 32223c3..e0cb9dc 100644
--- a/http/http_request.hpp
+++ b/http/http_request.hpp
@@ -23,9 +23,7 @@
     boost::beast::http::fields& fields;
     std::string_view url{};
     boost::urls::url_view urlView{};
-#ifndef NEW_BOOST_URL
-    boost::urls::query_params_view urlParams{};
-#endif
+
     bool isSecure{false};
 
     const std::string& body;
@@ -100,7 +98,6 @@
     }
 
   private:
-#ifdef NEW_BOOST_URL
     bool setUrlInfo()
     {
         auto result = boost::urls::parse_relative_ref(
@@ -115,22 +112,6 @@
                                urlView.encoded_path().size());
         return true;
     }
-#else
-    bool setUrlInfo()
-    {
-        boost::urls::error_code ec;
-        urlView = boost::urls::parse_relative_ref(
-            boost::urls::string_view(target().data(), target().size()), ec);
-        if (ec)
-        {
-            return false;
-        }
-        url = std::string_view(urlView.encoded_path().data(),
-                               urlView.encoded_path().size());
-        urlParams = urlView.query_params();
-        return true;
-    }
-#endif
 };
 
 } // namespace crow
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index e20a2ba..f35db24 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -181,7 +181,7 @@
     entryTimestamp = crow::utility::getDateTimeUint(timestamp / 1000 / 1000);
     return true;
 }
-#ifdef NEW_BOOST_URL
+
 static bool getSkipParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                          const crow::Request& req, uint64_t& skip)
 {
@@ -225,58 +225,6 @@
     return true;
 }
 
-#else
-
-static bool getSkipParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const crow::Request& req, uint64_t& skip)
-{
-    boost::urls::query_params_view::iterator it = req.urlParams.find("$skip");
-    if (it != req.urlParams.end())
-    {
-        std::string skipParam = it->value();
-        char* ptr = nullptr;
-        skip = std::strtoul(skipParam.c_str(), &ptr, 10);
-        if (skipParam.empty() || *ptr != '\0')
-        {
-
-            messages::queryParameterValueTypeError(
-                asyncResp->res, std::string(skipParam), "$skip");
-            return false;
-        }
-    }
-    return true;
-}
-
-static constexpr const uint64_t maxEntriesPerPage = 1000;
-static bool getTopParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                        const crow::Request& req, uint64_t& top)
-{
-    boost::urls::query_params_view::iterator it = req.urlParams.find("$top");
-    if (it != req.urlParams.end())
-    {
-        std::string topParam = it->value();
-        char* ptr = nullptr;
-        top = std::strtoul(topParam.c_str(), &ptr, 10);
-        if (topParam.empty() || *ptr != '\0')
-        {
-            messages::queryParameterValueTypeError(
-                asyncResp->res, std::string(topParam), "$top");
-            return false;
-        }
-        if (top < 1U || top > maxEntriesPerPage)
-        {
-
-            messages::queryParameterOutOfRange(
-                asyncResp->res, std::to_string(top), "$top",
-                "1-" + std::to_string(maxEntriesPerPage));
-            return false;
-        }
-    }
-    return true;
-}
-
-#endif
-
 inline static bool getUniqueEntryID(sd_journal* journal, std::string& entryID,
                                     const bool firstEntry = true)
 {
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 32d819d..d646698 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -31,7 +31,6 @@
 /**
  * @brief Function extracts transfer protocol name from URI.
  */
-#ifdef NEW_BOOST_URL
 inline std::string getTransferProtocolTypeFromUri(const std::string& imageUri)
 {
     boost::urls::result<boost::urls::url_view> url =
@@ -52,29 +51,6 @@
 
     return "None";
 }
-#else
-inline std::string getTransferProtocolTypeFromUri(const std::string& imageUri)
-{
-    boost::urls::error_code ec;
-    boost::urls::url_view url =
-        boost::urls::parse_uri(boost::string_view(imageUri), ec);
-    if (ec)
-    {
-        return "None";
-    }
-    boost::string_view scheme = url.scheme();
-    if (scheme == "smb")
-    {
-        return "CIFS";
-    }
-    if (scheme == "https")
-    {
-        return "HTTPS";
-    }
-
-    return "None";
-}
-#endif
 
 /**
  * @brief Read all known properties from VM object interfaces
@@ -329,7 +305,6 @@
  * @brief Function extracts transfer protocol type from URI.
  *
  */
-#ifdef NEW_BOOST_URL
 inline std::optional<TransferProtocol>
     getTransferProtocolFromUri(const std::string& imageUri)
 {
@@ -356,35 +331,6 @@
 
     return {};
 }
-#else
-inline std::optional<TransferProtocol>
-    getTransferProtocolFromUri(const std::string& imageUri)
-{
-    boost::urls::error_code ec;
-    boost::urls::url_view url =
-        boost::urls::parse_uri(boost::string_view(imageUri), ec);
-    if (ec)
-    {
-        return {};
-    }
-
-    boost::string_view scheme = url.scheme();
-    if (scheme == "smb")
-    {
-        return TransferProtocol::smb;
-    }
-    if (scheme == "https")
-    {
-        return TransferProtocol::https;
-    }
-    if (!scheme.empty())
-    {
-        return TransferProtocol::invalid;
-    }
-
-    return {};
-}
-#endif
 
 /**
  * @brief Function convert transfer protocol from string param.
