diff --git a/control/json/event.cpp b/control/json/event.cpp
index 971c875..f02a590 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -36,9 +36,10 @@
 using namespace phosphor::logging;
 
 Event::Event(const json& jsonObj, sdbusplus::bus::bus& bus,
-             std::map<configKey, std::unique_ptr<Group>>& groups) :
+             std::map<configKey, std::unique_ptr<Group>>& groups,
+             std::map<configKey, std::unique_ptr<Zone>>& zones) :
     ConfigBase(jsonObj),
-    _bus(bus)
+    _bus(bus), _zones(zones)
 {
     // Event could have a precondition
     if (!jsonObj.contains("precondition"))
@@ -48,12 +49,12 @@
         {
             setGroups(jsonObj, groups);
         }
-        setTriggers(jsonObj);
         // Event actions are optional
         if (jsonObj.contains("actions"))
         {
-            setActions(jsonObj);
+            setActions(jsonObj, groups);
         }
+        setTriggers(jsonObj);
     }
     else
     {
@@ -137,17 +138,8 @@
     }
 }
 
-void Event::setTriggers(const json& jsonObj)
-{
-    if (!jsonObj.contains("triggers"))
-    {
-        log<level::ERR>("Missing required event triggers list",
-                        entry("JSON=%s", jsonObj.dump().c_str()));
-        throw std::runtime_error("Missing required event triggers list");
-    }
-}
-
-void Event::setActions(const json& jsonObj)
+void Event::setActions(const json& jsonObj,
+                       std::map<configKey, std::unique_ptr<Group>>& groups)
 {
     for (const auto& action : jsonObj["actions"])
     {
@@ -157,6 +149,10 @@
                             entry("JSON=%s", action.dump().c_str()));
             throw std::runtime_error("Missing required event action name");
         }
+        // TODO Append action specific groups to event groups list separate from
+        // each action in the event and pass reference of group to action
+        // TODO Consider supporting zones per action and pass a reference to the
+        // zone(s) the action should be run against
         auto actObj =
             ActionFactory::getAction(action["name"].get<std::string>(), action);
         if (actObj)
@@ -166,4 +162,14 @@
     }
 }
 
+void Event::setTriggers(const json& jsonObj)
+{
+    if (!jsonObj.contains("triggers"))
+    {
+        log<level::ERR>("Missing required event triggers list",
+                        entry("JSON=%s", jsonObj.dump().c_str()));
+        throw std::runtime_error("Missing required event triggers list");
+    }
+}
+
 } // namespace phosphor::fan::control::json
diff --git a/control/json/event.hpp b/control/json/event.hpp
index 4806763..4c4d387 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -76,9 +76,11 @@
      * @param[in] jsonObj - JSON object
      * @param[in] bus - sdbusplus bus object
      * @param[in] groups - Available groups that can be used
+     * @param[in] zones - Reference to the configured zones
      */
     Event(const json& jsonObj, sdbusplus::bus::bus& bus,
-          std::map<configKey, std::unique_ptr<Group>>& groups);
+          std::map<configKey, std::unique_ptr<Group>>& groups,
+          std::map<configKey, std::unique_ptr<Zone>>& zones);
 
     /**
      * @brief Get the precondition
@@ -120,6 +122,9 @@
     /* List of groups associated with the event */
     std::vector<Group> _groups;
 
+    /* Reference to the configured zones */
+    std::map<configKey, std::unique_ptr<Zone>>& _zones;
+
     /* List of actions for this event */
     std::vector<std::unique_ptr<ActionBase>> _actions;
 
@@ -146,6 +151,17 @@
                    std::map<configKey, std::unique_ptr<Group>>& groups);
 
     /**
+     * @brief Parse and set the event's actions(OPTIONAL)
+     *
+     * @param[in] jsonObj - JSON object for the event
+     * @param[in] groups - Available groups that can be used
+     *
+     * Sets the list of actions to perform for the event
+     */
+    void setActions(const json& jsonObj,
+                    std::map<configKey, std::unique_ptr<Group>>& groups);
+
+    /**
      * @brief Parse and set the event's triggers
      *
      * @param[in] jsonObj - JSON object for the event
@@ -153,15 +169,6 @@
      * Sets the list of triggers for the event
      */
     void setTriggers(const json& jsonObj);
-
-    /**
-     * @brief Parse and set the event's actions(OPTIONAL)
-     *
-     * @param[in] jsonObj - JSON object for the event
-     *
-     * Sets the list of actions to perform for the event
-     */
-    void setActions(const json& jsonObj);
 };
 
 } // namespace phosphor::fan::control::json
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 64921fc..b85bd32 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -96,7 +96,7 @@
     auto groups = getConfig<Group>(true, bus);
 
     // Load any events configured
-    _events = getConfig<Event>(true, bus, bus, groups);
+    _events = getConfig<Event>(true, bus, bus, groups, _zones);
 
     bus.request_name(CONTROL_BUSNAME);
 }
