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.
