diff --git a/thresholds.hpp b/thresholds.hpp
index b01d86d..aa77f7f 100644
--- a/thresholds.hpp
+++ b/thresholds.hpp
@@ -49,6 +49,30 @@
     {
         return warningAlarmLow(std::forward<Args>(args)...);
     }
+
+    template <typename... Args>
+    auto alarmHighSignalAsserted(Args... args)
+    {
+        return warningHighAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmHighSignalDeasserted(Args... args)
+    {
+        return warningHighAlarmDeasserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalAsserted(Args... args)
+    {
+        return warningLowAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalDeasserted(Args... args)
+    {
+        return warningLowAlarmDeasserted(std::forward<Args>(args)...);
+    }
 };
 
 template <>
@@ -77,6 +101,30 @@
     {
         return criticalAlarmLow(std::forward<Args>(args)...);
     }
+
+    template <typename... Args>
+    auto alarmHighSignalAsserted(Args... args)
+    {
+        return criticalHighAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmHighSignalDeasserted(Args... args)
+    {
+        return criticalHighAlarmDeasserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalAsserted(Args... args)
+    {
+        return criticalLowAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalDeasserted(Args... args)
+    {
+        return criticalLowAlarmDeasserted(std::forward<Args>(args)...);
+    }
 };
 
 template <>
@@ -105,6 +153,30 @@
     {
         return softShutdownAlarmLow(std::forward<Args>(args)...);
     }
+
+    template <typename... Args>
+    auto alarmHighSignalAsserted(Args... args)
+    {
+        return softShutdownHighAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmHighSignalDeasserted(Args... args)
+    {
+        return softShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalAsserted(Args... args)
+    {
+        return softShutdownLowAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalDeasserted(Args... args)
+    {
+        return softShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
+    }
 };
 
 template <>
@@ -133,6 +205,30 @@
     {
         return hardShutdownAlarmLow(std::forward<Args>(args)...);
     }
+
+    template <typename... Args>
+    auto alarmHighSignalAsserted(Args... args)
+    {
+        return hardShutdownHighAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmHighSignalDeasserted(Args... args)
+    {
+        return hardShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalAsserted(Args... args)
+    {
+        return hardShutdownLowAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalDeasserted(Args... args)
+    {
+        return hardShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
+    }
 };
 
 template <>
@@ -161,6 +257,30 @@
     {
         return performanceLossAlarmLow(std::forward<Args>(args)...);
     }
+
+    template <typename... Args>
+    auto alarmHighSignalAsserted(Args... args)
+    {
+        return performanceLossHighAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmHighSignalDeasserted(Args... args)
+    {
+        return performanceLossHighAlarmDeasserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalAsserted(Args... args)
+    {
+        return performanceLossLowAlarmAsserted(std::forward<Args>(args)...);
+    }
+
+    template <typename... Args>
+    auto alarmLowSignalDeasserted(Args... args)
+    {
+        return performanceLossLowAlarmDeasserted(std::forward<Args>(args)...);
+    }
 };
 
 } // namespace phosphor::virtualSensor
diff --git a/virtualSensor.hpp b/virtualSensor.hpp
index ba802db..1d72f1e 100644
--- a/virtualSensor.hpp
+++ b/virtualSensor.hpp
@@ -142,12 +142,14 @@
                 constexpr auto msg =
                     "ASSERT: {} has exceeded the {} high threshold";
                 log<level::ERR>(fmt::format(msg, name, tname).c_str());
+                threshold->alarmHighSignalAsserted(value);
             }
             else
             {
                 constexpr auto msg =
                     "DEASSERT: {} is under the {} high threshold";
                 log<level::INFO>(fmt::format(msg, name, tname).c_str());
+                threshold->alarmHighSignalDeasserted(value);
             }
             threshold->alarmHigh(!alarmHigh);
         }
@@ -160,12 +162,14 @@
             {
                 constexpr auto msg = "ASSERT: {} is under the {} low threshold";
                 log<level::ERR>(fmt::format(msg, name, tname).c_str());
+                threshold->alarmLowSignalAsserted(value);
             }
             else
             {
                 constexpr auto msg =
                     "DEASSERT: {} is above the {} low threshold";
                 log<level::INFO>(fmt::format(msg, name, tname).c_str());
+                threshold->alarmLowSignalDeasserted(value);
             }
             threshold->alarmLow(!alarmLow);
         }
