diff --git a/configure.ac b/configure.ac
index e698150..4958bc2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,6 +96,12 @@
        AC_DEFINE_UNQUOTED([FAN_ZONE_YAML_FILE], ["$FAN_ZONE_YAML_FILE"],
                           [The fan zone definition file to use])
 
+      AC_ARG_VAR(ZONE_EVENTS_YAML_FILE,
+                 [The zone events definition file to use])
+      AS_IF([test "x$ZONE_EVENTS_YAML_FILE" != "x"], [
+          AC_SUBST([ZONE_EVENTS_ARG], ["-e ${ZONE_EVENTS_YAML_FILE}"])
+      ])
+
        AC_ARG_VAR(FAN_ZONE_OUTPUT_DIR,
                   [The output directory for the generated fan zone data file])
        AS_IF([test "x$FAN_ZONE_OUTPUT_DIR" == "x"],
@@ -107,6 +113,7 @@
                 [$PYTHON ${srcdir}/control/gen-fan-zone-defs.py \
                          -f $FAN_DEF_YAML_FILE \
                          -z $FAN_ZONE_YAML_FILE \
+                         $ZONE_EVENTS_ARG \
                          -o $FAN_ZONE_OUTPUT_DIR])
        AC_CONFIG_FILES([control/Makefile])
 ])
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 04f206f..221b322 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -37,6 +37,20 @@
                                          }
                                      },
                                      %endfor
+                                 },
+                                 std::vector<SetSpeedEvent>{
+                                 %for event in zone['events']:
+                                    SetSpeedEvent{
+                                        Group{
+                                        %for member in event['group']:
+                                        {
+                                            "${member['name']}",
+                                            {"${member['interface']}",
+                                             "${member['property']}"}
+                                        },
+                                        %endfor
+                                    },
+                                 %endfor
                                  }
                   },
               %endfor
@@ -47,6 +61,37 @@
 '''
 
 
+def getEventsInZone(zone_num, events_data):
+    """
+    Constructs the event entries defined for each zone using the events yaml
+    provided.
+    """
+    events = []
+    if 'events' in events_data:
+        for e in events_data['events']:
+            for z in e['zone_conditions']:
+                if zone_num not in z['zones']:
+                    continue
+
+            event = {}
+            # Add set speed event group
+            group = []
+            groups = next(g for g in events_data['groups']
+                          if g['name'] == e['group'])
+            for member in groups['members']:
+                members = {}
+                members['name'] = ("/xyz/openbmc_project/" +
+                                   groups['type'] +
+                                   member)
+                members['interface'] = e['interface']
+                members['property'] = e['property']['name']
+                group.append(members)
+            event['group'] = group
+            events.append(event)
+
+    return events
+
+
 def getFansInZone(zone_num, profiles, fan_data):
     """
     Parses the fan definition YAML files to find the fans
@@ -78,7 +123,7 @@
     return fans
 
 
-def buildZoneData(zone_data, fan_data):
+def buildZoneData(zone_data, fan_data, events_data):
     """
     Combines the zone definition YAML and fan
     definition YAML to create a data structure defining
@@ -115,11 +160,13 @@
                 profiles = z['cooling_profiles']
 
             fans = getFansInZone(z['zone'], profiles, fan_data)
+            events = getEventsInZone(z['zone'], events_data)
 
             if len(fans) == 0:
                 sys.exit("Didn't find any fans in zone " + str(zone['num']))
 
             zone['fans'] = fans
+            zone['events'] = events
             zones.append(zone)
 
         zone_group['zones'] = zones
@@ -138,6 +185,8 @@
     parser.add_argument('-f', '--fan_yaml', dest='fan_yaml',
                         default="example/fans.yaml",
                         help='fan definitional yaml')
+    parser.add_argument('-e', '--events_yaml', dest='events_yaml',
+                        help='events to set speeds yaml')
     parser.add_argument('-o', '--output_dir', dest='output_dir',
                         default=".",
                         help='output directory')
@@ -153,8 +202,13 @@
     with open(args.fan_yaml, 'r') as fan_input:
         fan_data = yaml.safe_load(fan_input) or {}
 
+    events_data = {}
+    if args.events_yaml:
+        with open(args.events_yaml, 'r') as events_input:
+            events_data = yaml.safe_load(events_input) or {}
+
     zone_config = buildZoneData(zone_data.get('zone_configuration', {}),
-                                fan_data)
+                                fan_data, events_data)
 
     manager_config = zone_data.get('manager_configuration', {})
 
