diff --git a/extensions/openpower-pels/callouts.cpp b/extensions/openpower-pels/callouts.cpp
new file mode 100644
index 0000000..8a519e2
--- /dev/null
+++ b/extensions/openpower-pels/callouts.cpp
@@ -0,0 +1,36 @@
+#include "callouts.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+namespace src
+{
+
+Callouts::Callouts(Stream& pel)
+{
+    pel >> _subsectionID >> _subsectionFlags >> _subsectionWordLength;
+
+    size_t currentLength = sizeof(_subsectionID) + sizeof(_subsectionFlags) +
+                           sizeof(_subsectionWordLength);
+
+    while ((_subsectionWordLength * 4) > currentLength)
+    {
+        _callouts.emplace_back(new Callout(pel));
+        currentLength += _callouts.back()->flattenedSize();
+    }
+}
+
+void Callouts::flatten(Stream& pel)
+{
+    pel << _subsectionID << _subsectionFlags << _subsectionWordLength;
+
+    for (auto& callout : _callouts)
+    {
+        callout->flatten(pel);
+    }
+}
+
+} // namespace src
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/callouts.hpp b/extensions/openpower-pels/callouts.hpp
new file mode 100644
index 0000000..430a5ae
--- /dev/null
+++ b/extensions/openpower-pels/callouts.hpp
@@ -0,0 +1,96 @@
+#pragma once
+
+#include "callout.hpp"
+#include "stream.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+namespace src
+{
+
+/**
+ * @class Callouts
+ *
+ * This is an optional subsection of the SRC section in a PEL
+ * that holds callouts (represented as Callout objects).
+ * It is at the end of the SRC section, and there can only be one
+ * of these present in the SRC.
+ *
+ * If an SRC doesn't have any callouts, this object won't be created.
+ */
+class Callouts
+{
+  public:
+    Callouts() = default;
+    ~Callouts() = default;
+    Callouts(const Callouts&) = delete;
+    Callouts& operator=(const Callouts&) = delete;
+    Callouts(Callouts&&) = delete;
+    Callouts& operator=(Callouts&&) = delete;
+
+    /**
+     * @brief Constructor
+     *
+     * Fills in this class's data fields from the stream.
+     *
+     * @param[in] pel - the PEL data stream
+     */
+    explicit Callouts(Stream& pel);
+
+    /**
+     * @brief Flatten the object into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    void flatten(Stream& pel);
+
+    /**
+     * @brief Returns the size of this object when flattened into a PEL
+     *
+     * @return size_t - The size of the section
+     */
+    size_t flattenedSize()
+    {
+        return _subsectionWordLength * 4;
+    }
+
+    /**
+     * @brief Returns the contained callouts
+     *
+     * @return const std::vector<std::unique_ptr<Callout>>&
+     */
+    const std::vector<std::unique_ptr<Callout>>& callouts() const
+    {
+        return _callouts;
+    }
+
+  private:
+    /**
+     * @brief The ID of this subsection, which is 0xC0.
+     */
+    uint8_t _subsectionID;
+
+    /**
+     * @brief Subsection flags.  Always 0.
+     */
+    uint8_t _subsectionFlags;
+
+    /**
+     * @brief Subsection length in 4B words.
+     *
+     * (Subsection is always a multiple of 4B)
+     */
+    uint16_t _subsectionWordLength;
+
+    /**
+     * @brief The contained callouts
+     */
+    std::vector<std::unique_ptr<Callout>> _callouts;
+};
+
+} // namespace src
+
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index 9308159..a10a4a9 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -2,6 +2,7 @@
 	extensions/openpower-pels/ascii_string.cpp \
 	extensions/openpower-pels/bcd_time.cpp \
 	extensions/openpower-pels/callout.cpp \
+	extensions/openpower-pels/callouts.cpp \
 	extensions/openpower-pels/data_interface.cpp \
 	extensions/openpower-pels/entry_points.cpp \
 	extensions/openpower-pels/failing_mtms.cpp \
