diff --git a/occ_errors.hpp b/occ_errors.hpp
index e3ae412..57fc6c8 100644
--- a/occ_errors.hpp
+++ b/occ_errors.hpp
@@ -74,16 +74,20 @@
          *  @param[in] path - the DBus error path
          *  @param[in] err - Optional error return code
          *  @param[in] callout - Optional PEL callout path
+         *  @param[in] isInventory - true if the callout path is an
+         * inventory path, false if it is a device path
          */
-        Descriptor(const char* path, int err = 0,
-                   const char* callout = nullptr) :
-            log(true), err(err), callout(callout), path(path)
+        Descriptor(const char* path, int err = 0, const char* callout = nullptr,
+                   const bool isInventory = false) :
+            log(true), err(err), callout(callout), path(path),
+            isInventoryCallout(isInventory)
         {}
 
         bool log;
         int err;
         const char* callout;
         const char* path;
+        bool isInventoryCallout;
     };
 
     /** @brief Starts to monitor for error conditions
diff --git a/occ_ffdc.cpp b/occ_ffdc.cpp
index 763660f..d2ad833 100644
--- a/occ_ffdc.cpp
+++ b/occ_ffdc.cpp
@@ -96,7 +96,7 @@
 }
 
 void FFDC::createOCCResetPEL(unsigned int instance, const char* path, int err,
-                             const char* callout)
+                             const char* callout, const bool isInventoryCallout)
 {
     std::map<std::string, std::string> additionalData;
 
@@ -107,16 +107,28 @@
         additionalData.emplace("CALLOUT_ERRNO", std::to_string(-err));
     }
 
+    lg2::info("Creating OCC Reset PEL for OCC{INST}: {PATH}", "INST", instance,
+              "PATH", path);
+
     if (callout)
     {
-        additionalData.emplace("CALLOUT_DEVICE_PATH", std::string(callout));
+        if (isInventoryCallout)
+        {
+            lg2::info("adding inventory callout path {COPATH}", "COPATH",
+                      std::string(callout));
+            additionalData.emplace("CALLOUT_INVENTORY_PATH",
+                                   std::string(callout));
+        }
+        else
+        {
+            lg2::info("adding device callout path {COPATH}, errno:{ERRNO}",
+                      "COPATH", std::string(callout), "ERRNO", err);
+            additionalData.emplace("CALLOUT_DEVICE_PATH", std::string(callout));
+        }
     }
 
     additionalData.emplace("OCC", std::to_string(instance));
 
-    lg2::info("Creating OCC Reset PEL for OCC{INST}: {PATH}", "INST", instance,
-              "PATH", path);
-
     auto& bus = utils::getBus();
 
     try
diff --git a/occ_ffdc.hpp b/occ_ffdc.hpp
index 7578e4d..072452d 100644
--- a/occ_ffdc.hpp
+++ b/occ_ffdc.hpp
@@ -123,9 +123,12 @@
      * @param[in] path - the DBus error path
      * @param[in] err - the error return code
      * @param[in] callout - the PEL callout path
+     * @param[in] isInventoryCallout - true if the callout is an inventory path
+     * or false if it is a device path
      */
     static void createOCCResetPEL(unsigned int instance, const char* path,
-                                  int err, const char* callout);
+                                  int err, const char* deviceCallout,
+                                  const bool isInventoryCallout);
 
     /**
      * @brief Create a file containing the latest journal traces for the
diff --git a/occ_status.cpp b/occ_status.cpp
index c664d11..220fcdd 100644
--- a/occ_status.cpp
+++ b/occ_status.cpp
@@ -157,7 +157,8 @@
 
     if (d.log)
     {
-        FFDC::createOCCResetPEL(instance, d.path, d.err, d.callout);
+        FFDC::createOCCResetPEL(instance, d.path, d.err, d.callout,
+                                d.isInventoryCallout);
     }
 
     // This would deem OCC inactive
@@ -575,7 +576,9 @@
             stateValid = false;
 
             // Disable due to OCC comm failure and reset to try recovering
-            deviceError(Error::Descriptor(OCC_COMM_ERROR_PATH));
+            // (processor callout will be added)
+            deviceError(Error::Descriptor(OCC_COMM_ERROR_PATH, ECOMM,
+                                          procPath.c_str(), true));
 
             // Reset retry count (for next attempt after recovery)
             currentOccReadRetriesCount = occReadRetries;
