diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
index ca675bf..6cb0791 100644
--- a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
+++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
@@ -7,6 +7,8 @@
 #ifndef FPDFSDK_INCLUDE_FPDFXFA_FPDFXFA_UTIL_H_
 #define FPDFSDK_INCLUDE_FPDFXFA_FPDFXFA_UTIL_H_
 
+#include <vector>
+
 #include "xfa/include/fwl/adapter/fwl_adaptertimermgr.h"
 
 #define JS_STR_VIEWERTYPE_STANDARD L"Exchange"
@@ -14,6 +16,8 @@
 #define JS_STR_VIEWERVARIATION L"Full"
 #define JS_STR_VIEWERVERSION_XFA L"11"
 
+class CFWL_TimerInfo;
+
 class CXFA_FWLAdapterTimerMgr : public IFWL_AdapterTimerMgr {
  public:
   CXFA_FWLAdapterTimerMgr(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv) {}
@@ -26,13 +30,16 @@
  protected:
   static void TimerProc(int32_t idEvent);
 
-  static CFX_PtrArray ms_timerArray;
-  CPDFDoc_Environment* m_pEnv;
+  static std::vector<CFWL_TimerInfo*> s_TimerArray;
+  CPDFDoc_Environment* const m_pEnv;
 };
 
 class CFWL_TimerInfo {
  public:
   CFWL_TimerInfo() : pTimer(nullptr) {}
+  CFWL_TimerInfo(uint32_t event, IFWL_Timer* timer)
+      : uIDEvent(event), pTimer(timer) {}
+
   uint32_t uIDEvent;
   IFWL_Timer* pTimer;
 };
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
index 5f8a9f0..bd817a4 100644
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
+++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
@@ -8,58 +8,40 @@
 #include "fpdfsdk/include/fsdk_mgr.h"
 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
 
-CFX_PtrArray CXFA_FWLAdapterTimerMgr::ms_timerArray;
+std::vector<CFWL_TimerInfo*> CXFA_FWLAdapterTimerMgr::s_TimerArray;
 
 FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer,
                                        FX_DWORD dwElapse,
                                        FWL_HTIMER& hTimer,
-                                       FX_BOOL bImmediately /* = TRUE */) {
-  if (m_pEnv) {
-    uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc);
-    CFWL_TimerInfo* pInfo = new CFWL_TimerInfo;
-    pInfo->uIDEvent = uIDEvent;
-    pInfo->pTimer = pTimer;
-    ms_timerArray.Add(pInfo);
+                                       FX_BOOL bImmediately) {
+  if (!m_pEnv)
+    return FWL_ERR_Indefinite;
 
-    hTimer = (FWL_HTIMER)pInfo;
-    return FWL_ERR_Succeeded;
-  }
-
-  return FWL_ERR_Indefinite;
+  uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc);
+  s_TimerArray.push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
+  hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray.back());
+  return FWL_ERR_Succeeded;
 }
 
 FWL_ERR CXFA_FWLAdapterTimerMgr::Stop(FWL_HTIMER hTimer) {
-  if (!hTimer)
+  if (!hTimer || !m_pEnv)
     return FWL_ERR_Indefinite;
 
-  if (m_pEnv) {
-    CFWL_TimerInfo* pInfo = (CFWL_TimerInfo*)hTimer;
-
-    m_pEnv->FFI_KillTimer(pInfo->uIDEvent);
-
-    int32_t index = ms_timerArray.Find(pInfo);
-    if (index >= 0) {
-      ms_timerArray.RemoveAt(index);
-      delete pInfo;
-    }
-    return FWL_ERR_Succeeded;
+  CFWL_TimerInfo* pInfo = reinterpret_cast<CFWL_TimerInfo*>(hTimer);
+  m_pEnv->FFI_KillTimer(pInfo->uIDEvent);
+  auto it = std::find(s_TimerArray.begin(), s_TimerArray.end(), pInfo);
+  if (it != s_TimerArray.end()) {
+    s_TimerArray.erase(it);
+    delete pInfo;
   }
-
-  return FWL_ERR_Indefinite;
+  return FWL_ERR_Succeeded;
 }
 
 void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) {
-  CFWL_TimerInfo* pInfo = NULL;
-  int32_t iCount = CXFA_FWLAdapterTimerMgr::ms_timerArray.GetSize();
-  for (int32_t i = 0; i < iCount; i++) {
-    CFWL_TimerInfo* pTemp =
-        (CFWL_TimerInfo*)CXFA_FWLAdapterTimerMgr::ms_timerArray.GetAt(i);
-    if (pTemp->uIDEvent == idEvent) {
-      pInfo = pTemp;
+  for (CFWL_TimerInfo* pInfo : s_TimerArray) {
+    if (pInfo->uIDEvent == idEvent) {
+      pInfo->pTimer->Run(reinterpret_cast<FWL_HTIMER>(pInfo));
       break;
     }
   }
-  if (pInfo) {
-    pInfo->pTimer->Run((FWL_HTIMER)pInfo);
-  }
 }
