diff --git a/control/Makefile.am b/control/Makefile.am
index 31e86c0..9ca1797 100644
--- a/control/Makefile.am
+++ b/control/Makefile.am
@@ -10,6 +10,7 @@
 	main.cpp \
 	manager.cpp \
 	actions.cpp \
+	triggers.cpp \
 	zone.cpp
 
 nodist_phosphor_fan_control_SOURCES = \
diff --git a/control/functor.hpp b/control/functor.hpp
index ab5005d..77e95c8 100644
--- a/control/functor.hpp
+++ b/control/functor.hpp
@@ -30,6 +30,19 @@
 }
 
 /**
+ * @brief Create a trigger function object
+ *
+ * @param[in] trigger - The trigger being created
+ *
+ * @return - The created trigger function object
+ */
+template <typename T>
+auto make_trigger(T&& trigger)
+{
+   return Trigger(std::forward<T>(trigger));
+}
+
+/**
  * @brief Create a handler function object
  *
  * @param[in] handler - The handler being created
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 5f1de45..f9eb1ad 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -162,11 +162,13 @@
         e += "),\n"
     e += "},\n"
 
-    e += "TimerConf{\n"
+    e += "std::vector<Trigger>{\n"
     if ('timer' in event['triggers']) and \
        (event['triggers']['timer'] is not None):
+       e += "\tmake_trigger(trigger::timer(TimerConf{\n"
        e += "\t" + event['triggers']['timer']['interval'] + ",\n"
        e += "\t" + event['triggers']['timer']['type'] + "\n"
+       e += "\t}))\n"
     e += "},\n"
 
     e += "std::vector<Signal>{\n"
diff --git a/control/templates/defs.mako b/control/templates/defs.mako
index fd8d97d..89e01ca 100644
--- a/control/templates/defs.mako
+++ b/control/templates/defs.mako
@@ -58,11 +58,13 @@
 ),
 %endfor
 },
-TimerConf{
+std::vector<Trigger>{
     %if ('timer' in event['triggers']) and \
         (event['triggers']['timer'] is not None):
+    make_trigger(trigger::timer(TimerConf{
     ${event['triggers']['timer']['interval']},
     ${event['triggers']['timer']['type']}
+    }))
     %endif
 },
 std::vector<Signal>{
diff --git a/control/templates/fan_zone_defs.mako.cpp b/control/templates/fan_zone_defs.mako.cpp
index ad37579..c049516 100644
--- a/control/templates/fan_zone_defs.mako.cpp
+++ b/control/templates/fan_zone_defs.mako.cpp
@@ -11,6 +11,7 @@
 #include "handlers.hpp"
 #include "preconditions.hpp"
 #include "matches.hpp"
+#include "triggers.hpp"
 
 using namespace phosphor::fan::control;
 
@@ -155,11 +156,13 @@
                         ),
                         %endif
                         },
-                        TimerConf{
+                        std::vector<Trigger>{
                             %if ('timer' in event['pc']['triggers']) and \
                                 (event['pc']['triggers']['timer'] is not None):
+                            make_trigger(trigger::timer(TimerConf{
                             ${event['pc']['triggers']['pctime']['interval']},
                             ${event['pc']['triggers']['pctime']['type']}
+                        }))
                             %endif
                         },
                         std::vector<Signal>{
diff --git a/control/triggers.cpp b/control/triggers.cpp
new file mode 100644
index 0000000..5314a95
--- /dev/null
+++ b/control/triggers.cpp
@@ -0,0 +1,29 @@
+#include "triggers.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace control
+{
+namespace trigger
+{
+
+using namespace phosphor::fan;
+
+Trigger timer(TimerConf&& tConf)
+{
+    return [tConf = std::move(tConf)](control::Zone& zone,
+                                      const Group& group,
+                                      const std::vector<Action>& actions)
+    {
+        zone.addTimer(group,
+                      actions,
+                      tConf);
+    };
+}
+
+} // namespace trigger
+} // namespace control
+} // namespace fan
+} // namespace phosphor
diff --git a/control/triggers.hpp b/control/triggers.hpp
new file mode 100644
index 0000000..0a2e96a
--- /dev/null
+++ b/control/triggers.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "types.hpp"
+#include "zone.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace control
+{
+namespace trigger
+{
+
+/**
+ * @brief A trigger to start a timer for an event
+ * @details Creates and starts a timer according to the configuration given
+ * that will call an event's actions upon each timer expiration.
+ *
+ * @param[in] tConf - Timer configuration parameters
+ *
+ * @return Trigger lambda function
+ *     A Trigger function that creates and starts a timer
+ */
+Trigger timer(TimerConf&& tConf);
+
+} // namespace trigger
+} // namespace control
+} // namespace fan
+} // namespace phosphor
diff --git a/control/types.hpp b/control/types.hpp
index d58231a..a98718b 100644
--- a/control/types.hpp
+++ b/control/types.hpp
@@ -50,6 +50,9 @@
                                    sdbusplus::message::message&,
                                    Zone&)>;
 using Action = std::function<void(Zone&, const Group&)>;
+using Trigger = std::function<void(Zone&,
+                                   const Group&,
+                                   const std::vector<Action>&)>;
 
 constexpr auto pcPathPos = 0;
 constexpr auto pcIntfPos = 1;
@@ -80,11 +83,11 @@
 
 constexpr auto groupPos = 0;
 constexpr auto actionsPos = 1;
-constexpr auto timerConfPos = 2;
+constexpr auto triggerPos = 2;
 constexpr auto signalsPos = 3;
 using SetSpeedEvent = std::tuple<Group,
                                  std::vector<Action>,
-                                 TimerConf,
+                                 std::vector<Trigger>,
                                  std::vector<Signal>>;
 
 constexpr auto eventGroupPos = 0;
diff --git a/control/zone.cpp b/control/zone.cpp
index 3960533..90350a7 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -374,14 +374,18 @@
 
         _signalEvents.emplace_back(std::move(eventData), std::move(match));
     }
-    // Attach a timer to run the action of an event
-    auto timerConf = std::get<timerConfPos>(event);
-    if (std::get<intervalPos>(timerConf) != microseconds(0))
-    {
-        addTimer(std::get<groupPos>(event),
-                 std::get<actionsPos>(event),
-                 timerConf);
-    }
+    // Enable event triggers
+    std::for_each(
+        std::get<triggerPos>(event).begin(),
+        std::get<triggerPos>(event).end(),
+        [this, &event](auto const& trigger)
+        {
+            trigger(*this,
+                    std::get<groupPos>(event),
+                    std::get<actionsPos>(event));
+        }
+    );
+
     // Run action functions for initial event state
     std::for_each(
         std::get<actionsPos>(event).begin(),
@@ -407,14 +411,11 @@
         }
     }
     // Remove timers of the event
-    if (std::get<intervalPos>(std::get<timerConfPos>(event)) != seconds(0))
+    auto it = findTimer(std::get<groupPos>(event),
+                        std::get<actionsPos>(event));
+    if (it != std::end(getTimerEvents()))
     {
-        auto it = findTimer(std::get<groupPos>(event),
-                            std::get<actionsPos>(event));
-        if (it != std::end(getTimerEvents()))
-        {
-            removeTimer(it);
-        }
+        removeTimer(it);
     }
 }
 
