diff --git a/redfish-core/include/utils/sw_utils.hpp b/redfish-core/include/utils/sw_utils.hpp
index 1f5eed3..90048dd 100644
--- a/redfish-core/include/utils/sw_utils.hpp
+++ b/redfish-core/include/utils/sw_utils.hpp
@@ -353,12 +353,10 @@
     getSwUpdatableStatus(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                          const std::shared_ptr<std::string>& swId)
 {
-    sdbusplus::asio::getProperty<std::vector<std::string>>(
-        *crow::connections::systemBus, "xyz.openbmc_project.ObjectMapper",
+    dbus::utility::getAssociationEndPoints(
         "/xyz/openbmc_project/software/updateable",
-        "xyz.openbmc_project.Association", "endpoints",
         [asyncResp, swId](const boost::system::error_code& ec,
-                          const std::vector<std::string>& objPaths) {
+                          const dbus::utility::MapperEndPoints& objPaths) {
         if (ec)
         {
             BMCWEB_LOG_DEBUG << " error_code = " << ec
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index 4701af4..dd77195 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -250,12 +250,10 @@
 
             auto health = std::make_shared<HealthPopulate>(asyncResp);
 
-            sdbusplus::asio::getProperty<std::vector<std::string>>(
-                *crow::connections::systemBus,
-                "xyz.openbmc_project.ObjectMapper", path + "/all_sensors",
-                "xyz.openbmc_project.Association", "endpoints",
+            dbus::utility::getAssociationEndPoints(
+                path + "/all_sensors",
                 [health](const boost::system::error_code& ec2,
-                         const std::vector<std::string>& resp) {
+                         const dbus::utility::MapperEndPoints& resp) {
                 if (ec2)
                 {
                     return; // no sensors = no failures
@@ -290,12 +288,11 @@
                 crow::utility::urlFromPieces("redfish", "v1", "Systems",
                                              "system", "PCIeDevices");
 
-            sdbusplus::asio::getProperty<std::vector<std::string>>(
-                *crow::connections::systemBus,
-                "xyz.openbmc_project.ObjectMapper", path + "/drive",
-                "xyz.openbmc_project.Association", "endpoints",
-                [asyncResp, chassisId](const boost::system::error_code& ec3,
-                                       const std::vector<std::string>& resp) {
+            dbus::utility::getAssociationEndPoints(
+                path + "/drive",
+                [asyncResp,
+                 chassisId](const boost::system::error_code& ec3,
+                            const dbus::utility::MapperEndPoints& resp) {
                 if (ec3 || resp.empty())
                 {
                     return; // no drives = no failures
diff --git a/redfish-core/lib/pcie_slots.hpp b/redfish-core/lib/pcie_slots.hpp
index 42c8bb1..2b9ef2b 100644
--- a/redfish-core/lib/pcie_slots.hpp
+++ b/redfish-core/lib/pcie_slots.hpp
@@ -151,7 +151,7 @@
     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
     const std::string& chassisID, const std::string& pcieSlotPath,
     const std::string& connectionName, const boost::system::error_code& ec,
-    const std::variant<std::vector<std::string>>& endpoints)
+    const dbus::utility::MapperEndPoints& pcieSlotChassis)
 {
     if (ec)
     {
@@ -165,24 +165,14 @@
         return;
     }
 
-    const std::vector<std::string>* pcieSlotChassis =
-        std::get_if<std::vector<std::string>>(&(endpoints));
-
-    if (pcieSlotChassis == nullptr)
-    {
-        BMCWEB_LOG_ERROR << "Error getting PCIe Slot association!";
-        messages::internalError(asyncResp->res);
-        return;
-    }
-
-    if (pcieSlotChassis->size() != 1)
+    if (pcieSlotChassis.size() != 1)
     {
         BMCWEB_LOG_ERROR << "PCIe Slot association error! ";
         messages::internalError(asyncResp->res);
         return;
     }
 
-    sdbusplus::message::object_path path((*pcieSlotChassis)[0]);
+    sdbusplus::message::object_path path(pcieSlotChassis[0]);
     std::string chassisName = path.filename();
     if (chassisName != chassisID)
     {
@@ -239,17 +229,14 @@
 
             // The association of this PCIeSlot is used to determine whether
             // it belongs to this ChassisID
-            crow::connections::systemBus->async_method_call(
+            dbus::utility::getAssociationEndPoints(
+                std::string{pcieSlotAssociationPath},
                 [asyncResp, chassisID, pcieSlotPath, connectionName](
                     const boost::system::error_code& ec2,
-                    const std::variant<std::vector<std::string>>& endpoints) {
+                    const dbus::utility::MapperEndPoints& endpoints) {
                 onMapperAssociationDone(asyncResp, chassisID, pcieSlotPath,
                                         connectionName, ec2, endpoints);
-                },
-                "xyz.openbmc_project.ObjectMapper",
-                std::string{pcieSlotAssociationPath},
-                "org.freedesktop.DBus.Properties", "Get",
-                "xyz.openbmc_project.Association", "endpoints");
+                });
         }
     }
 }
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 8189bdb..ef3354d 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -564,13 +564,12 @@
 
         // Get the list of all sensors for this Chassis element
         std::string sensorPath = *chassisPath + "/all_sensors";
-        sdbusplus::asio::getProperty<std::vector<std::string>>(
-            *crow::connections::systemBus, "xyz.openbmc_project.ObjectMapper",
-            sensorPath, "xyz.openbmc_project.Association", "endpoints",
+        dbus::utility::getAssociationEndPoints(
+            sensorPath,
             [asyncResp, chassisSubNode, sensorTypes,
              callback{std::forward<const Callback>(callback)}](
                 const boost::system::error_code& e,
-                const std::vector<std::string>& nodeSensorList) {
+                const dbus::utility::MapperEndPoints& nodeSensorList) {
             if (e)
             {
                 if (e.value() != EBADR)
@@ -983,27 +982,22 @@
         {
             return; // don't have to have this interface
         }
-        for (const std::pair<
-                 std::string,
-                 std::vector<std::pair<std::string, std::vector<std::string>>>>&
+        for (const std::pair<std::string, dbus::utility::MapperServiceMap>&
                  pathPair : resp)
         {
             const std::string& path = pathPair.first;
-            const std::vector<std::pair<std::string, std::vector<std::string>>>&
-                objDict = pathPair.second;
+            const dbus::utility::MapperServiceMap& objDict = pathPair.second;
             if (objDict.empty())
             {
                 continue; // this should be impossible
             }
 
             const std::string& owner = objDict.begin()->first;
-            sdbusplus::asio::getProperty<std::vector<std::string>>(
-                *crow::connections::systemBus,
-                "xyz.openbmc_project.ObjectMapper", path + "/chassis",
-                "xyz.openbmc_project.Association", "endpoints",
-                [path, owner,
-                 sensorsAsyncResp](const boost::system::error_code& e,
-                                   const std::vector<std::string>& endpoints) {
+            dbus::utility::getAssociationEndPoints(
+                path + "/chassis",
+                [path, owner, sensorsAsyncResp](
+                    const boost::system::error_code& e,
+                    const dbus::utility::MapperEndPoints& endpoints) {
                 if (e)
                 {
                     return; // if they don't have an association we
diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp
index 5f3ccd3..0388ccd 100644
--- a/redfish-core/lib/storage.hpp
+++ b/redfish-core/lib/storage.hpp
@@ -702,12 +702,11 @@
             asyncResp->res.jsonValue["Name"] = "Drive Collection";
 
             // Association lambda
-            sdbusplus::asio::getProperty<std::vector<std::string>>(
-                *crow::connections::systemBus,
-                "xyz.openbmc_project.ObjectMapper", path + "/drive",
-                "xyz.openbmc_project.Association", "endpoints",
-                [asyncResp, chassisId](const boost::system::error_code& ec3,
-                                       const std::vector<std::string>& resp) {
+            dbus::utility::getAssociationEndPoints(
+                path + "/drive",
+                [asyncResp,
+                 chassisId](const boost::system::error_code& ec3,
+                            const dbus::utility::MapperEndPoints& resp) {
                 if (ec3)
                 {
                     BMCWEB_LOG_ERROR << "Error in chassis Drive association ";
@@ -867,13 +866,11 @@
                 continue;
             }
 
-            sdbusplus::asio::getProperty<std::vector<std::string>>(
-                *crow::connections::systemBus,
-                "xyz.openbmc_project.ObjectMapper", path + "/drive",
-                "xyz.openbmc_project.Association", "endpoints",
+            dbus::utility::getAssociationEndPoints(
+                path + "/drive",
                 [asyncResp, chassisId,
                  driveName](const boost::system::error_code& ec3,
-                            const std::vector<std::string>& resp) {
+                            const dbus::utility::MapperEndPoints& resp) {
                 if (ec3)
                 {
                     return; // no drives = no failures
