diff --git a/redfish-core/include/utils/sw_utils.hpp b/redfish-core/include/utils/sw_utils.hpp
index 8a715e6..f5c4f0f 100644
--- a/redfish-core/include/utils/sw_utils.hpp
+++ b/redfish-core/include/utils/sw_utils.hpp
@@ -340,6 +340,52 @@
     });
 }
 
+inline void handleUpdateableEndpoints(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::shared_ptr<std::string>& swId,
+    const boost::system::error_code& ec,
+    const dbus::utility::MapperEndPoints& objPaths)
+{
+    if (ec)
+    {
+        BMCWEB_LOG_DEBUG(" error_code = {} error msg =  {}", ec, ec.message());
+        // System can exist with no updateable software,
+        // so don't throw error here.
+        return;
+    }
+    sdbusplus::message::object_path reqSwObjPath(
+        "/xyz/openbmc_project/software");
+    reqSwObjPath = reqSwObjPath / *swId;
+
+    if (std::ranges::find(objPaths, reqSwObjPath.str) != objPaths.end())
+    {
+        asyncResp->res.jsonValue["Updateable"] = true;
+        return;
+    }
+}
+
+inline void
+    handleUpdateableObject(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                           const boost::system::error_code& ec,
+                           const dbus::utility::MapperGetObject& objectInfo)
+{
+    if (ec)
+    {
+        BMCWEB_LOG_DEBUG(" error_code = {} error msg =  {}", ec, ec.message());
+        // System can exist with no updateable software,
+        // so don't throw error here.
+        return;
+    }
+    if (objectInfo.empty())
+    {
+        BMCWEB_LOG_DEBUG("No updateable software found");
+        // System can exist with no updateable software,
+        // so don't throw error here.
+        return;
+    }
+    asyncResp->res.jsonValue["Updateable"] = true;
+}
+
 /**
  * @brief Updates programmable status of input swId into json response
  *
@@ -354,26 +400,23 @@
     getSwUpdatableStatus(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                          const std::shared_ptr<std::string>& swId)
 {
-    dbus::utility::getAssociationEndPoints(
-        "/xyz/openbmc_project/software/updateable",
-        [asyncResp, swId](const boost::system::error_code& ec,
-                          const dbus::utility::MapperEndPoints& objPaths) {
-        if (ec)
-        {
-            BMCWEB_LOG_DEBUG(" error_code = {} error msg =  {}", ec,
-                             ec.message());
-            // System can exist with no updateable software,
-            // so don't throw error here.
-            return;
-        }
-        std::string reqSwObjPath = "/xyz/openbmc_project/software/" + *swId;
-
-        if (std::ranges::find(objPaths, reqSwObjPath) != objPaths.end())
-        {
-            asyncResp->res.jsonValue["Updateable"] = true;
-            return;
-        }
-    });
+    if constexpr (BMCWEB_REDFISH_UPDATESERVICE_USE_DBUS)
+    {
+        sdbusplus::message::object_path swObjectPath(
+            "/xyz/openbmc_project/software");
+        swObjectPath = swObjectPath / *swId;
+        constexpr std::array<std::string_view, 1> interfaces = {
+            "xyz.openbmc_project.Software.Update"};
+        dbus::utility::getDbusObject(
+            swObjectPath.str, interfaces,
+            std::bind_front(handleUpdateableObject, asyncResp));
+    }
+    else
+    {
+        dbus::utility::getAssociationEndPoints(
+            "/xyz/openbmc_project/software/updateable",
+            std::bind_front(handleUpdateableEndpoints, asyncResp, swId));
+    }
 }
 
 } // namespace sw_util
