diff --git a/pmbus.hpp b/pmbus.hpp
index 9c7a0b5..b23ab5e 100644
--- a/pmbus.hpp
+++ b/pmbus.hpp
@@ -11,6 +11,16 @@
 
 namespace fs = std::experimental::filesystem;
 
+constexpr auto STATUS_WORD = "status0";
+
+// Uses Page substitution
+constexpr auto STATUS_VOUT = "statusP_vout";
+
+namespace status_word
+{
+constexpr auto VOUT_FAULT = 0x8000;
+}
+
 /**
  * If the access should be done in the base
  * device directory, the hwmon directory, the
diff --git a/power-sequencer/types.hpp b/power-sequencer/types.hpp
index aac6c36..7eba8d6 100644
--- a/power-sequencer/types.hpp
+++ b/power-sequencer/types.hpp
@@ -3,6 +3,7 @@
 #include <map>
 #include <string>
 #include <tuple>
+#include <vector>
 
 namespace witherspoon
 {
@@ -11,10 +12,12 @@
 namespace ucd90160
 {
 
-constexpr auto pathField = 0;
+using RailNames = std::vector<std::string>;
 
-//Future commits will add more entries
-using DeviceDefinition = std::tuple<std::string>;
+constexpr auto pathField = 0;
+constexpr auto railNamesField = 1;
+
+using DeviceDefinition = std::tuple<std::string, RailNames>;
 
 //Maps a device instance to its definition
 using DeviceMap = std::map<size_t, DeviceDefinition>;
diff --git a/power-sequencer/ucd90160.cpp b/power-sequencer/ucd90160.cpp
index 7a69a64..704c4e0 100644
--- a/power-sequencer/ucd90160.cpp
+++ b/power-sequencer/ucd90160.cpp
@@ -21,6 +21,7 @@
 #include <xyz/openbmc_project/Sensor/Device/error.hpp>
 #include <xyz/openbmc_project/Control/Device/error.hpp>
 #include <xyz/openbmc_project/Power/Fault/error.hpp>
+#include "names_values.hpp"
 #include "ucd90160.hpp"
 
 namespace witherspoon
@@ -31,9 +32,11 @@
 using namespace std::string_literals;
 
 const auto CLEAR_LOGGED_FAULTS = "clear_logged_faults"s;
+const auto MFR_STATUS = "mfr_status"s;
 
 const auto DEVICE_NAME = "UCD90160"s;
 const auto DRIVER_NAME = "ucd9000"s;
+constexpr auto NUM_PAGES = 16;
 
 using namespace pmbus;
 using namespace phosphor::logging;
@@ -94,6 +97,16 @@
     }
 }
 
+uint16_t UCD90160::readStatusWord()
+{
+    return interface.read(STATUS_WORD, Type::Debug);
+}
+
+uint32_t UCD90160::readMFRStatus()
+{
+    return interface.read(MFR_STATUS, Type::DeviceDebug);
+}
+
 void UCD90160::clearFaults()
 {
     try
@@ -113,7 +126,52 @@
 
 bool UCD90160::checkVOUTFaults()
 {
-    return false;
+    bool errorCreated = false;
+    auto statusWord = readStatusWord();
+
+    //The status_word register has a summary bit to tell us
+    //if each page even needs to be checked
+    if (!(statusWord & status_word::VOUT_FAULT))
+    {
+        return errorCreated;
+    }
+
+    for (size_t page = 0; page < NUM_PAGES; page++)
+    {
+        if (isVoutFaultLogged(page))
+        {
+            continue;
+        }
+
+        auto statusVout = interface.insertPageNum(STATUS_VOUT, page);
+        uint8_t vout = interface.read(statusVout, Type::Debug);
+
+        //Any bit on is an error
+        if (vout)
+        {
+            auto& railNames = std::get<ucd90160::railNamesField>(
+                    deviceMap.find(getInstance())->second);
+            auto railName = railNames.at(page);
+
+            util::NamesValues nv;
+            nv.add("STATUS_WORD", statusWord);
+            nv.add("STATUS_VOUT", vout);
+            nv.add("MFR_STATUS", readMFRStatus());
+
+            using metadata = xyz::openbmc_project::Power::Fault::
+                    PowerSequencerVoltageFault;
+
+            report<PowerSequencerVoltageFault>(
+                    metadata::RAIL(page),
+                    metadata::RAIL_NAME(railName.c_str()),
+                    metadata::RAW_STATUS(nv.get().c_str()));
+
+            setVoutFaultLogged(page);
+            errorCreated = true;
+        }
+    }
+
+    return errorCreated;
 }
 
 bool UCD90160::checkPGOODFaults(bool polling)
diff --git a/power-sequencer/ucd90160.hpp b/power-sequencer/ucd90160.hpp
index 6457396..8bb152b 100644
--- a/power-sequencer/ucd90160.hpp
+++ b/power-sequencer/ucd90160.hpp
@@ -88,6 +88,54 @@
         void createPowerFaultLog();
 
         /**
+         * Reads the status_word register
+         *
+         * @return uint16_t - the register contents
+         */
+        uint16_t readStatusWord();
+
+        /**
+         * Reads the mfr_status register
+         *
+         * @return uint32_t - the register contents
+         */
+        uint32_t readMFRStatus();
+
+        /**
+         * Says if we've already logged a Vout fault
+         *
+         * The policy is only 1 of the same error will
+         * be logged for the duration of a class instance.
+         *
+         * @param[in] page - the page to check
+         *
+         * @return bool - if we've already logged a fault against
+         *                this page
+         */
+        inline bool isVoutFaultLogged(uint32_t page) const
+        {
+            return std::find(voutErrors.begin(),
+                             voutErrors.end(),
+                             page) != voutErrors.end();
+        }
+
+        /**
+         * Saves that a Vout fault has been logged
+         *
+         * @param[in] page - the page the error was logged against
+         */
+        inline void setVoutFaultLogged(uint32_t page)
+        {
+            voutErrors.push_back(page);
+        }
+
+        /**
+         * List of pages that Vout errors have
+         * already been logged against
+         */
+        std::vector<uint32_t> voutErrors;
+
+        /**
          * The read/write interface to this hardware
          */
         pmbus::PMBus interface;
diff --git a/power-sequencer/ucd90160_defs.cpp b/power-sequencer/ucd90160_defs.cpp
index 1e9fded..6124afc 100644
--- a/power-sequencer/ucd90160_defs.cpp
+++ b/power-sequencer/ucd90160_defs.cpp
@@ -29,7 +29,27 @@
 {
     {0, DeviceDefinition{
             "/sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/"
-                "1e78a400.i2c-bus/i2c-11/11-0064"}
+                "1e78a400.i2c-bus/i2c-11/11-0064",
+
+            RailNames{
+                "5.0VCS"s,
+                "12.0V"s,
+                "3.3V"s,
+                "1.8V"s,
+                "1.1V"s,
+                "1.0V"s,
+                "0.9V"s,
+                "VDN-A"s,
+                "VDN-B"s,
+                "AVDD"s,
+                "VIO-A"s,
+                "VIO-B"s,
+                "VDD-A"s,
+                "VDD-B"s,
+                "VCS-A"s,
+                "VCS-B"s
+            }
+        }
     }
 };
 
