diff --git a/http/http_request.hpp b/http/http_request.hpp
index be1c2a2..32223c3 100644
--- a/http/http_request.hpp
+++ b/http/http_request.hpp
@@ -23,7 +23,9 @@
     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;
@@ -98,6 +100,22 @@
     }
 
   private:
+#ifdef NEW_BOOST_URL
+    bool setUrlInfo()
+    {
+        auto result = boost::urls::parse_relative_ref(
+            boost::urls::string_view(target().data(), target().size()));
+
+        if (!result)
+        {
+            return false;
+        }
+        urlView = *result;
+        url = std::string_view(urlView.encoded_path().data(),
+                               urlView.encoded_path().size());
+        return true;
+    }
+#else
     bool setUrlInfo()
     {
         boost::urls::error_code ec;
@@ -112,6 +130,7 @@
         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 41438cb..43be44b 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -181,6 +181,51 @@
     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)
+{
+    boost::urls::params_view::iterator it = req.urlView.params().find("$skip");
+    if (it != req.urlView.params().end())
+    {
+        std::from_chars_result r = std::from_chars(
+            (*it).value.data(), (*it).value.data() + (*it).value.size(), skip);
+        if (r.ec != std::errc())
+        {
+            messages::queryParameterValueTypeError(asyncResp->res, "", "$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::params_view::iterator it = req.urlView.params().find("$top");
+    if (it != req.urlView.params().end())
+    {
+        std::from_chars_result r = std::from_chars(
+            (*it).value.data(), (*it).value.data() + (*it).value.size(), top);
+        if (r.ec != std::errc())
+        {
+            messages::queryParameterValueTypeError(asyncResp->res, "", "$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;
+}
+
+#else
 
 static bool getSkipParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                          const crow::Request& req, uint64_t& skip)
@@ -230,6 +275,8 @@
     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 9333f61..32d819d 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -31,6 +31,28 @@
 /**
  * @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 =
+        boost::urls::parse_uri(boost::string_view(imageUri));
+    if (!url)
+    {
+        return "None";
+    }
+    boost::string_view scheme = url->scheme();
+    if (scheme == "smb")
+    {
+        return "CIFS";
+    }
+    if (scheme == "https")
+    {
+        return "HTTPS";
+    }
+
+    return "None";
+}
+#else
 inline std::string getTransferProtocolTypeFromUri(const std::string& imageUri)
 {
     boost::urls::error_code ec;
@@ -52,6 +74,7 @@
 
     return "None";
 }
+#endif
 
 /**
  * @brief Read all known properties from VM object interfaces
@@ -306,6 +329,34 @@
  * @brief Function extracts transfer protocol type from URI.
  *
  */
+#ifdef NEW_BOOST_URL
+inline std::optional<TransferProtocol>
+    getTransferProtocolFromUri(const std::string& imageUri)
+{
+    boost::urls::result<boost::urls::url_view> url =
+        boost::urls::parse_uri(boost::string_view(imageUri));
+    if (!url)
+    {
+        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 {};
+}
+#else
 inline std::optional<TransferProtocol>
     getTransferProtocolFromUri(const std::string& imageUri)
 {
@@ -333,6 +384,7 @@
 
     return {};
 }
+#endif
 
 /**
  * @brief Function convert transfer protocol from string param.
