diff --git a/fpdfsdk/cpdfsdk_annotiteration.cpp b/fpdfsdk/cpdfsdk_annotiteration.cpp
index fa9a5ea..0869d0e 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.cpp
+++ b/fpdfsdk/cpdfsdk_annotiteration.cpp
@@ -38,3 +38,15 @@
 }
 
 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 d3a0f39..c6015a3 100644
--- a/fpdfsdk/cpdfsdk_annotiteration.h
+++ b/fpdfsdk/cpdfsdk_annotiteration.h
@@ -18,14 +18,27 @@
   using const_iterator =
       std::vector<ObservedPtr<CPDFSDK_Annot>>::const_iterator;
 
-  CPDFSDK_AnnotIteration(CPDFSDK_PageView* pPageView, bool bReverse);
-  ~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 b263da9..23c7de3 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -81,8 +81,8 @@
 #endif  // PDF_ENABLE_XFA
 
   // for pdf/static xfa.
-  CPDFSDK_AnnotIteration annotIteration(this, true);
-  for (const auto& pSDKAnnot : annotIteration) {
+  CPDFSDK_AnnotReverseIteration annot_iteration(this);
+  for (const auto& pSDKAnnot : annot_iteration) {
     m_pFormFillEnv->GetAnnotHandlerMgr()->Annot_OnDraw(
         pSDKAnnot.Get(), pDevice, mtUser2Device, pOptions->GetDrawAnnots());
   }
@@ -90,8 +90,8 @@
 
 CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(const CFX_PointF& point) {
   CPDFSDK_AnnotHandlerMgr* pAnnotMgr = m_pFormFillEnv->GetAnnotHandlerMgr();
-  CPDFSDK_AnnotIteration annotIteration(this, false);
-  for (const auto& pSDKAnnot : annotIteration) {
+  CPDFSDK_AnnotForwardIteration annot_iteration(this);
+  for (const auto& pSDKAnnot : annot_iteration) {
     CFX_FloatRect rc = pAnnotMgr->Annot_OnGetViewBBox(pSDKAnnot.Get());
     if (pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP)
       continue;
@@ -103,8 +103,8 @@
 
 CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(const CFX_PointF& point) {
   CPDFSDK_AnnotHandlerMgr* pAnnotMgr = m_pFormFillEnv->GetAnnotHandlerMgr();
-  CPDFSDK_AnnotIteration annotIteration(this, false);
-  for (const auto& pSDKAnnot : annotIteration) {
+  CPDFSDK_AnnotForwardIteration annot_iteration(this);
+  for (const auto& pSDKAnnot : annot_iteration) {
     bool bHitTest = pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::WIDGET;
 #ifdef PDF_ENABLE_XFA
     bHitTest = bHitTest ||
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 7777dda..a0bcf86 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -1025,9 +1025,9 @@
   if (!pPageView)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  CPDFSDK_AnnotIteration annotIteration(pPageView, false);
+  CPDFSDK_AnnotForwardIteration annot_iteration(pPageView);
   CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr;
-  for (const auto& pSDKAnnotCur : annotIteration) {
+  for (const auto& pSDKAnnotCur : annot_iteration) {
     auto* pBAAnnot = pSDKAnnotCur->AsBAAnnot();
     if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) {
       pSDKBAAnnot = pBAAnnot;
@@ -1067,8 +1067,8 @@
     if (!pPageView)
       return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-    CPDFSDK_AnnotIteration annotIteration(pPageView, false);
-    for (const auto& pSDKAnnotCur : annotIteration) {
+    CPDFSDK_AnnotForwardIteration annot_iteration(pPageView);
+    for (const auto& pSDKAnnotCur : annot_iteration) {
       if (!pSDKAnnotCur)
         return CJS_Result::Failure(JSMessage::kBadObjectError);
 
