diff --git a/control/json/event.cpp b/control/json/event.cpp
index 082d0bf..a1392e5 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -59,9 +59,35 @@
 
 void Event::enable()
 {
-    for (const auto& trigger : _triggers)
+    for (const auto& [type, trigger] : _triggers)
     {
-        trigger(getName(), _manager, _groups, _actions);
+        // Don't call the powerOn or powerOff triggers
+        if (type.find("power") == std::string::npos)
+        {
+            trigger(getName(), _manager, _groups, _actions);
+        }
+    }
+}
+
+void Event::powerOn()
+{
+    for (const auto& [type, trigger] : _triggers)
+    {
+        if (type == "poweron")
+        {
+            trigger(getName(), _manager, _groups, _actions);
+        }
+    }
+}
+
+void Event::powerOff()
+{
+    for (const auto& [type, trigger] : _triggers)
+    {
+        if (type == "poweroff")
+        {
+            trigger(getName(), _manager, _groups, _actions);
+        }
     }
 }
 
@@ -266,6 +292,7 @@
         if (trigFunc != trigger::triggers.end())
         {
             _triggers.emplace_back(
+                trigFunc->first,
                 trigFunc->second(jsonTrig, getName(), _actions));
         }
         else
diff --git a/control/json/event.hpp b/control/json/event.hpp
index 78bc633..e4e01ea 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -79,6 +79,16 @@
     void enable();
 
     /**
+     * @brief Call any power on triggers
+     */
+    void powerOn();
+
+    /**
+     * @brief Call any power off triggers
+     */
+    void powerOff();
+
+    /**
      * @brief Clear all groups available for events
      */
     static void clearAllGroups()
@@ -147,8 +157,8 @@
     /* List of actions for this event */
     std::vector<std::unique_ptr<ActionBase>> _actions;
 
-    /* List of trigger enablement functions for this event */
-    std::vector<trigger::enableTrigger> _triggers;
+    /* List of trigger type and enablement functions for this event */
+    std::vector<std::tuple<std::string, trigger::enableTrigger>> _triggers;
 
     /* All groups available to be configred on events */
     static std::map<configKey, std::unique_ptr<Group>> allGroups;
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 61924ea..20f13e9 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -233,6 +233,16 @@
         std::for_each(_zones.begin(), _zones.end(), [](const auto& entry) {
             entry.second->setTarget(entry.second->getPoweronTarget());
         });
+
+        // Tell events to run their power on triggers
+        std::for_each(_events.begin(), _events.end(),
+                      [](const auto& entry) { entry.second->powerOn(); });
+    }
+    else
+    {
+        // Tell events to run their power off triggers
+        std::for_each(_events.begin(), _events.end(),
+                      [](const auto& entry) { entry.second->powerOff(); });
     }
 }
 
diff --git a/control/json/triggers/trigger.hpp b/control/json/triggers/trigger.hpp
index ced50d7..c8847c4 100644
--- a/control/json/triggers/trigger.hpp
+++ b/control/json/triggers/trigger.hpp
@@ -29,6 +29,8 @@
 static const std::map<std::string, createTrigger> triggers = {
     {"timer", timer::triggerTimer},
     {"signal", signal::triggerSignal},
-    {"init", init::triggerInit}};
+    {"init", init::triggerInit},
+    {"poweron", init::triggerInit},
+    {"poweroff", init::triggerInit}};
 
 } // namespace phosphor::fan::control::json::trigger
