diff --git a/src/generated.cpp b/src/generated.cpp
new file mode 100644
index 0000000..6ef7cd1
--- /dev/null
+++ b/src/generated.cpp
@@ -0,0 +1,184 @@
+#include "data_types.hpp"
+#include "functor.hpp"
+#include "monitor.hpp"
+#include "conditions.hpp"
+#include "actions.hpp"
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+// Example vector of sensors constructing a group
+static Group fan_zone_group = {
+    std::make_tuple(
+        "/xyz/openbmc_project/sensors/fan_tach/fan0",
+        static_cast<int64_t>(0)
+    ),
+    std::make_tuple(
+        "/xyz/openbmc_project/sensors/fan_tach/fan1",
+        static_cast<int64_t>(0)
+    ),
+    std::make_tuple(
+        "/xyz/openbmc_project/sensors/fan_tach/fan2",
+        static_cast<int64_t>(0)
+    ),
+    std::make_tuple(
+        "/xyz/openbmc_project/sensors/fan_tach/fan3",
+        static_cast<int64_t>(0)
+    )
+};
+
+const std::vector<std::tuple<std::vector<std::shared_ptr<Event>>,
+                             std::vector<Action>>>
+    Monitor::events
+{ // Example vector of Events with START trigger
+    {std::make_tuple(std::vector<std::shared_ptr<Event>>(
+        { // Example vector of StartEvent
+            std::make_shared<StartEvent>(
+                std::vector<Condition>(
+                    { // Example vector of StartEvent conditions
+                        make_condition(propertyStart<int64_t>(
+                            "/xyz/openbmc_project/sensors/fan_tach/fan0",
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan0",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        )),
+                        make_condition(propertyStart<int64_t>(
+                            "/xyz/openbmc_project/sensors/fan_tach/fan1",
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan1",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        )),
+                        make_condition(propertyStart<int64_t>(
+                            "/xyz/openbmc_project/sensors/fan_tach/fan2",
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan2",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        )),
+                        make_condition(propertyStart<int64_t>(
+                            "/xyz/openbmc_project/sensors/fan_tach/fan3",
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan3",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        )),
+                    }
+                )
+            ),
+            std::make_shared<SignalEvent>(
+                "interface='org.freedesktop.DBus.Properties',"
+                "member='PropertiesChanged',"
+                "type='signal',"
+                "path='/xyz/openbmc_project/sensors/fan_tach/fan0'",
+                std::vector<Condition>(
+                    { // Example vector of SignalEvent conditions
+                        make_condition(propertySignal<int64_t>(
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan0",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        ))
+                    }
+                )
+            ),
+            std::make_shared<SignalEvent>(
+                "interface='org.freedesktop.DBus.Properties',"
+                "member='PropertiesChanged',"
+                "type='signal',"
+                "path='/xyz/openbmc_project/sensors/fan_tach/fan1'",
+                std::vector<Condition>(
+                    { // Example vector of SignalEvent conditions
+                        make_condition(propertySignal<int64_t>(
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan1",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        ))
+                    }
+                )
+            ),
+            std::make_shared<SignalEvent>(
+                "interface='org.freedesktop.DBus.Properties',"
+                "member='PropertiesChanged',"
+                "type='signal',"
+                "path='/xyz/openbmc_project/sensors/fan_tach/fan2'",
+                std::vector<Condition>(
+                    { // Example vector of SignalEvent conditions
+                        make_condition(propertySignal<int64_t>(
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan2",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        ))
+                    }
+                )
+            ),
+            std::make_shared<SignalEvent>(
+                "interface='org.freedesktop.DBus.Properties',"
+                "member='PropertiesChanged',"
+                "type='signal',"
+                "path='/xyz/openbmc_project/sensors/fan_tach/fan3'",
+                std::vector<Condition>(
+                    { // Example vector of SignalEvent conditions
+                        make_condition(propertySignal<int64_t>(
+                            "xyz.openbmc_project.Sensor.Value",
+                            "Value",
+                            condition::countAtOrAbove(
+                                fan_zone_group,
+                                "/xyz/openbmc_project/sensors/fan_tach/fan3",
+                                static_cast<size_t>(3),
+                                static_cast<int64_t>(8000ll)
+                            )
+                        ))
+                    }
+                )
+            )
+        }),
+        std::vector<Action>(
+        {
+            make_action(
+                action::log_error(
+                    "ERROR: Number of fans at or above 8000rpms reached"
+                )
+            )
+        })
+    )}
+};
+
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor
