diff --git a/extensions/openpower-pels/extended_user_data.cpp b/extensions/openpower-pels/extended_user_data.cpp
new file mode 100644
index 0000000..0731b60
--- /dev/null
+++ b/extensions/openpower-pels/extended_user_data.cpp
@@ -0,0 +1,131 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "extended_user_data.hpp"
+
+#include "pel_types.hpp"
+#ifdef PELTOOL
+#include "user_data_json.hpp"
+#endif
+#include <fmt/format.h>
+
+#include <phosphor-logging/log.hpp>
+
+namespace openpower::pels
+{
+
+using namespace phosphor::logging;
+
+void ExtendedUserData::unflatten(Stream& stream)
+{
+    stream >> _header;
+
+    if (_header.size <= SectionHeader::flattenedSize() + 4)
+    {
+        throw std::out_of_range(
+            fmt::format("ExtendedUserData::unflatten: SectionHeader::size {} "
+                        "too small",
+                        _header.size));
+    }
+
+    size_t dataLength = _header.size - 4 - SectionHeader::flattenedSize();
+    _data.resize(dataLength);
+
+    stream >> _creatorID >> _reserved1B >> _reserved2B >> _data;
+}
+
+void ExtendedUserData::flatten(Stream& stream) const
+{
+    stream << _header << _creatorID << _reserved1B << _reserved2B << _data;
+}
+
+ExtendedUserData::ExtendedUserData(Stream& pel)
+{
+    try
+    {
+        unflatten(pel);
+        validate();
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>(
+            fmt::format("Cannot unflatten ExtendedUserData: {}", e.what())
+                .c_str());
+        _valid = false;
+    }
+}
+
+ExtendedUserData::ExtendedUserData(uint16_t componentID, uint8_t subType,
+                                   uint8_t version, uint8_t creatorID,
+                                   const std::vector<uint8_t>& data)
+{
+    _header.id = static_cast<uint16_t>(SectionID::extUserData);
+    _header.version = version;
+    _header.subType = subType;
+    _header.componentID = componentID;
+
+    _creatorID = creatorID;
+    _reserved1B = 0;
+    _reserved2B = 0;
+    _data = data;
+    _header.size = flattenedSize();
+    _valid = true;
+}
+
+void ExtendedUserData::validate()
+{
+    if (header().id != static_cast<uint16_t>(SectionID::extUserData))
+    {
+        log<level::ERR>(
+            fmt::format("Invalid ExtendedUserData section ID {}", header().id)
+                .c_str());
+        _valid = false;
+    }
+    else
+    {
+        _valid = true;
+    }
+}
+
+std::optional<std::string>
+    ExtendedUserData::getJSON(uint8_t creatorID,
+                              const std::vector<std::string>& plugins) const
+{
+    // Use the creator ID value from the section.
+#ifdef PELTOOL
+    return user_data::getJSON(_header.componentID, _header.subType,
+                              _header.version, _data, _creatorID, plugins);
+#endif
+    return std::nullopt;
+}
+
+bool ExtendedUserData::shrink(size_t newSize)
+{
+    // minimum size is 8B header + 4B of fields + 4B of data
+    if ((newSize < flattenedSize()) &&
+        (newSize >= (Section::flattenedSize() + 8)))
+    {
+        auto dataSize = newSize - Section::flattenedSize() - 4;
+
+        // Ensure it's 4B aligned
+        _data.resize((dataSize / 4) * 4);
+        _header.size = flattenedSize();
+        return true;
+    }
+
+    return false;
+}
+
+} // namespace openpower::pels
diff --git a/extensions/openpower-pels/extended_user_data.hpp b/extensions/openpower-pels/extended_user_data.hpp
new file mode 100644
index 0000000..b0c0e88
--- /dev/null
+++ b/extensions/openpower-pels/extended_user_data.hpp
@@ -0,0 +1,160 @@
+#pragma once
+
+#include "section.hpp"
+#include "stream.hpp"
+
+namespace openpower::pels
+{
+
+/**
+ * @class ExtendedUserData
+ *
+ * This represents the Extended User Data section in a PEL.  It is free form
+ * data that the creator knows the contents of.  The component ID, version, and
+ * sub-type fields in the section header are used to identify the format.
+ *
+ *  This section is used for one subsystem to add FFDC data to a PEL created
+ *  by another subsystem.  It is basically the same as a UserData section,
+ *  except it has the creator ID of the section creator stored in the section.
+ *
+ * The Section base class handles the section header structure that every
+ * PEL section has at offset zero.
+ */
+class ExtendedUserData : public Section
+{
+  public:
+    ExtendedUserData() = delete;
+    ~ExtendedUserData() = default;
+    ExtendedUserData(const ExtendedUserData&) = default;
+    ExtendedUserData& operator=(const ExtendedUserData&) = default;
+    ExtendedUserData(ExtendedUserData&&) = default;
+    ExtendedUserData& operator=(ExtendedUserData&&) = default;
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in this class's data fields from the stream.
+     *
+     * @param[in] pel - the PEL data stream
+     */
+    explicit ExtendedUserData(Stream& pel);
+
+    /**
+     * @brief Constructor
+     *
+     * Create a valid ExtendedUserData object with the passed in data.
+     *
+     * The component ID, subtype, and version are used to identify
+     * the data to know which parser to call.
+     *
+     * @param[in] componentID - Component ID of the creator
+     * @param[in] subType - The type of user data
+     * @param[in] version - The version of the data
+     */
+    ExtendedUserData(uint16_t componentID, uint8_t subType, uint8_t version,
+                     uint8_t creatorID, const std::vector<uint8_t>& data);
+
+    /**
+     * @brief Flatten the section into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    void flatten(Stream& stream) const override;
+
+    /**
+     * @brief Returns the size of this section when flattened into a PEL
+     *
+     * @return size_t - the size of the section
+     */
+    size_t flattenedSize()
+    {
+        return Section::flattenedSize() + sizeof(_creatorID) +
+               sizeof(_reserved1B) + sizeof(_reserved2B) + _data.size();
+    }
+
+    /**
+     * @brief Returns the section creator ID field.
+     *
+     * @return uint8_t - The creator ID
+     */
+    const uint8_t creatorID() const
+    {
+        return _creatorID;
+    }
+
+    /**
+     * @brief Returns the raw section data
+     *
+     * This doesn't include the creator ID.
+     *
+     * @return std::vector<uint8_t>&
+     */
+    const std::vector<uint8_t>& data() const
+    {
+        return _data;
+    }
+
+    /**
+     * @brief Get the section contents in JSON
+     *
+     * @param[in] creatorID - Creator Subsystem ID - unused (see the .cpp)
+     * @param[in] plugins - Vector of strings of plugins found in filesystem
+     *
+     * @return The JSON as a string if a parser was found,
+     *         otherwise std::nullopt.
+     */
+    std::optional<std::string>
+        getJSON(uint8_t creatorID,
+                const std::vector<std::string>& plugins) const override;
+
+    /**
+     * @brief Shrink the section
+     *
+     * The new size must be between the current size and the minimum
+     * size, which is 12 bytes.  If it isn't a 4 byte aligned value
+     * the code will do the aligning before the resize takes place.
+     *
+     * @param[in] newSize - The new size in bytes
+     *
+     * @return bool - true if successful, false else.
+     */
+    bool shrink(size_t newSize) override;
+
+  private:
+    /**
+     * @brief Fills in the object from the stream data
+     *
+     * @param[in] stream - The stream to read from
+     */
+    void unflatten(Stream& stream);
+
+    /**
+     * @brief Validates the section contents
+     *
+     * Updates _valid (in Section) with the results.
+     */
+    void validate() override;
+
+    /**
+     * @brief The subsystem creator ID of the code that
+     *        created this section.
+     */
+    uint8_t _creatorID;
+
+    /**
+     * @brief Reserved
+     */
+    uint8_t _reserved1B;
+
+    /**
+     * @brief Reserved
+     */
+    uint16_t _reserved2B;
+
+    /**
+     * @brief The section data
+     */
+    std::vector<uint8_t> _data;
+};
+
+} // namespace openpower::pels
diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index 9c6ec61..39b8b0b 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -1,5 +1,6 @@
 phosphor_log_manager_SOURCES += \
 	extensions/openpower-pels/entry_points.cpp \
+	extensions/openpower-pels/extended_user_data.cpp \
 	extensions/openpower-pels/host_notifier.cpp \
 	extensions/openpower-pels/manager.cpp \
 	extensions/openpower-pels/pldm_interface.cpp \
@@ -71,6 +72,7 @@
 bin_PROGRAMS += peltool
 
 peltool_SOURCES = \
+	extensions/openpower-pels/extended_user_data.cpp \
 	extensions/openpower-pels/tools/peltool.cpp \
 	extensions/openpower-pels/src.cpp \
 	extensions/openpower-pels/user_data.cpp \
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 2391e52..2113c0f 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -16,6 +16,7 @@
 #include "pel.hpp"
 
 #include "bcd_time.hpp"
+#include "extended_user_data.hpp"
 #include "extended_user_header.hpp"
 #include "failing_mtms.hpp"
 #include "json_utils.hpp"
@@ -311,7 +312,7 @@
         {
             json = section.getJSON(registry, plugins, creatorID);
         }
-        else if (sectionID == "UD")
+        else if ((sectionID == "UD") || (sectionID == "ED"))
         {
             json = section.getJSON(creatorID, plugins);
         }
diff --git a/extensions/openpower-pels/section_factory.cpp b/extensions/openpower-pels/section_factory.cpp
index 43a7d70..6a89e1d 100644
--- a/extensions/openpower-pels/section_factory.cpp
+++ b/extensions/openpower-pels/section_factory.cpp
@@ -15,6 +15,7 @@
  */
 #include "section_factory.hpp"
 
+#include "extended_user_data.hpp"
 #include "extended_user_header.hpp"
 #include "failing_mtms.hpp"
 #include "generic.hpp"
@@ -66,6 +67,9 @@
         case static_cast<uint16_t>(SectionID::extendedUserHeader):
             section = std::make_unique<ExtendedUserHeader>(pelData);
             break;
+        case static_cast<uint16_t>(SectionID::extUserData):
+            section = std::make_unique<ExtendedUserData>(pelData);
+            break;
         default:
             // A generic object, but at least an object.
             section = std::make_unique<Generic>(pelData);
