diff --git a/extensions/openpower-pels/stream.hpp b/extensions/openpower-pels/stream.hpp
index eb91d4c..5c813b2 100644
--- a/extensions/openpower-pels/stream.hpp
+++ b/extensions/openpower-pels/stream.hpp
@@ -143,6 +143,23 @@
     }
 
     /**
+     * @brief Extraction operator for a std::vector<uint8_t>
+     *
+     * The vector's size is the amount extracted.
+     *
+     * @param[out] value - filled in with the value
+     * @return Stream&
+     */
+    Stream& operator>>(std::vector<uint8_t>& value)
+    {
+        if (!value.empty())
+        {
+            read(value.data(), value.size());
+        }
+        return *this;
+    }
+
+    /**
      * @brief Insert operator for a uint8_t
      *
      * @param[in] value - the value to write to the stream
@@ -206,6 +223,23 @@
     }
 
     /**
+     * @brief Insert operator for a std::vector<uint8_t>
+     *
+     * The full vector is written to the stream.
+     *
+     * @param[in] value - the value to write to the stream
+     * @return Stream&
+     */
+    Stream& operator<<(const std::vector<uint8_t>& value)
+    {
+        if (!value.empty())
+        {
+            write(value.data(), value.size());
+        }
+        return *this;
+    }
+
+    /**
      * @brief Sets the offset of the stream
      *
      * @param[in] newOffset - the new offset
@@ -261,7 +295,7 @@
      * @param[in] in - the data to write
      * @param[in] size - the size to write
      */
-    void write(void* in, std::size_t size)
+    void write(const void* in, std::size_t size)
     {
         size_t newSize = _offset + size;
         if (newSize > _data.size())
diff --git a/test/openpower-pels/stream_test.cpp b/test/openpower-pels/stream_test.cpp
index dd5ca93..619952f 100644
--- a/test/openpower-pels/stream_test.cpp
+++ b/test/openpower-pels/stream_test.cpp
@@ -158,3 +158,25 @@
 
     EXPECT_THROW(stream.offset(100), std::out_of_range);
 }
+
+TEST(StreamTest, TestVectorInsertExtract)
+{
+    std::vector<uint8_t> toInsert{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
+    std::vector<uint8_t> data;
+
+    // Insert
+    Stream stream{data};
+    stream << toInsert;
+    EXPECT_EQ(data, toInsert);
+
+    // Extract
+    std::vector<uint8_t> toExtract;
+    toExtract.resize(toInsert.size());
+    stream.offset(0);
+    stream >> toExtract;
+
+    EXPECT_EQ(data, toExtract);
+
+    // Go off the end
+    EXPECT_THROW(stream >> toExtract, std::out_of_range);
+}
