diff --git a/extensions/openpower-pels/registry.cpp b/extensions/openpower-pels/registry.cpp
index c8f10d7..755e829 100644
--- a/extensions/openpower-pels/registry.cpp
+++ b/extensions/openpower-pels/registry.cpp
@@ -15,6 +15,7 @@
  */
 #include "registry.hpp"
 
+#include "json_utils.hpp"
 #include "pel_types.hpp"
 #include "pel_values.hpp"
 
@@ -220,8 +221,9 @@
         }
 
         auto attributes = word.value();
-        std::string adPropName = attributes["AdditionalDataPropSource"];
-        hexwordFields[wordNum] = std::move(adPropName);
+        std::tuple<std::string, std::string> adPropSourceDesc(
+            attributes["AdditionalDataPropSource"], attributes["Description"]);
+        hexwordFields[wordNum] = std::move(adPropSourceDesc);
     }
 
     if (!hexwordFields.empty())
diff --git a/extensions/openpower-pels/registry.hpp b/extensions/openpower-pels/registry.hpp
index 7a13b58..180090c 100644
--- a/extensions/openpower-pels/registry.hpp
+++ b/extensions/openpower-pels/registry.hpp
@@ -99,10 +99,13 @@
      *        SRC hexwords.
      *
      * For example, if the AdditionalData event log property contained
-     * "CHIPNUM=42" and this map contained {6, CHIPNUM}, then the code
-     * would put 42 into SRC hexword 6.
+     * "CHIPNUM=42" and this map contained {6, {"CHIPNUM", "DESC"}}, then the
+     * code would put 42 into SRC hexword 6.
+     *
+     * AdditionalDataField specifies two fields from the SRC entry in the
+     * message registry: "AdditionalDataPropSource" and "Description"
      */
-    using AdditionalDataField = std::string;
+    using AdditionalDataField = std::tuple<std::string, std::string>;
     std::optional<std::map<WordNum, AdditionalDataField>> hexwordADFields;
 
     SRC() : type(0), reasonCode(0)
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index 643adec..5f6f121 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -342,8 +342,8 @@
         return;
     }
 
-    // Save the AdditionalData value corresponding to the
-    // adName key in _hexData[wordNum].
+    // Save the AdditionalData value corresponding to the first element of
+    // adName tuple into _hexData[wordNum].
     for (const auto& [wordNum, adName] : *regEntry.src.hexwordADFields)
     {
         // Can only set words 6 - 9
@@ -355,7 +355,7 @@
             continue;
         }
 
-        auto value = ad.getValue(adName);
+        auto value = ad.getValue(std::get<0>(adName));
         if (value)
         {
             _hexData[getWordIndexFromWordNum(wordNum)] =
@@ -363,8 +363,8 @@
         }
         else
         {
-            std::string msg =
-                "Source for user data SRC word not found: " + adName;
+            std::string msg = "Source for user data SRC word not found: " +
+                              std::get<0>(adName);
             addDebugData(msg);
         }
     }
@@ -454,15 +454,17 @@
             }
             if (entry->src.hexwordADFields)
             {
-                std::map<size_t, std::string> adFields =
-                    entry->src.hexwordADFields.value();
+                std::map<size_t, std::tuple<std::string, std::string>>
+                    adFields = entry->src.hexwordADFields.value();
                 for (const auto& hexwordMap : adFields)
                 {
-                    jsonInsert(errorOut, hexwordMap.second,
-                               getNumberString("0x%X",
-                                               _hexData[getWordIndexFromWordNum(
-                                                   hexwordMap.first)]),
-                               2);
+                    std::vector<std::string> valueDescr;
+                    valueDescr.push_back(getNumberString(
+                        "0x%X",
+                        _hexData[getWordIndexFromWordNum(hexwordMap.first)]));
+                    valueDescr.push_back(std::get<1>(hexwordMap.second));
+                    jsonInsertArray(errorOut, std::get<0>(hexwordMap.second),
+                                    valueDescr, 2);
                 }
             }
             errorOut.erase(errorOut.size() - 2);
