diff --git a/src/host_error_monitor.cpp b/src/host_error_monitor.cpp
index e0cb2e4..6ea0b9c 100644
--- a/src/host_error_monitor.cpp
+++ b/src/host_error_monitor.cpp
@@ -65,7 +65,15 @@
 static gpiod::line cpu1VRHotLine;
 static boost::asio::posix::stream_descriptor cpu1VRHotEvent(io);
 static gpiod::line cpu2VRHotLine;
+static boost::asio::posix::stream_descriptor cpu1MemABCDVRHotEvent(io);
+static gpiod::line cpu1MemEFGHVRHotLine;
+static boost::asio::posix::stream_descriptor cpu1MemEFGHVRHotEvent(io);
+static gpiod::line cpu2MemABCDVRHotLine;
 static boost::asio::posix::stream_descriptor cpu2VRHotEvent(io);
+static gpiod::line cpu1MemABCDVRHotLine;
+static boost::asio::posix::stream_descriptor cpu2MemABCDVRHotEvent(io);
+static gpiod::line cpu2MemEFGHVRHotLine;
+static boost::asio::posix::stream_descriptor cpu2MemEFGHVRHotEvent(io);
 //----------------------------------
 // PCH_BMC_THERMTRIP function related definition
 //----------------------------------
@@ -730,6 +738,58 @@
                               });
 }
 
+static void cpu1MemABCDVRHotHandler()
+{
+    if (!hostOff)
+    {
+        gpiod::line_event gpioLineEvent = cpu1MemABCDVRHotLine.event_read();
+
+        bool cpu1MemABCDVRHot =
+            gpioLineEvent.event_type == gpiod::line_event::FALLING_EDGE;
+        if (cpu1MemABCDVRHot)
+        {
+            cpuVRHotLog("CPU 1 Memory ABCD");
+        }
+    }
+    cpu1MemABCDVRHotEvent.async_wait(
+        boost::asio::posix::stream_descriptor::wait_read,
+        [](const boost::system::error_code ec) {
+            if (ec)
+            {
+                std::cerr << "CPU 1 Memory ABCD VRHot handler error: "
+                          << ec.message() << "\n";
+                return;
+            }
+            cpu1MemABCDVRHotHandler();
+        });
+}
+
+static void cpu1MemEFGHVRHotHandler()
+{
+    if (!hostOff)
+    {
+        gpiod::line_event gpioLineEvent = cpu1MemEFGHVRHotLine.event_read();
+
+        bool cpu1MemEFGHVRHot =
+            gpioLineEvent.event_type == gpiod::line_event::FALLING_EDGE;
+        if (cpu1MemEFGHVRHot)
+        {
+            cpuVRHotLog("CPU 1 Memory EFGH");
+        }
+    }
+    cpu1MemEFGHVRHotEvent.async_wait(
+        boost::asio::posix::stream_descriptor::wait_read,
+        [](const boost::system::error_code ec) {
+            if (ec)
+            {
+                std::cerr << "CPU 1 Memory EFGH VRHot handler error: "
+                          << ec.message() << "\n";
+                return;
+            }
+            cpu1MemEFGHVRHotHandler();
+        });
+}
+
 static void cpu2VRHotHandler()
 {
     if (!hostOff)
@@ -755,6 +815,58 @@
                               });
 }
 
+static void cpu2MemABCDVRHotHandler()
+{
+    if (!hostOff)
+    {
+        gpiod::line_event gpioLineEvent = cpu2MemABCDVRHotLine.event_read();
+
+        bool cpu2MemABCDVRHot =
+            gpioLineEvent.event_type == gpiod::line_event::FALLING_EDGE;
+        if (cpu2MemABCDVRHot)
+        {
+            cpuVRHotLog("CPU 2 Memory ABCD");
+        }
+    }
+    cpu2MemABCDVRHotEvent.async_wait(
+        boost::asio::posix::stream_descriptor::wait_read,
+        [](const boost::system::error_code ec) {
+            if (ec)
+            {
+                std::cerr << "CPU 2 Memory ABCD VRHot handler error: "
+                          << ec.message() << "\n";
+                return;
+            }
+            cpu2MemABCDVRHotHandler();
+        });
+}
+
+static void cpu2MemEFGHVRHotHandler()
+{
+    if (!hostOff)
+    {
+        gpiod::line_event gpioLineEvent = cpu2MemEFGHVRHotLine.event_read();
+
+        bool cpu2MemEFGHVRHot =
+            gpioLineEvent.event_type == gpiod::line_event::FALLING_EDGE;
+        if (cpu2MemEFGHVRHot)
+        {
+            cpuVRHotLog("CPU 2 Memory EFGH");
+        }
+    }
+    cpu2MemEFGHVRHotEvent.async_wait(
+        boost::asio::posix::stream_descriptor::wait_read,
+        [](const boost::system::error_code ec) {
+            if (ec)
+            {
+                std::cerr << "CPU 2 Memory EFGH VRHot handler error: "
+                          << ec.message() << "\n";
+                return;
+            }
+            cpu2MemEFGHVRHotHandler();
+        });
+}
+
 static void pchThermtripHandler()
 {
     if (!hostOff)
@@ -1209,6 +1321,24 @@
         return -1;
     }
 
+    // Request CPU1_MEM_ABCD_VRHOT GPIO events
+    if (!host_error_monitor::requestGPIOEvents(
+            "CPU1_MEM_ABCD_VRHOT", host_error_monitor::cpu1MemABCDVRHotHandler,
+            host_error_monitor::cpu1MemABCDVRHotLine,
+            host_error_monitor::cpu1MemABCDVRHotEvent))
+    {
+        return -1;
+    }
+
+    // Request CPU1_MEM_EFGH_VRHOT GPIO events
+    if (!host_error_monitor::requestGPIOEvents(
+            "CPU1_MEM_EFGH_VRHOT", host_error_monitor::cpu1MemEFGHVRHotHandler,
+            host_error_monitor::cpu1MemEFGHVRHotLine,
+            host_error_monitor::cpu1MemEFGHVRHotEvent))
+    {
+        return -1;
+    }
+
     // Request CPU2_VRHOT GPIO events
     if (!host_error_monitor::requestGPIOEvents(
             "CPU2_VRHOT", host_error_monitor::cpu2VRHotHandler,
@@ -1218,6 +1348,24 @@
         return -1;
     }
 
+    // Request CPU2_MEM_ABCD_VRHOT GPIO events
+    if (!host_error_monitor::requestGPIOEvents(
+            "CPU2_MEM_ABCD_VRHOT", host_error_monitor::cpu2MemABCDVRHotHandler,
+            host_error_monitor::cpu2MemABCDVRHotLine,
+            host_error_monitor::cpu2MemABCDVRHotEvent))
+    {
+        return -1;
+    }
+
+    // Request CPU2_MEM_EFGH_VRHOT GPIO events
+    if (!host_error_monitor::requestGPIOEvents(
+            "CPU2_MEM_EFGH_VRHOT", host_error_monitor::cpu2MemEFGHVRHotHandler,
+            host_error_monitor::cpu2MemEFGHVRHotLine,
+            host_error_monitor::cpu2MemEFGHVRHotEvent))
+    {
+        return -1;
+    }
+
     // Request PCH_BMC_THERMTRIP GPIO events
     if (!host_error_monitor::requestGPIOEvents(
             "PCH_BMC_THERMTRIP", host_error_monitor::pchThermtripHandler,
