diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
index 884232d..7e2cf04 100644
--- a/fpdfsdk/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/fxedit/fxet_edit.cpp
@@ -125,16 +125,6 @@
   return false;
 }
 
-bool CFX_Edit_Iterator::GetSection(CPVT_Section& section) const {
-  ASSERT(m_pEdit);
-
-  if (m_pVTIterator->GetSection(section)) {
-    section.rcSection = m_pEdit->VTToEdit(section.rcSection);
-    return true;
-  }
-  return false;
-}
-
 void CFX_Edit_Iterator::SetAt(int32_t nWordIndex) {
   m_pVTIterator->SetAt(nWordIndex);
 }
@@ -230,10 +220,6 @@
   }
 }
 
-void CFX_Edit_Refresh::AddRefresh(const CFX_FloatRect& rect) {
-  m_RefreshRects.Add(rect);
-}
-
 const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const {
   return &m_RefreshRects;
 }
@@ -245,8 +231,6 @@
 CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize)
     : m_nCurUndoPos(0),
       m_nBufSize(nBufsize),
-      m_bModified(false),
-      m_bVirgin(true),
       m_bWorking(false) {}
 
 CFX_Edit_Undo::~CFX_Edit_Undo() {
@@ -262,7 +246,6 @@
   if (m_nCurUndoPos > 0) {
     m_UndoItemStack[m_nCurUndoPos - 1]->Undo();
     m_nCurUndoPos--;
-    m_bModified = (m_nCurUndoPos != 0);
   }
   m_bWorking = false;
 }
@@ -276,7 +259,6 @@
   if (m_nCurUndoPos < m_UndoItemStack.size()) {
     m_UndoItemStack[m_nCurUndoPos]->Redo();
     m_nCurUndoPos++;
-    m_bModified = true;
   }
   m_bWorking = false;
 }
@@ -288,18 +270,11 @@
   if (m_nCurUndoPos < m_UndoItemStack.size())
     RemoveTails();
 
-  if (m_UndoItemStack.size() >= m_nBufSize) {
+  if (m_UndoItemStack.size() >= m_nBufSize)
     RemoveHeads();
-    m_bVirgin = false;
-  }
 
   m_UndoItemStack.push_back(std::move(pItem));
   m_nCurUndoPos = m_UndoItemStack.size();
-  m_bModified = true;
-}
-
-bool CFX_Edit_Undo::IsModified() const {
-  return m_bVirgin ? m_bModified : true;
 }
 
 void CFX_Edit_Undo::RemoveHeads() {
@@ -337,42 +312,6 @@
   return m_bLast;
 }
 
-CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle)
-    : m_sTitle(sTitle) {}
-
-CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() {}
-
-void CFX_Edit_GroupUndoItem::AddUndoItem(
-    std::unique_ptr<CFX_Edit_UndoItem> pUndoItem) {
-  pUndoItem->SetFirst(false);
-  pUndoItem->SetLast(false);
-  if (m_sTitle.IsEmpty())
-    m_sTitle = pUndoItem->GetUndoTitle();
-
-  m_Items.push_back(std::move(pUndoItem));
-}
-
-void CFX_Edit_GroupUndoItem::UpdateItems() {
-  if (!m_Items.empty()) {
-    m_Items.front()->SetFirst(true);
-    m_Items.back()->SetLast(true);
-  }
-}
-
-void CFX_Edit_GroupUndoItem::Undo() {
-  for (auto iter = m_Items.rbegin(); iter != m_Items.rend(); ++iter)
-    (*iter)->Undo();
-}
-
-void CFX_Edit_GroupUndoItem::Redo() {
-  for (auto iter = m_Items.begin(); iter != m_Items.end(); ++iter)
-    (*iter)->Redo();
-}
-
-CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() const {
-  return m_sTitle;
-}
-
 CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit* pEdit,
                                    const CPVT_WordPlace& wpOldPlace,
                                    const CPVT_WordPlace& wpNewPlace,
@@ -849,12 +788,9 @@
       m_bEnableRefresh(true),
       m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f),
       m_bEnableUndo(true),
-      m_bOprNotify(false),
-      m_pGroupUndoItem(nullptr) {}
+      m_bOprNotify(false) {}
 
-CFX_Edit::~CFX_Edit() {
-  ASSERT(!m_pGroupUndoItem);
-}
+CFX_Edit::~CFX_Edit() {}
 
 void CFX_Edit::Initialize() {
   m_pVT->Initialize();
@@ -1568,18 +1504,6 @@
   }
 }
 
-void CFX_Edit::SetCaret(int32_t nPos) {
-  if (!m_pVT->IsValid())
-    return;
-
-  SelectNone();
-  SetCaret(m_pVT->WordIndexToWordPlace(nPos));
-  m_SelState.Set(m_wpCaret, m_wpCaret);
-  ScrollToCaret();
-  SetCaretOrigin();
-  SetCaretInfo();
-}
-
 void CFX_Edit::OnMouseDown(const CFX_PointF& point, bool bShift, bool bCtrl) {
   if (!m_pVT->IsValid())
     return;
@@ -2064,13 +1988,6 @@
   }
 }
 
-int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace& place) const {
-  if (m_pVT->IsValid())
-    return m_pVT->WordPlaceToWordIndex(place);
-
-  return -1;
-}
-
 CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const {
   if (m_pVT->IsValid())
     return m_pVT->WordIndexToWordPlace(index);
@@ -2172,10 +2089,7 @@
 
 void CFX_Edit::AddEditUndoItem(
     std::unique_ptr<CFX_Edit_UndoItem> pEditUndoItem) {
-  if (m_pGroupUndoItem)
-    m_pGroupUndoItem->AddUndoItem(std::move(pEditUndoItem));
-  else
-    m_Undo.AddItem(std::move(pEditUndoItem));
+  m_Undo.AddItem(std::move(pEditUndoItem));
 }
 
 CFX_Edit_LineRectArray::CFX_Edit_LineRectArray() {}
@@ -2204,11 +2118,6 @@
 
 CFX_Edit_Select::CFX_Edit_Select() {}
 
-CFX_Edit_Select::CFX_Edit_Select(const CPVT_WordPlace& begin,
-                                 const CPVT_WordPlace& end) {
-  Set(begin, end);
-}
-
 CFX_Edit_Select::CFX_Edit_Select(const CPVT_WordRange& range) {
   Set(range.BeginPos, range.EndPos);
 }
@@ -2228,10 +2137,6 @@
   EndPos = end;
 }
 
-void CFX_Edit_Select::SetBeginPos(const CPVT_WordPlace& begin) {
-  BeginPos = begin;
-}
-
 void CFX_Edit_Select::SetEndPos(const CPVT_WordPlace& end) {
   EndPos = end;
 }
diff --git a/fpdfsdk/fxedit/fxet_edit.h b/fpdfsdk/fxedit/fxet_edit.h
index a279d1c..ebc326f 100644
--- a/fpdfsdk/fxedit/fxet_edit.h
+++ b/fpdfsdk/fxedit/fxet_edit.h
@@ -21,11 +21,8 @@
 class CFX_Edit_Provider;
 class CFX_RenderDevice;
 class CFX_SystemHandler;
-class CPDF_PageObjectHolder;
-class CPDF_TextObject;
 class CPWL_Edit;
 class CPWL_EditCtrl;
-
 class IFX_Edit_UndoItem;
 
 struct CFX_Edit_LineRect {
@@ -39,7 +36,7 @@
 class CFX_Edit_LineRectArray {
  public:
   CFX_Edit_LineRectArray();
-  virtual ~CFX_Edit_LineRectArray();
+  ~CFX_Edit_LineRectArray();
 
   void operator=(CFX_Edit_LineRectArray&& rects);
   void Add(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine);
@@ -54,7 +51,7 @@
 class CFX_Edit_RectArray {
  public:
   CFX_Edit_RectArray();
-  virtual ~CFX_Edit_RectArray();
+  ~CFX_Edit_RectArray();
 
   void Clear();
   void Add(const CFX_FloatRect& rect);
@@ -69,12 +66,11 @@
 class CFX_Edit_Refresh {
  public:
   CFX_Edit_Refresh();
-  virtual ~CFX_Edit_Refresh();
+  ~CFX_Edit_Refresh();
 
   void BeginRefresh();
   void Push(const CPVT_WordRange& linerange, const CFX_FloatRect& rect);
   void NoAnalyse();
-  void AddRefresh(const CFX_FloatRect& rect);
   const CFX_Edit_RectArray* GetRefreshRects() const;
   void EndRefresh();
 
@@ -87,12 +83,10 @@
 class CFX_Edit_Select {
  public:
   CFX_Edit_Select();
-  CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end);
   explicit CFX_Edit_Select(const CPVT_WordRange& range);
 
   void Reset();
   void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end);
-  void SetBeginPos(const CPVT_WordPlace& begin);
   void SetEndPos(const CPVT_WordPlace& end);
 
   CPVT_WordRange ConvertToWordRange() const;
@@ -105,14 +99,13 @@
 class CFX_Edit_Undo {
  public:
   explicit CFX_Edit_Undo(int32_t nBufsize);
-  virtual ~CFX_Edit_Undo();
+  ~CFX_Edit_Undo();
 
   void AddItem(std::unique_ptr<IFX_Edit_UndoItem> pItem);
   void Undo();
   void Redo();
   bool CanUndo() const;
   bool CanRedo() const;
-  bool IsModified() const;
   void Reset();
 
  private:
@@ -122,8 +115,6 @@
   std::deque<std::unique_ptr<IFX_Edit_UndoItem>> m_UndoItemStack;
   size_t m_nCurUndoPos;
   size_t m_nBufSize;
-  bool m_bModified;
-  bool m_bVirgin;
   bool m_bWorking;
 };
 
@@ -152,24 +143,6 @@
   bool m_bLast;
 };
 
-class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem {
- public:
-  explicit CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle);
-  ~CFX_Edit_GroupUndoItem() override;
-
-  // IFX_Edit_UndoItem
-  void Undo() override;
-  void Redo() override;
-  CFX_WideString GetUndoTitle() const override;
-
-  void AddUndoItem(std::unique_ptr<CFX_Edit_UndoItem> pUndoItem);
-  void UpdateItems();
-
- private:
-  CFX_WideString m_sTitle;
-  std::vector<std::unique_ptr<CFX_Edit_UndoItem>> m_Items;
-};
-
 class CFXEU_InsertWord : public CFX_Edit_UndoItem {
  public:
   CFXEU_InsertWord(CFX_Edit* pEdit,
@@ -381,7 +354,6 @@
   bool InsertText(const CFX_WideString& sText, int32_t charset);
   bool Redo();
   bool Undo();
-  int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
   CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
   CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const;
   int32_t GetCaret() const;
@@ -404,7 +376,6 @@
   void Paint();
   void EnableRefresh(bool bRefresh);
   void RefreshWordRange(const CPVT_WordRange& wr);
-  void SetCaret(int32_t nPos);
   CPVT_WordRange GetWholeWordRange() const;
   CPVT_WordRange GetSelectWordRange() const;
   void EnableUndo(bool bUndo);
@@ -498,7 +469,6 @@
   CFX_FloatRect m_rcOldContent;
   bool m_bEnableUndo;
   bool m_bOprNotify;
-  CFX_Edit_GroupUndoItem* m_pGroupUndoItem;
 };
 
 class CFX_Edit_Iterator {
@@ -510,7 +480,6 @@
   bool PrevWord();
   bool GetWord(CPVT_Word& word) const;
   bool GetLine(CPVT_Line& line) const;
-  bool GetSection(CPVT_Section& section) const;
   void SetAt(int32_t nWordIndex);
   void SetAt(const CPVT_WordPlace& place);
   const CPVT_WordPlace& GetAt() const;
