diff --git a/manager.cpp b/manager.cpp
index d19eeae..a1c4175 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -186,5 +186,57 @@
     }
 }
 
+// Set OperationalStatus functional according to the asserted state of the group
+void Manager::setOperationalStatus(const std::string& path, bool value) const
+{
+    using namespace phosphor::logging;
+
+    // Get endpoints from the rType
+    std::string fru = path + "/fru_fault";
+
+    // endpoint contains the vector of strings, where each string is a Inventory
+    // D-Bus object that this, associated with this LED Group D-Bus object
+    // pointed to by fru_fault
+    PropertyValue endpoint{};
+
+    try
+    {
+        endpoint = dBusHandler.getProperty(
+            fru, "xyz.openbmc_project.Association", "endpoints");
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        log<level::ERR>("Failed to get endpoints property",
+                        entry("ERROR=%s", e.what()),
+                        entry("PATH=%s", fru.c_str()));
+        return;
+    }
+
+    auto& endpoints = std::get<std::vector<std::string>>(endpoint);
+    if (endpoints.empty())
+    {
+        return;
+    }
+
+    for (const auto& fruInstancePath : endpoints)
+    {
+        // Set OperationalStatus by fru instance path
+        try
+        {
+            PropertyValue functionalValue{value};
+            dBusHandler.setProperty(
+                fruInstancePath,
+                "xyz.openbmc_project.State.Decorator.OperationalStatus",
+                "Functional", functionalValue);
+        }
+        catch (const sdbusplus::exception::SdBusError& e)
+        {
+            log<level::ERR>("Failed to set Functional property",
+                            entry("ERROR=%s", e.what()),
+                            entry("PATH=%s", fruInstancePath.c_str()));
+        }
+    }
+}
+
 } // namespace led
 } // namespace phosphor
