diff --git a/fpdfsdk/cpdfsdk_annotiteration.cpp b/fpdfsdk/cpdfsdk_annotiteration.cpp
index 0869d0e..aa736bb 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.cpp
+++ b/fpdfsdk/cpdfsdk_annotiteration.cpp
@@ -7,46 +7,30 @@
 #include "fpdfsdk/cpdfsdk_annotiteration.h"
 
 #include <algorithm>
-#include <utility>
 
 #include "fpdfsdk/cpdfsdk_annot.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
 
-CPDFSDK_AnnotIteration::CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView,
-                                               bool bReverse) {
-  // Copying/sorting ObservedPtrs is expensive, so do it once at the end.
-  std::vector<CPDFSDK_Annot*> copiedList = pPageView->GetAnnotList();
-  std::stable_sort(copiedList.begin(), copiedList.end(),
+CPDFSDK_AnnotIteration::CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView) {
+  // Copying ObservedPtrs is expensive, so do it once at the end.
+  std::vector<CPDFSDK_Annot*> copied_list = pPageView->GetAnnotList();
+  std::stable_sort(copied_list.begin(), copied_list.end(),
                    [](const CPDFSDK_Annot* p1, const CPDFSDK_Annot* p2) {
                      return p1->GetLayoutOrder() < p2->GetLayoutOrder();
                    });
 
   CPDFSDK_Annot* pTopMostAnnot = pPageView->GetFocusAnnot();
   if (pTopMostAnnot) {
-    auto it = std::find(copiedList.begin(), copiedList.end(), pTopMostAnnot);
-    if (it != copiedList.end()) {
-      copiedList.erase(it);
-      copiedList.insert(copiedList.begin(), pTopMostAnnot);
+    auto it = std::find(copied_list.begin(), copied_list.end(), pTopMostAnnot);
+    if (it != copied_list.end()) {
+      copied_list.erase(it);
+      copied_list.insert(copied_list.begin(), pTopMostAnnot);
     }
   }
-  if (bReverse)
-    std::reverse(copiedList.begin(), copiedList.end());
 
-  m_List.reserve(copiedList.size());
-  for (auto* pAnnot : copiedList)
+  m_List.reserve(copied_list.size());
+  for (auto* pAnnot : copied_list)
     m_List.emplace_back(pAnnot);
 }
 
 CPDFSDK_AnnotIteration::~CPDFSDK_AnnotIteration() = default;
-
-CPDFSDK_AnnotForwardIteration::CPDFSDK_AnnotForwardIteration(
-    CPDFSDK_PageView* pPageView)
-    : CPDFSDK_AnnotIteration(pPageView, /*bReverse=*/false) {}
-
-CPDFSDK_AnnotForwardIteration::~CPDFSDK_AnnotForwardIteration() = default;
-
-CPDFSDK_AnnotReverseIteration::CPDFSDK_AnnotReverseIteration(
-    CPDFSDK_PageView* pPageView)
-    : CPDFSDK_AnnotIteration(pPageView, /*bReverse=*/true) {}
-
-CPDFSDK_AnnotReverseIteration::~CPDFSDK_AnnotReverseIteration() = default;
diff --git a/fpdfsdk/cpdfsdk_annotiteration.h b/fpdfsdk/cpdfsdk_annotiteration.h
index c6015a3..a222877 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.h
+++ b/fpdfsdk/cpdfsdk_annotiteration.h
@@ -18,27 +18,14 @@
   using const_iterator =
       std::vector<ObservedPtr<CPDFSDK_Annot>>::const_iterator;
 
+  explicit CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView);
+  ~CPDFSDK_AnnotIteration();
+
   const_iterator begin() const { return m_List.begin(); }
   const_iterator end() const { return m_List.end(); }
 
- protected:
-  CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView, bool bReverse);
-  ~CPDFSDK_AnnotIteration();
-
  private:
   std::vector<ObservedPtr<CPDFSDK_Annot>> m_List;
 };
 
-class CPDFSDK_AnnotForwardIteration : public CPDFSDK_AnnotIteration {
- public:
-  explicit CPDFSDK_AnnotForwardIteration(CPDFSDK_PageView* pPageView);
-  ~CPDFSDK_AnnotForwardIteration();
-};
-
-class CPDFSDK_AnnotReverseIteration : public CPDFSDK_AnnotIteration {
- public:
-  explicit CPDFSDK_AnnotReverseIteration(CPDFSDK_PageView* pPageView);
-  ~CPDFSDK_AnnotReverseIteration();
-};
-
 #endif  // FPDFSDK_CPDFSDK_ANNOTITERATION_H_
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 58b5a26..79b2fe3 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -86,7 +86,7 @@
 #endif  // PDF_ENABLE_XFA
 
   // for pdf/static xfa.
-  CPDFSDK_AnnotForwardIteration annot_iteration(this);
+  CPDFSDK_AnnotIteration annot_iteration(this);
   for (const auto& pSDKAnnot : annot_iteration) {
     pSDKAnnot->OnDraw(pDevice, mtUser2Device, pOptions->GetDrawAnnots());
   }
@@ -118,7 +118,7 @@
 }
 
 CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(const CFX_PointF& point) {
-  CPDFSDK_AnnotForwardIteration annot_iteration(this);
+  CPDFSDK_AnnotIteration annot_iteration(this);
   for (const auto& pSDKAnnot : annot_iteration) {
     CFX_FloatRect rc = pSDKAnnot->GetViewBBox();
     if (pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP)
@@ -130,7 +130,7 @@
 }
 
 CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(const CFX_PointF& point) {
-  CPDFSDK_AnnotForwardIteration annot_iteration(this);
+  CPDFSDK_AnnotIteration annot_iteration(this);
   for (const auto& pSDKAnnot : annot_iteration) {
     const CPDF_Annot::Subtype sub_type = pSDKAnnot->GetAnnotSubtype();
     bool do_hit_test = sub_type == CPDF_Annot::Subtype::WIDGET;
