diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index cca1228..c74f205 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -15,4 +15,5 @@
 	extensions/openpower-pels/repository.cpp \
 	extensions/openpower-pels/section_factory.cpp \
 	extensions/openpower-pels/severity.cpp \
+	extensions/openpower-pels/user_data.cpp \
 	extensions/openpower-pels/user_header.cpp
diff --git a/extensions/openpower-pels/section_factory.cpp b/extensions/openpower-pels/section_factory.cpp
index 69274c0..11d8386 100644
--- a/extensions/openpower-pels/section_factory.cpp
+++ b/extensions/openpower-pels/section_factory.cpp
@@ -4,6 +4,7 @@
 #include "generic.hpp"
 #include "pel_types.hpp"
 #include "private_header.hpp"
+#include "user_data.hpp"
 #include "user_header.hpp"
 
 namespace openpower
@@ -32,6 +33,9 @@
         case static_cast<uint16_t>(SectionID::privateHeader):
             section = std::make_unique<PrivateHeader>(pelData);
             break;
+        case static_cast<uint16_t>(SectionID::userData):
+            section = std::make_unique<UserData>(pelData);
+            break;
         case static_cast<uint16_t>(SectionID::userHeader):
             section = std::make_unique<UserHeader>(pelData);
             break;
diff --git a/extensions/openpower-pels/user_data.cpp b/extensions/openpower-pels/user_data.cpp
new file mode 100644
index 0000000..f2cb282
--- /dev/null
+++ b/extensions/openpower-pels/user_data.cpp
@@ -0,0 +1,79 @@
+#include "user_data.hpp"
+
+#include "pel_types.hpp"
+
+#include <phosphor-logging/log.hpp>
+
+namespace openpower
+{
+namespace pels
+{
+
+using namespace phosphor::logging;
+
+void UserData::unflatten(Stream& stream)
+{
+    stream >> _header;
+
+    if (_header.size <= SectionHeader::flattenedSize())
+    {
+        throw std::out_of_range(
+            "UserData::unflatten: SectionHeader::size field too small");
+    }
+
+    size_t dataLength = _header.size - SectionHeader::flattenedSize();
+    _data.resize(dataLength);
+
+    stream >> _data;
+}
+
+void UserData::flatten(Stream& stream)
+{
+    stream << _header << _data;
+}
+
+UserData::UserData(Stream& pel)
+{
+    try
+    {
+        unflatten(pel);
+        validate();
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>("Cannot unflatten user data",
+                        entry("ERROR=%s", e.what()));
+        _valid = false;
+    }
+}
+
+UserData::UserData(uint16_t componentID, uint8_t subType, uint8_t version,
+                   const std::vector<uint8_t>& data)
+{
+    _header.id = static_cast<uint16_t>(SectionID::userData);
+    _header.size = Section::flattenedSize() + data.size();
+    _header.version = version;
+    _header.subType = subType;
+    _header.componentID = componentID;
+
+    _data = data;
+
+    _valid = true;
+}
+
+void UserData::validate()
+{
+    if (header().id != static_cast<uint16_t>(SectionID::userData))
+    {
+        log<level::ERR>("Invalid user data section ID",
+                        entry("ID=0x%X", header().id));
+        _valid = false;
+    }
+    else
+    {
+        _valid = true;
+    }
+}
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/user_data.hpp b/extensions/openpower-pels/user_data.hpp
new file mode 100644
index 0000000..98bf0a8
--- /dev/null
+++ b/extensions/openpower-pels/user_data.hpp
@@ -0,0 +1,105 @@
+#pragma once
+
+#include "section.hpp"
+#include "stream.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+/**
+ * @class UserData
+ *
+ * This represents the 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.
+ *
+ * The Section base class handles the section header structure that every
+ * PEL section has at offset zero.
+ */
+class UserData : public Section
+{
+  public:
+    UserData() = delete;
+    ~UserData() = default;
+    UserData(const UserData&) = default;
+    UserData& operator=(const UserData&) = default;
+    UserData(UserData&&) = default;
+    UserData& operator=(UserData&&) = default;
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in this class's data fields from the stream.
+     *
+     * @param[in] pel - the PEL data stream
+     */
+    explicit UserData(Stream& pel);
+
+    /**
+     * @brief Constructor
+     *
+     * Create a valid UserData 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
+     */
+    UserData(uint16_t componentID, uint8_t subType, uint8_t version,
+             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) 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() + _data.size();
+    }
+
+    /**
+     * @brief Returns the raw section data
+     *
+     * @return std::vector<uint8_t>&
+     */
+    const std::vector<uint8_t>& data() const
+    {
+        return _data;
+    }
+
+  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 section data
+     */
+    std::vector<uint8_t> _data;
+};
+
+} // namespace pels
+} // namespace openpower
