diff --git a/control/json/event.hpp b/control/json/event.hpp
index 05459c7..8c48f35 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -15,15 +15,16 @@
  */
 #pragma once
 
+#include "action.hpp"
 #include "config_base.hpp"
 #include "group.hpp"
-#include "json_parser.hpp"
-#include "types.hpp"
 
 #include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
 
+#include <memory>
 #include <optional>
+#include <tuple>
 
 namespace phosphor::fan::control::json
 {
@@ -44,7 +45,7 @@
  * control application source.
  *
  * When no events exist, the configured fans are set to their corresponding
- * zone's full_speed value.
+ * zone's `full_speed` value.
  */
 class Event : public ConfigBase
 {
@@ -61,7 +62,10 @@
     static constexpr auto precondGroups = 1;
     static constexpr auto precondEvents = 2;
     using Precondition =
-        std::tuple<std::string, std::vector<PrecondGroup>, std::vector<Event>>;
+        std::tuple<std::string,
+                   std::vector<std::tuple<std::string, std::string, std::string,
+                                          PropertyVariantType>>,
+                   std::vector<Event>>;
 
   public:
     /* JSON file name for events */
@@ -78,10 +82,12 @@
      * Constructor
      * Parses and populates a configuration event from JSON object data
      *
-     * @param[in] bus - sdbusplus bus object
      * @param[in] jsonObj - JSON object
+     * @param[in] bus - sdbusplus bus object
+     * @param[in] groups - Available groups that can be used
      */
-    Event(sdbusplus::bus::bus& bus, const json& jsonObj);
+    Event(const json& jsonObj, sdbusplus::bus::bus& bus,
+          std::map<configKey, std::unique_ptr<Group>>& groups);
 
     /**
      * @brief Get the precondition
@@ -104,16 +110,6 @@
     }
 
     /**
-     * @brief Get the triggers
-     *
-     * @return List of triggers for this event
-     */
-    inline const auto& getTriggers() const
-    {
-        return _triggers;
-    }
-
-    /**
      * @brief Get the actions
      *
      * @return List of actions to perform for the event
@@ -124,9 +120,6 @@
     }
 
   private:
-    /* Mapping of available group names & profiles to their group object */
-    static const std::map<configKey, std::unique_ptr<Group>> _availGrps;
-
     /* The sdbusplus bus object */
     sdbusplus::bus::bus& _bus;
 
@@ -136,29 +129,30 @@
     /* List of groups associated with the event */
     std::vector<eGroup> _groups;
 
-    /* List of triggers for this event */
-    std::vector<Trigger> _triggers;
-
     /* List of actions for this event */
-    std::vector<Action> _actions;
+    std::vector<std::unique_ptr<ActionBase>> _actions;
 
     /**
      * @brief Parse and set the event's precondition(OPTIONAL)
      *
      * @param[in] jsonObj - JSON object for the event
+     * @param[in] groups - Available groups that can be used
      *
      * Sets the precondition of the event in order to be enabled
      */
-    void setPrecond(const json& jsonObj);
+    void setPrecond(const json& jsonObj,
+                    std::map<configKey, std::unique_ptr<Group>>& groups);
 
     /**
      * @brief Parse and set the event's groups(OPTIONAL)
      *
      * @param[in] jsonObj - JSON object for the event
+     * @param[in] groups - Available groups that can be used
      *
      * Sets the list of groups associated with the event
      */
-    void setGroups(const json& jsonObj);
+    void setGroups(const json& jsonObj,
+                   std::map<configKey, std::unique_ptr<Group>>& groups);
 
     /**
      * @brief Parse and set the event's triggers
