diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include
index ccd5d26..3bc760f 100644
--- a/test/openpower-pels/Makefile.include
+++ b/test/openpower-pels/Makefile.include
@@ -21,6 +21,7 @@
 	section_header_test \
 	severity_test \
 	src_callout_test \
+	src_callouts_test \
 	stream_test \
 	user_data_test \
 	user_header_test
@@ -242,3 +243,18 @@
 	$(top_builddir)/extensions/openpower-pels/mtms.o \
 	$(top_builddir)/extensions/openpower-pels/pce_identity.o
 src_callout_test_LDFLAGS = $(test_ldflags)
+
+src_callouts_test_SOURCES = \
+	%reldir%/src_callouts_test.cpp \
+	%reldir%/pel_utils.cpp
+src_callouts_test_CPPFLAGS = $(test_cppflags)
+src_callouts_test_CXXFLAGS = $(test_cxxflags)
+src_callouts_test_LDADD = \
+	$(test_ldadd) \
+	$(top_builddir)/extensions/openpower-pels/callout.o \
+	$(top_builddir)/extensions/openpower-pels/callouts.o \
+	$(top_builddir)/extensions/openpower-pels/fru_identity.o \
+	$(top_builddir)/extensions/openpower-pels/mru.o \
+	$(top_builddir)/extensions/openpower-pels/mtms.o \
+	$(top_builddir)/extensions/openpower-pels/pce_identity.o
+src_callouts_test_LDFLAGS = $(test_ldflags)
diff --git a/test/openpower-pels/pel_utils.cpp b/test/openpower-pels/pel_utils.cpp
index 3610dd7..f7c9150 100644
--- a/test/openpower-pels/pel_utils.cpp
+++ b/test/openpower-pels/pel_utils.cpp
@@ -113,6 +113,40 @@
 
         case TestSRCType::mruStructure:
             return srcMRUCallout;
+
+        case TestSRCType::calloutStructureA:
+        {
+            // Add just the FRU identity substructure to the base structure
+            std::vector<uint8_t> data{
+                0xFF, 0x28, 'H', 4,   // size, flags, priority, LC length
+                'U',  '4',  '2', 0x00 // LC
+            };
+
+            data.insert(data.end(), srcFRUIdentityCallout.begin(),
+                        srcFRUIdentityCallout.end());
+
+            // The final size
+            data[0] = data.size();
+            return data;
+        }
+        case TestSRCType::calloutStructureB:
+        {
+            // Add all 3 substructures to the base structure
+
+            std::vector<uint8_t> data{
+                0xFF, 0x2F, 'L', 8, // size, flags, priority, LC length
+                'U',  '1',  '2', '-', 'P', '1', 0x00, 0x00 // LC
+            };
+            data.insert(data.end(), srcFRUIdentityCallout.begin(),
+                        srcFRUIdentityCallout.end());
+            data.insert(data.end(), srcPCEIdentityCallout.begin(),
+                        srcPCEIdentityCallout.end());
+            data.insert(data.end(), srcMRUCallout.begin(), srcMRUCallout.end());
+
+            // The final size
+            data[0] = data.size();
+            return data;
+        }
     }
     return {};
 }
diff --git a/test/openpower-pels/pel_utils.hpp b/test/openpower-pels/pel_utils.hpp
index 2d40033..7416c31 100644
--- a/test/openpower-pels/pel_utils.hpp
+++ b/test/openpower-pels/pel_utils.hpp
@@ -67,6 +67,8 @@
     fruIdentityStructure,
     pceIdentityStructure,
     mruStructure,
+    calloutStructureA,
+    calloutStructureB
 };
 
 /**
diff --git a/test/openpower-pels/src_callouts_test.cpp b/test/openpower-pels/src_callouts_test.cpp
new file mode 100644
index 0000000..88dd721
--- /dev/null
+++ b/test/openpower-pels/src_callouts_test.cpp
@@ -0,0 +1,76 @@
+#include "extensions/openpower-pels/callouts.hpp"
+#include "pel_utils.hpp"
+
+#include <gtest/gtest.h>
+
+using namespace openpower::pels;
+using namespace openpower::pels::src;
+
+TEST(CalloutsTest, UnflattenFlattenTest)
+{
+    std::vector<uint8_t> data{0xC0, 0x00, 0x00,
+                              0x00}; // ID, flags, length in words
+
+    // Add 2 callouts
+    auto callout = srcDataFactory(TestSRCType::calloutStructureA);
+    data.insert(data.end(), callout.begin(), callout.end());
+
+    callout = srcDataFactory(TestSRCType::calloutStructureB);
+    data.insert(data.end(), callout.begin(), callout.end());
+
+    Stream stream{data};
+
+    // Set the actual word length value at offset 2
+    uint16_t wordLength = data.size() / 4;
+    stream.offset(2);
+    stream << wordLength;
+    stream.offset(0);
+
+    Callouts callouts{stream};
+
+    EXPECT_EQ(callouts.flattenedSize(), data.size());
+    EXPECT_EQ(callouts.callouts().size(), 2);
+
+    // spot check that each callout has the right substructures
+    EXPECT_TRUE(callouts.callouts().front()->fruIdentity());
+    EXPECT_FALSE(callouts.callouts().front()->pceIdentity());
+    EXPECT_FALSE(callouts.callouts().front()->mru());
+
+    EXPECT_TRUE(callouts.callouts().back()->fruIdentity());
+    EXPECT_TRUE(callouts.callouts().back()->pceIdentity());
+    EXPECT_TRUE(callouts.callouts().back()->mru());
+
+    // Flatten
+    std::vector<uint8_t> newData;
+    Stream newStream{newData};
+
+    callouts.flatten(newStream);
+    EXPECT_EQ(data, newData);
+}
+
+TEST(CalloutsTest, BadDataTest)
+{
+    // Start out with a valid 2 callout object, then truncate it.
+    std::vector<uint8_t> data{0xC0, 0x00, 0x00,
+                              0x00}; // ID, flags, length in words
+
+    // Add 2 callouts
+    auto callout = srcDataFactory(TestSRCType::calloutStructureA);
+    data.insert(data.end(), callout.begin(), callout.end());
+
+    callout = srcDataFactory(TestSRCType::calloutStructureB);
+    data.insert(data.end(), callout.begin(), callout.end());
+
+    Stream stream{data};
+
+    // Set the actual word length value at offset 2
+    uint16_t wordLength = data.size() / 4;
+    stream.offset(2);
+    stream << wordLength;
+    stream.offset(0);
+
+    // Shorten the data by an arbitrary amount so unflattening goes awry.
+    data.resize(data.size() - 37);
+
+    EXPECT_THROW(Callouts callouts{stream}, std::out_of_range);
+}
