diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 03346bc..5f1de45 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -163,8 +163,10 @@
     e += "},\n"
 
     e += "TimerConf{\n"
-    e += "\t" + event['timer']['interval'] + ",\n"
-    e += "\t" + event['timer']['type'] + "\n"
+    if ('timer' in event['triggers']) and \
+       (event['triggers']['timer'] is not None):
+       e += "\t" + event['triggers']['timer']['interval'] + ",\n"
+       e += "\t" + event['triggers']['timer']['type'] + "\n"
     e += "},\n"
 
     e += "std::vector<Signal>{\n"
@@ -342,6 +344,19 @@
     return signals
 
 
+def getTimer(eTrig):
+    """
+    Extracts and constructs the required parameters for an
+    event timer.
+    """
+    timer = {}
+    timer['interval'] = (
+        "static_cast<std::chrono::microseconds>" +
+        "(" + str(eTrig['interval']) + ")")
+    timer['type'] = "TimerType::" + str(eTrig['type'])
+    return timer
+
+
 def getActions(zNum, zCond, edata, actions, events):
     """
     Extracts and constructs the make_action function call for
@@ -407,11 +422,10 @@
                         param += ("size_t>(" + str(eActions[p]).lower() + ")")
                 else:
                     if p == 'timer':
+                        t = getTimer(eActions[p])
                         param = (
-                            "TimerConf{static_cast<std::chrono::seconds>(" +
-                            str(eActions[p]['delay']) + "), " +
-                            "TimerType::" +
-                            str(eActions[p]['type']) + "}")
+                            "TimerConf{" + t['interval'] + "," +
+                            t['type'] + "}")
                     else:
                         param += (str(eActions[p]['type']).lower() + ">(")
                         if p != 'map':
@@ -459,27 +473,14 @@
     event['triggers'] = {}
     for trig in e['triggers']:
         triggers = []
-        if (trig['name'] == "signal"):
+        if (trig['name'] == "timer"):
+            event['triggers']['timer'] = getTimer(trig)
+        elif (trig['name'] == "signal"):
             if ('signals' not in event['triggers']):
                 event['triggers']['signals'] = []
             triggers = getSignal(event['groups'], trig, events_data)
             event['triggers']['signals'].extend(triggers)
 
-    # Add optional action call timer
-    timer = {}
-    interval = "static_cast<std::chrono::seconds>"
-    if ('timer' in e) and \
-       (e['timer'] is not None):
-        timer['interval'] = (interval +
-                             "(" +
-                             str(e['timer']['interval']) +
-                             ")")
-    else:
-        timer['interval'] = (interval +
-                             "(" + str(0) + ")")
-    timer['type'] = "TimerType::repeating"
-    event['timer'] = timer
-
     return event
 
 
@@ -544,27 +545,14 @@
     precond['triggers'] = {}
     for trig in event['precondition']['triggers']:
         triggers = []
-        if (trig['name'] == "signal"):
+        if (trig['name'] == "timer"):
+            precond['triggers']['pctime'] = getTimer(trig)
+        elif (trig['name'] == "signal"):
             if ('pcsigs' not in precond['triggers']):
                 precond['triggers']['pcsigs'] = []
             triggers = getSignal(precond['pcgrps'], trig, events_data)
             precond['triggers']['pcsigs'].extend(triggers)
 
-    # Add optional action call timer
-    timer = {}
-    interval = "static_cast<std::chrono::seconds>"
-    if ('timer' in event['precondition']) and \
-       (event['precondition']['timer'] is not None):
-        timer['interval'] = (interval +
-                             "(" +
-                             str(event['precondition']['timer']['interval']) +
-                             ")")
-    else:
-        timer['interval'] = (interval +
-                             "(" + str(0) + ")")
-    timer['type'] = "TimerType::repeating"
-    precond['pctime'] = timer
-
     return precond
 
 
diff --git a/control/templates/defs.mako b/control/templates/defs.mako
index 30045f6d..fd8d97d 100644
--- a/control/templates/defs.mako
+++ b/control/templates/defs.mako
@@ -59,8 +59,11 @@
 %endfor
 },
 TimerConf{
-    ${event['timer']['interval']},
-    ${event['timer']['type']}
+    %if ('timer' in event['triggers']) and \
+        (event['triggers']['timer'] is not None):
+    ${event['triggers']['timer']['interval']},
+    ${event['triggers']['timer']['type']}
+    %endif
 },
 std::vector<Signal>{
 %for s in event['triggers']['signals']:
diff --git a/control/templates/fan_zone_defs.mako.cpp b/control/templates/fan_zone_defs.mako.cpp
index a4ba615..ad37579 100644
--- a/control/templates/fan_zone_defs.mako.cpp
+++ b/control/templates/fan_zone_defs.mako.cpp
@@ -156,8 +156,11 @@
                         %endif
                         },
                         TimerConf{
-                            ${event['pc']['pctime']['interval']},
-                            ${event['pc']['pctime']['type']}
+                            %if ('timer' in event['pc']['triggers']) and \
+                                (event['pc']['triggers']['timer'] is not None):
+                            ${event['pc']['triggers']['pctime']['interval']},
+                            ${event['pc']['triggers']['pctime']['type']}
+                            %endif
                         },
                         std::vector<Signal>{
                         %for s in event['pc']['triggers']['pcsigs']:
diff --git a/control/types.hpp b/control/types.hpp
index dcc1b8c..d58231a 100644
--- a/control/types.hpp
+++ b/control/types.hpp
@@ -71,7 +71,7 @@
     oneshot,
     repeating,
 };
-using TimerConf = std::tuple<std::chrono::seconds,
+using TimerConf = std::tuple<std::chrono::microseconds,
                              TimerType>;
 
 constexpr auto sigMatchPos = 0;
diff --git a/control/zone.cpp b/control/zone.cpp
index fddca53..3960533 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -376,7 +376,7 @@
     }
     // Attach a timer to run the action of an event
     auto timerConf = std::get<timerConfPos>(event);
-    if (std::get<intervalPos>(timerConf) != seconds(0))
+    if (std::get<intervalPos>(timerConf) != microseconds(0))
     {
         addTimer(std::get<groupPos>(event),
                  std::get<actionsPos>(event),
