diff --git a/control/json/event.cpp b/control/json/event.cpp
index 7bb26ec..6e2c080 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -42,25 +42,17 @@
     ConfigBase(jsonObj),
     _bus(util::SDBusPlus::getBus()), _manager(mgr), _zones(zones)
 {
-    // Event could have a precondition
-    if (!jsonObj.contains("precondition"))
+    // Event groups are optional
+    if (jsonObj.contains("groups"))
     {
-        // Event groups are optional
-        if (jsonObj.contains("groups"))
-        {
-            setGroups(jsonObj, _groups);
-        }
-        // Event actions are optional
-        if (jsonObj.contains("actions"))
-        {
-            setActions(jsonObj);
-        }
-        setTriggers(jsonObj);
+        setGroups(jsonObj, _groups);
     }
-    else
+    // Event actions are optional
+    if (jsonObj.contains("actions"))
     {
-        setPrecond(jsonObj);
+        setActions(jsonObj);
     }
+    setTriggers(jsonObj);
 }
 
 auto& Event::getAvailGroups()
@@ -104,21 +96,6 @@
     }
 }
 
-void Event::setPrecond(const json& jsonObj)
-{
-    const auto& precond = jsonObj["precondition"];
-    if (!precond.contains("name") || !precond.contains("groups") ||
-        !precond.contains("triggers") || !precond.contains("events"))
-    {
-        log<level::ERR>("Missing required event precondition attributes",
-                        entry("JSON=%s", precond.dump().c_str()));
-        throw std::runtime_error(
-            "Missing required event precondition attributes");
-    }
-    setGroups(precond, _groups);
-    setTriggers(precond);
-}
-
 void Event::setGroups(const json& jsonObj, std::vector<Group>& groups)
 {
     auto& availGroups = getAvailGroups();
