diff --git a/core/fpdfdoc/cpdf_numbertree.cpp b/core/fpdfdoc/cpdf_numbertree.cpp
index 71cb3ef..d597a7d 100644
--- a/core/fpdfdoc/cpdf_numbertree.cpp
+++ b/core/fpdfdoc/cpdf_numbertree.cpp
@@ -6,13 +6,15 @@
 
 #include "core/fpdfdoc/cpdf_numbertree.h"
 
+#include <utility>
+
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 
 namespace {
 
-// TODO(tsepez): return retained objects.
-const CPDF_Object* SearchNumberNode(const CPDF_Dictionary* pNode, int num) {
+RetainPtr<const CPDF_Object> SearchNumberNode(const CPDF_Dictionary* pNode,
+                                              int num) {
   RetainPtr<const CPDF_Array> pLimits = pNode->GetArrayFor("Limits");
   if (pLimits &&
       (num < pLimits->GetIntegerAt(0) || num > pLimits->GetIntegerAt(1))) {
@@ -23,7 +25,7 @@
     for (size_t i = 0; i < pNumbers->size() / 2; i++) {
       int index = pNumbers->GetIntegerAt(i * 2);
       if (num == index)
-        return pNumbers->GetDirectObjectAt(i * 2 + 1).Get();
+        return pNumbers->GetDirectObjectAt(i * 2 + 1);
       if (index > num)
         break;
     }
@@ -39,7 +41,7 @@
     if (!pKid)
       continue;
 
-    const CPDF_Object* pFound = SearchNumberNode(pKid.Get(), num);
+    RetainPtr<const CPDF_Object> pFound = SearchNumberNode(pKid.Get(), num);
     if (pFound)
       return pFound;
   }
@@ -48,11 +50,11 @@
 
 }  // namespace
 
-CPDF_NumberTree::CPDF_NumberTree(const CPDF_Dictionary* pRoot)
-    : m_pRoot(pRoot) {}
+CPDF_NumberTree::CPDF_NumberTree(RetainPtr<const CPDF_Dictionary> pRoot)
+    : m_pRoot(std::move(pRoot)) {}
 
 CPDF_NumberTree::~CPDF_NumberTree() = default;
 
-const CPDF_Object* CPDF_NumberTree::LookupValue(int num) const {
+RetainPtr<const CPDF_Object> CPDF_NumberTree::LookupValue(int num) const {
   return SearchNumberNode(m_pRoot.Get(), num);
 }
diff --git a/core/fpdfdoc/cpdf_numbertree.h b/core/fpdfdoc/cpdf_numbertree.h
index 2a3fa6e..cefd58e 100644
--- a/core/fpdfdoc/cpdf_numbertree.h
+++ b/core/fpdfdoc/cpdf_numbertree.h
@@ -14,10 +14,10 @@
 
 class CPDF_NumberTree {
  public:
-  explicit CPDF_NumberTree(const CPDF_Dictionary* pRoot);
+  explicit CPDF_NumberTree(RetainPtr<const CPDF_Dictionary> pRoot);
   ~CPDF_NumberTree();
 
-  const CPDF_Object* LookupValue(int num) const;
+  RetainPtr<const CPDF_Object> LookupValue(int num) const;
 
  protected:
   RetainPtr<const CPDF_Dictionary> const m_pRoot;
diff --git a/core/fpdfdoc/cpdf_pagelabel.cpp b/core/fpdfdoc/cpdf_pagelabel.cpp
index e67aee6..e9591cb 100644
--- a/core/fpdfdoc/cpdf_pagelabel.cpp
+++ b/core/fpdfdoc/cpdf_pagelabel.cpp
@@ -6,6 +6,8 @@
 
 #include "core/fpdfdoc/cpdf_pagelabel.h"
 
+#include <utility>
+
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
@@ -94,13 +96,11 @@
   if (!pLabels)
     return absl::nullopt;
 
-  // TODO(tsepez): pass retained object.
-  CPDF_NumberTree numberTree(pLabels.Get());
+  CPDF_NumberTree numberTree(std::move(pLabels));
   RetainPtr<const CPDF_Object> pValue;
   int n = nPage;
   while (n >= 0) {
-    // TODO(tsepez): make LookupValue() return retained object.
-    pValue = pdfium::WrapRetain(numberTree.LookupValue(n));
+    pValue = numberTree.LookupValue(n);
     if (pValue)
       break;
     n--;
diff --git a/core/fpdfdoc/cpdf_structtree.cpp b/core/fpdfdoc/cpdf_structtree.cpp
index 7a67ea1..acfa405 100644
--- a/core/fpdfdoc/cpdf_structtree.cpp
+++ b/core/fpdfdoc/cpdf_structtree.cpp
@@ -64,13 +64,13 @@
 
   m_Kids.clear();
   m_Kids.resize(dwKids);
+
   RetainPtr<const CPDF_Dictionary> pParentTree =
       m_pTreeRoot->GetDictFor("ParentTree");
   if (!pParentTree)
     return;
 
-  // TODO(tsepez): pass retained object.
-  CPDF_NumberTree parent_tree(pParentTree.Get());
+  CPDF_NumberTree parent_tree(std::move(pParentTree));
   int parents_id = pPageDict->GetIntegerFor("StructParents", -1);
   if (parents_id < 0)
     return;
