diff --git a/extensions/openpower-pels/ascii_string.hpp b/extensions/openpower-pels/ascii_string.hpp
new file mode 100644
index 0000000..d3ede0f
--- /dev/null
+++ b/extensions/openpower-pels/ascii_string.hpp
@@ -0,0 +1,103 @@
+#pragma once
+
+#include "registry.hpp"
+#include "stream.hpp"
+
+#include <string>
+
+namespace openpower
+{
+namespace pels
+{
+namespace src
+{
+
+const size_t asciiStringSize = 32;
+
+/**
+ * @class AsciiString
+ *
+ * This represents the ASCII string field in the SRC PEL section.
+ * This 32 character string shows up on the panel on a function 11.
+ *
+ * The first 2 characters are the SRC type, like 'BD' or '11'.
+ * Next is the subsystem, like '8D', if a BD SRC, otherwise '00'.
+ * Next is the reason code, like 'AAAA'.
+ * The rest is filled in with spaces.
+ */
+class AsciiString
+{
+  public:
+    AsciiString() = delete;
+    ~AsciiString() = default;
+    AsciiString(const AsciiString&) = default;
+    AsciiString& operator=(const AsciiString&) = default;
+    AsciiString(AsciiString&&) = default;
+    AsciiString& operator=(AsciiString&&) = default;
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in this class's data fields from the stream.
+     *
+     * @param[in] pel - the PEL data stream
+     */
+    explicit AsciiString(Stream& stream);
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in the class from the registry entry
+     */
+    explicit AsciiString(const message::Entry& entry);
+
+    /**
+     * @brief Flatten the object into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    void flatten(Stream& stream);
+
+    /**
+     * @brief Fills in the object from the stream data
+     *
+     * @param[in] stream - The stream to read from
+     */
+    void unflatten(Stream& stream);
+
+    /**
+     * @brief Return the 32 character ASCII string data
+     *
+     * @return std::string - The data
+     */
+    std::string get() const;
+
+  private:
+    /**
+     * @brief Converts a byte of raw data to 2 characters
+     *        and writes it to the offset.
+     *
+     * For example, if string is: "AABBCCDD"
+     *
+     * setByte(0, 0x11);
+     * setByte(1, 0x22);
+     * setByte(2, 0x33);
+     * setByte(3, 0x44);
+     *
+     * results in "11223344"
+     *
+     * @param[in] offset - The offset into the ascii string
+     * @param[in] value - The value to write (0x55 -> "55")
+     */
+    void setByte(size_t offset, uint8_t value);
+
+    /**
+     * @brief The ASCII string itself
+     */
+    std::array<char, asciiStringSize> _string;
+};
+
+} // namespace src
+
+} // namespace pels
+} // namespace openpower
