diff --git a/extensions/openpower-pels/generic.cpp b/extensions/openpower-pels/generic.cpp
new file mode 100644
index 0000000..78d9e81
--- /dev/null
+++ b/extensions/openpower-pels/generic.cpp
@@ -0,0 +1,55 @@
+#include "generic.hpp"
+
+#include <phosphor-logging/log.hpp>
+
+namespace openpower
+{
+namespace pels
+{
+
+using namespace phosphor::logging;
+
+void Generic::unflatten(Stream& stream)
+{
+    stream >> _header;
+
+    if (_header.size <= SectionHeader::flattenedSize())
+    {
+        throw std::out_of_range(
+            "Generic::unflatten: SectionHeader::size field too small");
+    }
+
+    size_t dataLength = _header.size - SectionHeader::flattenedSize();
+    _data.resize(dataLength);
+
+    stream >> _data;
+}
+
+void Generic::flatten(Stream& stream)
+{
+    stream << _header << _data;
+}
+
+Generic::Generic(Stream& pel)
+{
+    try
+    {
+        unflatten(pel);
+        validate();
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>("Cannot unflatten generic section",
+                        entry("ERROR=%s", e.what()));
+        _valid = false;
+    }
+}
+
+void Generic::validate()
+{
+    // Nothing to validate
+    _valid = true;
+}
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/generic.hpp b/extensions/openpower-pels/generic.hpp
new file mode 100644
index 0000000..892e249
--- /dev/null
+++ b/extensions/openpower-pels/generic.hpp
@@ -0,0 +1,87 @@
+#pragma once
+
+#include "section.hpp"
+#include "stream.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+/**
+ * @class Generic
+ *
+ * This class is used for a PEL section when there is no other class to use.
+ * It just contains a vector of the raw data.  Its purpose is so that a PEL
+ * can be completely unflattened even if the code doesn't have a class for
+ * every section type.
+ */
+class Generic : public Section
+{
+  public:
+    Generic() = delete;
+    ~Generic() = default;
+    Generic(const Generic&) = default;
+    Generic& operator=(const Generic&) = default;
+    Generic(Generic&&) = default;
+    Generic& operator=(Generic&&) = default;
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in this class's data fields from the stream.
+     *
+     * @param[in] pel - the PEL data stream
+     */
+    explicit Generic(Stream& pel);
+
+    /**
+     * @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
diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index 89143b2..f1603b6 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -3,6 +3,7 @@
 	extensions/openpower-pels/data_interface.cpp \
 	extensions/openpower-pels/entry_points.cpp \
 	extensions/openpower-pels/failing_mtms.cpp \
+	extensions/openpower-pels/generic.cpp \
 	extensions/openpower-pels/log_id.cpp \
 	extensions/openpower-pels/manager.cpp \
 	extensions/openpower-pels/mtms.cpp \
