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.
