diff --git a/control/zone.cpp b/control/zone.cpp
index 3a0b48b..3077f08 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -335,17 +335,18 @@
 
 void Zone::removeEvent(const SetSpeedEvent& event)
 {
-    // Remove triggers of the event
-    for (auto& trig : std::get<triggerPos>(event))
+    // Remove event signals
+    auto sigIter = _signalEvents.find(std::get<sseNamePos>(event));
+    if (sigIter != _signalEvents.end())
     {
-        auto it = findSignal(trig,
-                             std::get<groupPos>(event),
-                             std::get<actionsPos>(event));
-        if (it != std::end(getSignalEvents()))
+        auto& signals = sigIter->second;
+        for (auto it = signals.begin(); it != signals.end(); ++it)
         {
             removeSignal(it);
         }
+        _signalEvents.erase(sigIter);
     }
+
     // Remove timers of the event
     auto it = findTimer(std::get<groupPos>(event),
                         std::get<actionsPos>(event));
@@ -355,39 +356,6 @@
     }
 }
 
-std::vector<SignalEvent>::iterator Zone::findSignal(
-        const Trigger& signal,
-        const Group& eGroup,
-        const std::vector<Action>& eActions)
-{
-    // Find the signal in the event to be removed
-    for (auto it = _signalEvents.begin(); it != _signalEvents.end(); ++ it)
-    {
-        const auto& seEventData = *std::get<signalEventDataPos>(*it);
-        if (eGroup == std::get<eventGroupPos>(seEventData) &&
-            eActions.size() == std::get<eventActionsPos>(seEventData).size())
-        {
-            // TODO openbmc/openbmc#2328 - Use the function target
-            // for comparison
-            auto actsEqual = [](auto const& a1,
-                                auto const& a2)
-                    {
-                        return a1.target_type().name() ==
-                               a2.target_type().name();
-                    };
-            if (std::equal(eActions.begin(),
-                           eActions.end(),
-                           std::get<eventActionsPos>(seEventData).begin(),
-                           actsEqual))
-            {
-                return it;
-            }
-        }
-    }
-
-    return _signalEvents.end();
-}
-
 std::vector<TimerEvent>::iterator Zone::findTimer(
         const Group& eventGroup,
         const std::vector<Action>& eventActions)
