diff --git a/BUILD.gn b/BUILD.gn
index 71a3d62..56f1b46 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -2117,8 +2117,6 @@
       "xfa/fxfa/parser/cxfa_bind.h",
       "xfa/fxfa/parser/cxfa_binditems.cpp",
       "xfa/fxfa/parser/cxfa_binditems.h",
-      "xfa/fxfa/parser/cxfa_binditemsdata.cpp",
-      "xfa/fxfa/parser/cxfa_binditemsdata.h",
       "xfa/fxfa/parser/cxfa_bookend.cpp",
       "xfa/fxfa/parser/cxfa_bookend.h",
       "xfa/fxfa/parser/cxfa_boolean.cpp",
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index bd2b709..1160d55 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -30,7 +30,7 @@
 #include "xfa/fxfa/cxfa_textprovider.h"
 #include "xfa/fxfa/cxfa_widgetacciterator.h"
 #include "xfa/fxfa/parser/cxfa_acrobat.h"
-#include "xfa/fxfa/parser/cxfa_binditemsdata.h"
+#include "xfa/fxfa/parser/cxfa_binditems.h"
 #include "xfa/fxfa/parser/cxfa_calculate.h"
 #include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
 #include "xfa/fxfa/parser/cxfa_pageset.h"
@@ -717,10 +717,9 @@
     if (!pAcc)
       continue;
 
-    CXFA_BindItemsData bindItemsData(item);
     CFXJSE_Engine* pScriptContext =
         pWidgetNode->GetDocument()->GetScriptContext();
-    WideString wsRef = bindItemsData.GetRef();
+    WideString wsRef = item->GetRef();
     uint32_t dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                        XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent |
                        XFA_RESOLVENODE_ALL;
@@ -731,8 +730,8 @@
     if (rs.dwFlags != XFA_ResolveNode_RSType_Nodes || rs.objects.empty())
       continue;
 
-    WideString wsValueRef = bindItemsData.GetValueRef();
-    WideString wsLabelRef = bindItemsData.GetLabelRef();
+    WideString wsValueRef = item->GetValueRef();
+    WideString wsLabelRef = item->GetLabelRef();
     const bool bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef;
     const bool bLabelUseContent = wsLabelRef.IsEmpty() || wsLabelRef == L"$";
     const bool bValueUseContent = wsValueRef.IsEmpty() || wsValueRef == L"$";
diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h
index e5b27b5..be03c10 100644
--- a/xfa/fxfa/cxfa_ffdocview.h
+++ b/xfa/fxfa/cxfa_ffdocview.h
@@ -15,6 +15,7 @@
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 
+class CXFA_BindItems;
 class CXFA_FFWidgetHandler;
 class CXFA_FFDoc;
 class CXFA_FFWidget;
@@ -102,14 +103,15 @@
                                        bool bIsFormReady,
                                        bool bRecursive,
                                        CXFA_Node* pExclude);
+
+  void AddBindItem(CXFA_BindItems* item) { m_BindItems.push_back(item); }
+
   bool m_bLayoutEvent;
   std::vector<WideString> m_arrNullTestMsg;
   CXFA_FFWidget* m_pListFocusWidget;
   bool m_bInLayoutStatus;
 
  private:
-  friend class CXFA_FFNotify;
-
   bool RunEventLayoutReady();
   void RunBindItems();
   void InitCalculate(CXFA_Node* pNode);
@@ -128,7 +130,7 @@
   std::map<CXFA_FFPageView*, std::unique_ptr<CFX_RectF>> m_mapPageInvalidate;
   std::vector<CXFA_WidgetAcc*> m_ValidateAccs;
   std::vector<CXFA_WidgetAcc*> m_CalculateAccs;
-  std::vector<CXFA_Node*> m_BindItems;
+  std::vector<CXFA_BindItems*> m_BindItems;
   std::vector<CXFA_Node*> m_NewAddedNodes;
   std::vector<CXFA_Node*> m_IndexChangedSubforms;
   XFA_DOCVIEW_LAYOUTSTATUS m_iStatus;
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index 9da75bd..5b47d99 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -37,6 +37,7 @@
 #include "xfa/fxfa/cxfa_fwladapterwidgetmgr.h"
 #include "xfa/fxfa/cxfa_textlayout.h"
 #include "xfa/fxfa/cxfa_textprovider.h"
+#include "xfa/fxfa/parser/cxfa_binditems.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 
 namespace {
@@ -346,7 +347,7 @@
   }
   switch (eType) {
     case XFA_Element::BindItems:
-      pDocView->m_BindItems.push_back(pNode);
+      pDocView->AddBindItem(static_cast<CXFA_BindItems*>(pNode));
       break;
     case XFA_Element::Validate:
       pNode->SetFlag(XFA_NodeFlag_NeedsInitApp, false);
diff --git a/xfa/fxfa/parser/cxfa_binditems.cpp b/xfa/fxfa/parser/cxfa_binditems.cpp
index 1c33e4c..d7d72a7 100644
--- a/xfa/fxfa/parser/cxfa_binditems.cpp
+++ b/xfa/fxfa/parser/cxfa_binditems.cpp
@@ -34,3 +34,15 @@
                 pdfium::MakeUnique<CJX_BindItems>(this)) {}
 
 CXFA_BindItems::~CXFA_BindItems() {}
+
+WideString CXFA_BindItems::GetLabelRef() {
+  return JSObject()->GetCData(XFA_Attribute::LabelRef);
+}
+
+WideString CXFA_BindItems::GetValueRef() {
+  return JSObject()->GetCData(XFA_Attribute::ValueRef);
+}
+
+WideString CXFA_BindItems::GetRef() {
+  return JSObject()->GetCData(XFA_Attribute::Ref);
+}
diff --git a/xfa/fxfa/parser/cxfa_binditems.h b/xfa/fxfa/parser/cxfa_binditems.h
index f226342..f1a490d 100644
--- a/xfa/fxfa/parser/cxfa_binditems.h
+++ b/xfa/fxfa/parser/cxfa_binditems.h
@@ -13,6 +13,10 @@
  public:
   CXFA_BindItems(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_BindItems() override;
+
+  WideString GetLabelRef();
+  WideString GetValueRef();
+  WideString GetRef();
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_BINDITEMS_H_
diff --git a/xfa/fxfa/parser/cxfa_binditemsdata.cpp b/xfa/fxfa/parser/cxfa_binditemsdata.cpp
deleted file mode 100644
index 0477d3e..0000000
--- a/xfa/fxfa/parser/cxfa_binditemsdata.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/parser/cxfa_binditemsdata.h"
-
-#include "xfa/fxfa/parser/cxfa_node.h"
-
-CXFA_BindItemsData::CXFA_BindItemsData(CXFA_Node* pNode)
-    : CXFA_DataData(pNode) {}
-
-WideString CXFA_BindItemsData::GetLabelRef() const {
-  return m_pNode->JSObject()->GetCData(XFA_Attribute::LabelRef);
-}
-
-WideString CXFA_BindItemsData::GetValueRef() const {
-  return m_pNode->JSObject()->GetCData(XFA_Attribute::ValueRef);
-}
-
-WideString CXFA_BindItemsData::GetRef() const {
-  return m_pNode->JSObject()->GetCData(XFA_Attribute::Ref);
-}
diff --git a/xfa/fxfa/parser/cxfa_binditemsdata.h b/xfa/fxfa/parser/cxfa_binditemsdata.h
deleted file mode 100644
index ab4cac1..0000000
--- a/xfa/fxfa/parser/cxfa_binditemsdata.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXFA_PARSER_CXFA_BINDITEMSDATA_H_
-#define XFA_FXFA_PARSER_CXFA_BINDITEMSDATA_H_
-
-#include "core/fxcrt/fx_string.h"
-#include "xfa/fxfa/parser/cxfa_datadata.h"
-
-class CXFA_Node;
-
-class CXFA_BindItemsData : public CXFA_DataData {
- public:
-  explicit CXFA_BindItemsData(CXFA_Node* pNode);
-
-  WideString GetLabelRef() const;
-  WideString GetValueRef() const;
-  WideString GetRef() const;
-};
-
-#endif  // XFA_FXFA_PARSER_CXFA_BINDITEMSDATA_H_
