diff --git a/src/utils.cpp b/src/utils.cpp
index 171de29..8d782ab 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -4,6 +4,7 @@
 
 #include <openssl/sha.h>
 
+#include <algorithm>
 #include <fstream>
 #include <phosphor-logging/log.hpp>
 #include <sstream>
@@ -169,6 +170,15 @@
     return (rc == 0) ? r : "";
 }
 
+bool Utils::isAssociated(const std::string& psuInventoryPath,
+                         const AssociationList& assocs) const
+{
+    return std::find_if(assocs.begin(), assocs.end(),
+                        [&psuInventoryPath](const auto& assoc) {
+                            return psuInventoryPath == std::get<2>(assoc);
+                        }) != assocs.end();
+}
+
 any Utils::getPropertyImpl(sdbusplus::bus::bus& bus, const char* service,
                            const char* path, const char* interface,
                            const char* propertyName) const
diff --git a/src/utils.hpp b/src/utils.hpp
index bb5f13f..ae08156 100644
--- a/src/utils.hpp
+++ b/src/utils.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "types.hpp"
+
 #include <experimental/any>
 #include <sdbusplus/bus.hpp>
 #include <set>
@@ -11,6 +13,7 @@
 
 class UtilsInterface;
 
+using AssociationList = phosphor::software::updater::AssociationList;
 // Due to a libstdc++ bug, we got compile error using std::any with gmock.
 // A temporary workaround is to use std::experimental::any.
 // See details in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90415
@@ -91,6 +94,16 @@
  */
 std::string getLatestVersion(const std::set<std::string>& versions);
 
+/** @brief Check if the PSU is associated
+ *
+ * @param[in] psuInventoryPath - The PSU inventory path
+ * @param[in] assocs - The list of associations
+ *
+ * @return true if the psu is in the association list
+ */
+bool isAssociated(const std::string& psuInventoryPath,
+                  const AssociationList& assocs);
+
 /**
  * @brief The interface for utils
  */
@@ -119,6 +132,9 @@
     virtual std::string
         getLatestVersion(const std::set<std::string>& versions) const = 0;
 
+    virtual bool isAssociated(const std::string& psuInventoryPath,
+                              const AssociationList& assocs) const = 0;
+
     virtual any getPropertyImpl(sdbusplus::bus::bus& bus, const char* service,
                                 const char* path, const char* interface,
                                 const char* propertyName) const = 0;
@@ -155,6 +171,9 @@
     std::string
         getLatestVersion(const std::set<std::string>& versions) const override;
 
+    bool isAssociated(const std::string& psuInventoryPath,
+                      const AssociationList& assocs) const override;
+
     any getPropertyImpl(sdbusplus::bus::bus& bus, const char* service,
                         const char* path, const char* interface,
                         const char* propertyName) const override;
@@ -193,6 +212,12 @@
     return getUtils().getLatestVersion(versions);
 }
 
+inline bool isAssociated(const std::string& psuInventoryPath,
+                         const AssociationList& assocs)
+{
+    return getUtils().isAssociated(psuInventoryPath, assocs);
+}
+
 template <typename T>
 T getProperty(sdbusplus::bus::bus& bus, const char* service, const char* path,
               const char* interface, const char* propertyName)
diff --git a/test/mocked_utils.hpp b/test/mocked_utils.hpp
index cd85c3c..71aac99 100644
--- a/test/mocked_utils.hpp
+++ b/test/mocked_utils.hpp
@@ -30,6 +30,9 @@
     MOCK_CONST_METHOD1(getLatestVersion,
                        std::string(const std::set<std::string>& versions));
 
+    MOCK_CONST_METHOD2(isAssociated, bool(const std::string& psuInventoryPath,
+                                          const AssociationList& assocs));
+
     MOCK_CONST_METHOD5(getPropertyImpl,
                        any(sdbusplus::bus::bus& bus, const char* service,
                            const char* path, const char* interface,
diff --git a/test/test_utils.cpp b/test/test_utils.cpp
index a623cf5..afcbb47 100644
--- a/test/test_utils.cpp
+++ b/test/test_utils.cpp
@@ -1,3 +1,5 @@
+#include "config.h"
+
 #include "utils.hpp"
 
 #include <sdbusplus/test/sdbus_mock.hpp>
@@ -63,10 +65,23 @@
 
 TEST(Utils, GetVersionID)
 {
-
     auto ret = utils::getVersionId("");
     EXPECT_EQ("", ret);
 
     ret = utils::getVersionId("some version");
     EXPECT_EQ(8u, ret.size());
 }
+
+TEST(Utils, IsAssociated)
+{
+    std::string path = "/com/example/chassis/powersupply0";
+    utils::AssociationList assocs = {{ACTIVATION_FWD_ASSOCIATION,
+                                      ACTIVATION_REV_ASSOCIATION,
+                                      "a-different-path"}};
+
+    EXPECT_FALSE(utils::isAssociated(path, assocs));
+
+    assocs.emplace_back(ACTIVATION_FWD_ASSOCIATION, ACTIVATION_REV_ASSOCIATION,
+                        path);
+    EXPECT_TRUE(utils::isAssociated(path, assocs));
+}
