diff --git a/occ_errors.hpp b/occ_errors.hpp
index 6fe0983..ba4610e 100644
--- a/occ_errors.hpp
+++ b/occ_errors.hpp
@@ -15,6 +15,10 @@
 
 namespace fs = std::filesystem;
 
+constexpr auto PRESENCE_ERROR_PATH =
+    "org.open_power.OCC.Firmware.PresenceMismatch";
+constexpr auto SAFE_ERROR_PATH = "org.open_power.OCC.Device.SafeState";
+
 /** @class Error
  *  @brief Monitors for OCC device error condition
  */
@@ -34,7 +38,7 @@
      *  @param[in] callBack - Optional function callback on error condition
      */
     Error(EventPtr& event, const fs::path& file,
-          std::function<void(bool)> callBack = nullptr) :
+          std::function<void(int)> callBack = nullptr) :
         event(event),
         file(file), callBack(callBack)
     {
@@ -49,6 +53,38 @@
         }
     }
 
+    /** @class Descriptor
+     *  @brief Contains data relevant to an error that occurred.
+     */
+    class Descriptor
+    {
+      public:
+        Descriptor(const Descriptor&) = default;
+        Descriptor& operator=(const Descriptor&) = default;
+        Descriptor(Descriptor&&) = default;
+        Descriptor& operator=(Descriptor&&) = default;
+
+        Descriptor() : log(false), err(0), callout(nullptr), path(nullptr)
+        {}
+
+        /** @brief Constructs the Descriptor object
+         *
+         *  @param[in] path - the DBus error path
+         *  @param[in] err - Optional error return code
+         *  @param[in] callout - Optional PEL callout path
+         */
+        Descriptor(const char* path, int err = 0,
+                   const char* callout = nullptr) :
+            log(true),
+            err(err), callout(callout), path(path)
+        {}
+
+        bool log;
+        int err;
+        const char* callout;
+        const char* path;
+    };
+
     /** @brief Starts to monitor for error conditions
      *
      *  @param[in] poll - Indicates whether or not the error file should
@@ -109,7 +145,7 @@
     fs::path file;
 
     /** @brief Optional function to call on error scenario */
-    std::function<void(bool)> callBack;
+    std::function<void(int)> callBack;
 
     /** @brief Reads file data
      *
