diff --git a/manager/grouplayout.hpp b/manager/grouplayout.hpp
new file mode 100644
index 0000000..fa932fa
--- /dev/null
+++ b/manager/grouplayout.hpp
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "ledlayout.hpp"
+
+#include <string>
+#include <unordered_map>
+
+namespace phosphor
+{
+namespace led
+{
+/** @namespace Layout
+ *  @brief Depicts the LED and their mappings and group actions
+ */
+namespace Layout
+{
+
+/** @brief Name of the Group and its properties
+ */
+struct GroupLayout
+{
+    int priority = 0;
+    ActionSet actionSet;
+};
+
+struct CompareGroupLayout
+{
+    bool operator()(const Layout::GroupLayout* lhs,
+                    const Layout::GroupLayout* rhs) const
+    {
+        return lhs->priority < rhs->priority;
+    };
+};
+
+} // namespace Layout
+
+using GroupMap = std::unordered_map<std::string, Layout::GroupLayout>;
+
+} // namespace led
+} // namespace phosphor
diff --git a/manager/json-parser.hpp b/manager/json-parser.hpp
index 47f0d00..e92dfbc 100644
--- a/manager/json-parser.hpp
+++ b/manager/json-parser.hpp
@@ -1,5 +1,6 @@
 #include "config.h"
 
+#include "grouplayout.hpp"
 #include "json-config.hpp"
 #include "ledlayout.hpp"
 
@@ -129,10 +130,12 @@
     tmpPath /= groupName;
     auto objpath = tmpPath.string();
     auto members = entry.value("members", empty);
+    int priority = entry.value("Priority", 0);
 
     lg2::debug("config for '{GROUP}'", "GROUP", groupName);
 
     phosphor::led::ActionSet ledActions{};
+    phosphor::led::Layout::GroupLayout groupLayout{};
     for (const auto& member : members)
     {
         loadJsonConfigV1GroupMember(member, priorityMap, ledActions);
@@ -140,7 +143,10 @@
 
     // Generated an std::unordered_map of LedGroupNames to std::set of LEDs
     // containing the name and properties.
-    ledMap.emplace(objpath, ledActions);
+    groupLayout.actionSet = ledActions;
+    groupLayout.priority = priority;
+
+    ledMap.emplace(objpath, groupLayout);
 }
 
 /** @brief Load JSON config and return led map (JSON version 1)
diff --git a/manager/ledlayout.hpp b/manager/ledlayout.hpp
index 7fc896d..c11500f 100644
--- a/manager/ledlayout.hpp
+++ b/manager/ledlayout.hpp
@@ -51,7 +51,6 @@
 } // namespace Layout
 
 using ActionSet = std::set<Layout::LedAction>;
-using GroupMap = std::unordered_map<std::string, ActionSet>;
 
 } // namespace led
 } // namespace phosphor
diff --git a/manager/manager.cpp b/manager/manager.cpp
index ec02419..18d257b 100644
--- a/manager/manager.cpp
+++ b/manager/manager.cpp
@@ -37,16 +37,33 @@
 }
 
 // create the resulting new map from all currently asserted groups
-auto Manager::getNewMap(std::set<const ActionSet*> assertedGroups)
+static auto getNewMapWithGroupPriorities(
+    std::set<const Layout::GroupLayout*, Layout::CompareGroupLayout> sorted)
     -> std::map<LedName, Layout::LedAction>
 {
     std::map<LedName, Layout::LedAction> newState;
 
     // update the new map with the desired state
-    for (const auto it : assertedGroups)
+    for (const auto it : sorted)
     {
         // apply all led actions of that group to the map
-        for (auto action : *it)
+        for (Layout::LedAction action : it->actionSet)
+        {
+            newState[action.name] = action;
+        }
+    }
+    return newState;
+}
+
+static std::map<LedName, Layout::LedAction> getNewMapWithLEDPriorities(
+    std::set<const Layout::GroupLayout*> assertedGroups)
+{
+    std::map<LedName, Layout::LedAction> newState;
+    // update the new map with the desired state
+    for (const Layout::GroupLayout* it : assertedGroups)
+    {
+        // apply all led actions of that group to the map
+        for (Layout::LedAction action : it->actionSet)
         {
             applyGroupAction(newState, action);
         }
@@ -54,6 +71,38 @@
     return newState;
 }
 
+// create the resulting new map from all currently asserted groups
+std::map<LedName, Layout::LedAction>
+    Manager::getNewMap(std::set<const Layout::GroupLayout*> assertedGroups)
+{
+    std::map<LedName, Layout::LedAction> newState;
+
+    std::set<const Layout::GroupLayout*, Layout::CompareGroupLayout> sorted;
+
+    bool groupPriorities = false;
+
+    for (const Layout::GroupLayout* it : assertedGroups)
+    {
+        sorted.insert(it);
+
+        if (it->priority != 0)
+        {
+            groupPriorities = true;
+        }
+    }
+
+    if (groupPriorities)
+    {
+        newState = getNewMapWithGroupPriorities(sorted);
+    }
+    else
+    {
+        newState = getNewMapWithLEDPriorities(assertedGroups);
+    }
+
+    return newState;
+}
+
 // Assert -or- De-assert
 bool Manager::setGroupState(const std::string& path, bool assert,
                             ActionSet& ledsAssert, ActionSet& ledsDeAssert)
diff --git a/manager/manager.hpp b/manager/manager.hpp
index 24a6c17..ea37798 100644
--- a/manager/manager.hpp
+++ b/manager/manager.hpp
@@ -1,5 +1,6 @@
 #pragma once
 
+#include "grouplayout.hpp"
 #include "ledlayout.hpp"
 #include "utils.hpp"
 
@@ -93,7 +94,7 @@
     }
 
     /* create the resulting map from all currently asserted groups */
-    static auto getNewMap(std::set<const ActionSet*> assertedGroups)
+    static auto getNewMap(std::set<const Layout::GroupLayout*> assertedGroups)
         -> std::map<LedName, Layout::LedAction>;
 
     /** @brief Given a group name, applies the action on the group
@@ -151,7 +152,7 @@
     DBusHandler dBusHandler;
 
     /** @brief Pointers to groups that are in asserted state */
-    std::set<const ActionSet*> assertedGroups;
+    std::set<const Layout::GroupLayout*> assertedGroups;
 
     /** Map of led name to current state */
     std::map<std::string, Layout::LedAction> ledStateMap;
diff --git a/test/led-test-map.hpp b/test/led-test-map.hpp
index 60d0363..8c58506 100644
--- a/test/led-test-map.hpp
+++ b/test/led-test-map.hpp
@@ -1,229 +1,250 @@
+#include "grouplayout.hpp"
 #include "ledlayout.hpp"
 
 static const phosphor::led::GroupMap singleLedOn = {
     {"/xyz/openbmc_project/ledmanager/groups/SingleLed",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+      }}},
 };
 
 static const phosphor::led::GroupMap singleLedBlink = {
     {"/xyz/openbmc_project/ledmanager/groups/SingleLed",
-     {
-         {"One", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+      }}},
 };
 
 static const phosphor::led::GroupMap singleLedBlinkOverrideOn = {
     {"/xyz/openbmc_project/ledmanager/groups/SingleLed",
-     {
-         {"One", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap multipleLedsOn = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLeds",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap multipleLedsBlink = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLeds",
-     {
-         {"One", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+      }}},
 };
 
 static const phosphor::led::GroupMap multipleLedsOnAndBlink = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsMix",
-     {
-         {"One", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Four", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Five", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Four", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Five", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+      }}},
 };
 
 static const phosphor::led::GroupMap twoGroupsWithDistinctLEDsOn = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+      }}},
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-     {
-         {"Four", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Five", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::Blink},
-         {"Six", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"Four", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Five", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::Blink},
+          {"Six", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap twoGroupsWithOneComonLEDOn = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-     {
-         {"Four", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Six", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"Four", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Six", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap
     twoGroupsWithOneComonLEDOnOneLEDBlinkPriority = {
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-         {
-             {"One", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Two", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-         }},
+         {0,
+          {
+              {"One", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Two", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+          }}},
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-         {
-             {"Four", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-             {"Six", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-         }},
+         {0,
+          {
+              {"Four", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+              {"Six", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+          }}},
 };
 
 static const phosphor::led::GroupMap twoGroupsWithOneComonLEDOnPriority = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-     {
-         {"Four", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Six", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"Four", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Six", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap twoGroupsWithMultiplComonLEDOn = {
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-     {
-         {"One", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"One", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
     {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-     {
-         {"Two", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Six", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Three", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-         {"Seven", phosphor::led::Layout::Action::On, 0, 0,
-          phosphor::led::Layout::Action::On},
-     }},
+     {0,
+      {
+          {"Two", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Six", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Three", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+          {"Seven", phosphor::led::Layout::Action::On, 0, 0,
+           phosphor::led::Layout::Action::On},
+      }}},
 };
 
 static const phosphor::led::GroupMap
     twoGroupsWithMultipleComonLEDInDifferentState = {
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-         {
-             {"One", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Four", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-         }},
+         {0,
+          {
+              {"One", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Four", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+          }}},
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-         {
-             {"Two", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Five", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Six", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-         }},
+         {0,
+          {
+              {"Two", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Five", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Six", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+          }}},
 };
 
 static const phosphor::led::GroupMap
     twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority = {
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet",
-         {
-             {"One", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-             {"Four", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-         }},
+         {0,
+          {
+              {"One", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+              {"Four", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+          }}},
         {"/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet",
-         {
-             {"Two", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Three", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-             {"Five", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Six", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::On},
-             {"Ten", phosphor::led::Layout::Action::On, 0, 0,
-              phosphor::led::Layout::Action::Blink},
-         }},
+         {0,
+          {
+              {"Two", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Three", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+              {"Five", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Six", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::On},
+              {"Ten", phosphor::led::Layout::Action::On, 0, 0,
+               phosphor::led::Layout::Action::Blink},
+          }}},
 };
diff --git a/test/utest-led-json.cpp b/test/utest-led-json.cpp
index 853f4d1..36eb404 100644
--- a/test/utest-led-json.cpp
+++ b/test/utest-led-json.cpp
@@ -16,9 +16,9 @@
     ASSERT_EQ(ledMap.contains(powerOn), true);
     ASSERT_EQ(ledMap.contains(enclosureIdentify), true);
 
-    auto& bmcBootedActions = ledMap.at(bmcBooted);
-    auto& powerOnActions = ledMap.at(powerOn);
-    auto& enclosureIdentifyActions = ledMap.at(enclosureIdentify);
+    auto& bmcBootedActions = ledMap.at(bmcBooted).actionSet;
+    auto& powerOnActions = ledMap.at(powerOn).actionSet;
+    auto& enclosureIdentifyActions = ledMap.at(enclosureIdentify).actionSet;
 
     for (const auto& group : bmcBootedActions)
     {
