diff --git a/monitor/fan_defs.hpp b/monitor/fan_defs.hpp
index 2cfd44a..b766f8e 100644
--- a/monitor/fan_defs.hpp
+++ b/monitor/fan_defs.hpp
@@ -4,3 +4,6 @@
 
 extern const std::vector<phosphor::fan::monitor::FanDefinition>
 fanDefinitions;
+
+extern const std::vector<phosphor::fan::monitor::CreateGroupFunction>
+trustGroups;
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py
index 4e49787..1590484 100755
--- a/monitor/gen-fan-monitor-defs.py
+++ b/monitor/gen-fan-monitor-defs.py
@@ -19,12 +19,14 @@
 tmpl = '''/* This is a generated file. */
 #include "fan_defs.hpp"
 #include "types.hpp"
+#include "groups.hpp"
 
 using namespace phosphor::fan::monitor;
+using namespace phosphor::fan::trust;
 
 const std::vector<FanDefinition> fanDefinitions
 {
-%for fan_data in data:
+%for fan_data in data.get('fans', {}):
     FanDefinition{"${fan_data['inventory']}",
                   ${fan_data['allowed_out_of_range_time']},
                   ${fan_data['deviation']},
@@ -41,6 +43,29 @@
     },
 %endfor
 };
+
+##Function to generate the group creation lambda.
+##If a group were to ever need a different constructor,
+##it could be handled here.
+<%def name="get_lambda_contents(group)">
+            std::vector<std::string> names{
+            %for sensor in group['sensors']:
+                "${sensor['name']}",
+            %endfor
+            };
+            return std::make_unique<${group['class']}>(names);
+</%def>
+const std::vector<CreateGroupFunction> trustGroups
+{
+%for group in data.get('sensor_trust_groups', {}):
+    {
+        []()
+        {\
+${get_lambda_contents(group)}\
+        }
+    },
+%endfor
+};
 '''
 
 
@@ -64,7 +89,7 @@
         monitor_data = yaml.safe_load(monitor_input) or {}
 
     #Do some minor input validation
-    for fan in monitor_data:
+    for fan in monitor_data.get('fans', {}):
         if ((fan['deviation'] < 0) or (fan['deviation'] > 100)):
             sys.exit("Invalid deviation value " + str(fan['deviation']))
 
diff --git a/monitor/groups.hpp b/monitor/groups.hpp
new file mode 100644
index 0000000..a2a98d9
--- /dev/null
+++ b/monitor/groups.hpp
@@ -0,0 +1,3 @@
+#pragma once
+
+#include "nonzero_speed_trust.hpp"
