diff --git a/core/fpdfapi/parser/cpdf_object_stream.cpp b/core/fpdfapi/parser/cpdf_object_stream.cpp
index 7d0bf58..1c5a7b7 100644
--- a/core/fpdfapi/parser/cpdf_object_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_object_stream.cpp
@@ -54,20 +54,19 @@
 
 //  static
 std::unique_ptr<CPDF_ObjectStream> CPDF_ObjectStream::Create(
-    const CPDF_Stream* stream) {
-  if (!IsObjectStream(stream))
+    RetainPtr<const CPDF_Stream> stream) {
+  if (!IsObjectStream(stream.Get()))
     return nullptr;
 
   // Protected constructor.
-  return pdfium::WrapUnique(new CPDF_ObjectStream(stream));
+  return pdfium::WrapUnique(new CPDF_ObjectStream(std::move(stream)));
 }
 
-CPDF_ObjectStream::CPDF_ObjectStream(const CPDF_Stream* obj_stream)
-    : stream_acc_(
-          pdfium::MakeRetain<CPDF_StreamAcc>(pdfium::WrapRetain(obj_stream))),
+CPDF_ObjectStream::CPDF_ObjectStream(RetainPtr<const CPDF_Stream> obj_stream)
+    : stream_acc_(pdfium::MakeRetain<CPDF_StreamAcc>(obj_stream)),
       first_object_offset_(obj_stream->GetDict()->GetIntegerFor("First")) {
-  DCHECK(IsObjectStream(obj_stream));
-  Init(obj_stream);
+  DCHECK(IsObjectStream(obj_stream.Get()));
+  Init(obj_stream.Get());
 }
 
 CPDF_ObjectStream::~CPDF_ObjectStream() = default;
diff --git a/core/fpdfapi/parser/cpdf_object_stream.h b/core/fpdfapi/parser/cpdf_object_stream.h
index 2d13b95..cfa0737 100644
--- a/core/fpdfapi/parser/cpdf_object_stream.h
+++ b/core/fpdfapi/parser/cpdf_object_stream.h
@@ -32,7 +32,8 @@
     uint32_t obj_offset;
   };
 
-  static std::unique_ptr<CPDF_ObjectStream> Create(const CPDF_Stream* stream);
+  static std::unique_ptr<CPDF_ObjectStream> Create(
+      RetainPtr<const CPDF_Stream> stream);
 
   ~CPDF_ObjectStream();
 
@@ -42,7 +43,7 @@
   const std::vector<ObjectInfo>& object_info() const { return object_info_; }
 
  private:
-  explicit CPDF_ObjectStream(const CPDF_Stream* stream);
+  explicit CPDF_ObjectStream(RetainPtr<const CPDF_Stream> stream);
 
   void Init(const CPDF_Stream* stream);
   RetainPtr<CPDF_Object> ParseObjectAtOffset(
diff --git a/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp b/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
index f33031d..43306f4 100644
--- a/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
@@ -5,6 +5,7 @@
 #include "core/fpdfapi/parser/cpdf_object_stream.h"
 
 #include <iterator>
+#include <utility>
 
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_indirect_object_holder.h"
@@ -39,7 +40,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -84,7 +85,7 @@
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()),
       /*pDict=*/nullptr);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictNoType) {
@@ -95,7 +96,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictWrongType) {
@@ -107,7 +108,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictWrongTypeValue) {
@@ -119,7 +120,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictNoCount) {
@@ -130,7 +131,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictFloatCount) {
@@ -142,7 +143,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictNegativeCount) {
@@ -154,7 +155,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictCountTooBig) {
@@ -166,7 +167,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictNoOffset) {
@@ -177,7 +178,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictFloatOffset) {
@@ -189,7 +190,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictNegativeOffset) {
@@ -201,7 +202,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  EXPECT_FALSE(CPDF_ObjectStream::Create(stream.Get()));
+  EXPECT_FALSE(CPDF_ObjectStream::Create(std::move(stream)));
 }
 
 TEST(ObjectStreamTest, StreamDictOffsetTooBig) {
@@ -214,7 +215,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -237,7 +238,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -269,7 +270,7 @@
   ByteStringView contents_view(kNormalStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   // TODO(thestig): Can this avoid finding object 2?
@@ -297,7 +298,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -315,7 +316,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   // TODO(thestig): Should object 11 be rejected?
@@ -348,7 +349,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   // TODO(thestig): Should object 11 be rejected?
@@ -371,7 +372,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   // TODO(thestig): Should object 11 be rejected?
@@ -394,7 +395,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -437,7 +438,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
@@ -479,7 +480,7 @@
   ByteStringView contents_view(kStreamContent);
   auto stream = pdfium::MakeRetain<CPDF_Stream>(
       DataVector<uint8_t>(contents_view.begin(), contents_view.end()), dict);
-  auto obj_stream = CPDF_ObjectStream::Create(stream.Get());
+  auto obj_stream = CPDF_ObjectStream::Create(std::move(stream));
   ASSERT_TRUE(obj_stream);
 
   EXPECT_THAT(obj_stream->object_info(),
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index cf7215d..65de611 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -697,7 +697,8 @@
 
       if (obj_num < kMaxObjectNumber) {
         cross_ref_table->AddNormal(obj_num, gen_num, obj_pos);
-        const auto object_stream = CPDF_ObjectStream::Create(pStream.Get());
+        const auto object_stream =
+            CPDF_ObjectStream::Create(std::move(pStream));
         if (object_stream) {
           const auto& object_info = object_stream->object_info();
           for (size_t i = 0; i < object_info.size(); ++i) {
@@ -966,7 +967,7 @@
     return nullptr;
 
   std::unique_ptr<CPDF_ObjectStream> objs_stream =
-      CPDF_ObjectStream::Create(ToStream(object.Get()));
+      CPDF_ObjectStream::Create(ToStream(object));
   const CPDF_ObjectStream* result = objs_stream.get();
   m_ObjectStreamMap[object_number] = std::move(objs_stream);
 
