diff --git a/include/error_monitors/base_gpio_monitor.hpp b/include/error_monitors/base_gpio_monitor.hpp
index 63be49c..74e1f88 100644
--- a/include/error_monitors/base_gpio_monitor.hpp
+++ b/include/error_monitors/base_gpio_monitor.hpp
@@ -35,7 +35,6 @@
 class BaseGPIOMonitor : public host_error_monitor::base_monitor::BaseMonitor
 {
     AssertValue assertValue;
-    int assertEvent;
 
     gpiod::line line;
     boost::asio::posix::stream_descriptor event;
@@ -54,8 +53,11 @@
 
         try
         {
-            line.request(
-                {"host-error-monitor", gpiod::line_request::EVENT_BOTH_EDGES});
+            line.request({"host-error-monitor",
+                          gpiod::line_request::EVENT_BOTH_EDGES,
+                          assertValue == AssertValue::highAssert
+                              ? 0
+                              : gpiod::line_request::FLAG_ACTIVE_LOW});
         }
         catch (std::exception&)
         {
@@ -82,7 +84,7 @@
             std::cerr << "Checking " << signalName << " state\n";
         }
 
-        return (line.get_value() == static_cast<int>(assertValue));
+        return (line.get_value());
     }
 
     void checkEvent(bool assertEvent)
@@ -146,7 +148,10 @@
 
                 gpiod::line_event gpioLineEvent = line.event_read();
 
-                checkEvent(gpioLineEvent.event_type == assertEvent);
+                // With FLAG_ACTIVE_LOW enabled, both active-high and active-low
+                // signals have a RISING_EDGE event when asserted
+                checkEvent(gpioLineEvent.event_type ==
+                           gpiod::line_event::RISING_EDGE);
                 waitForEvent();
             });
     }
@@ -169,10 +174,6 @@
         BaseMonitor(io, conn, signalName),
         event(io), assertValue(assertValue)
     {
-        assertEvent = (assertValue == AssertValue::lowAssert)
-                          ? gpiod::line_event::FALLING_EDGE
-                          : gpiod::line_event::RISING_EDGE;
-
         if (!requestEvents())
         {
             return;
diff --git a/include/error_monitors/base_gpio_poll_monitor.hpp b/include/error_monitors/base_gpio_poll_monitor.hpp
index 3d79f18..8b4fe1f 100644
--- a/include/error_monitors/base_gpio_poll_monitor.hpp
+++ b/include/error_monitors/base_gpio_poll_monitor.hpp
@@ -59,8 +59,11 @@
 
         try
         {
-            line.request(
-                {"host-error-monitor", gpiod::line_request::EVENT_BOTH_EDGES});
+            line.request({"host-error-monitor",
+                          gpiod::line_request::EVENT_BOTH_EDGES,
+                          assertValue == AssertValue::highAssert
+                              ? 0
+                              : gpiod::line_request::FLAG_ACTIVE_LOW});
         }
         catch (std::exception&)
         {
@@ -96,7 +99,7 @@
             return false;
         }
 
-        return (line.get_value() == static_cast<int>(assertValue));
+        return (line.get_value());
     }
 
   public:
diff --git a/include/error_monitors/cpld_crc_monitor.hpp b/include/error_monitors/cpld_crc_monitor.hpp
index 3732f8e..cd5eb24 100644
--- a/include/error_monitors/cpld_crc_monitor.hpp
+++ b/include/error_monitors/cpld_crc_monitor.hpp
@@ -55,8 +55,9 @@
         // Request GPIO input
         try
         {
-            cpuPresenceLine.request(
-                {"host-error-monitor", gpiod::line_request::DIRECTION_INPUT});
+            cpuPresenceLine.request({"host-error-monitor",
+                                     gpiod::line_request::DIRECTION_INPUT,
+                                     gpiod::line_request::FLAG_ACTIVE_LOW});
         }
         catch (std::exception&)
         {
@@ -64,8 +65,7 @@
             return false;
         }
 
-        // CPU presence is low-assert
-        cpuPresent = !cpuPresenceLine.get_value();
+        cpuPresent = cpuPresenceLine.get_value();
 
         return true;
     }
diff --git a/include/error_monitors/cpu_mismatch_monitor.hpp b/include/error_monitors/cpu_mismatch_monitor.hpp
index c378f75..2d65767 100644
--- a/include/error_monitors/cpu_mismatch_monitor.hpp
+++ b/include/error_monitors/cpu_mismatch_monitor.hpp
@@ -53,8 +53,9 @@
         // Request GPIO input
         try
         {
-            cpuMismatchLine.request(
-                {"host-error-monitor", gpiod::line_request::DIRECTION_INPUT});
+            cpuMismatchLine.request({"host-error-monitor",
+                                     gpiod::line_request::DIRECTION_INPUT,
+                                     0}); // 0 indicates ACTIVE_HIGH
         }
         catch (std::exception&)
         {
@@ -72,7 +73,7 @@
             std::cerr << "Checking " << signalName << " state\n";
         }
 
-        return (cpuMismatchLine.get_value() == 1);
+        return (cpuMismatchLine.get_value());
     }
 
     void cpuMismatchAssertHandler()
diff --git a/include/error_monitors/cpu_presence_monitor.hpp b/include/error_monitors/cpu_presence_monitor.hpp
index 3625a88..2866d48 100644
--- a/include/error_monitors/cpu_presence_monitor.hpp
+++ b/include/error_monitors/cpu_presence_monitor.hpp
@@ -62,8 +62,9 @@
         // Request GPIO input
         try
         {
-            cpuPresenceLine.request(
-                {"host-error-monitor", gpiod::line_request::DIRECTION_INPUT});
+            cpuPresenceLine.request({"host-error-monitor",
+                                     gpiod::line_request::DIRECTION_INPUT,
+                                     gpiod::line_request::FLAG_ACTIVE_LOW});
         }
         catch (const std::exception&)
         {
@@ -71,8 +72,7 @@
             return false;
         }
 
-        // CPU presence is low-assert
-        cpuPresent = !cpuPresenceLine.get_value();
+        cpuPresent = cpuPresenceLine.get_value();
 
         return true;
     }
