diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.cpp b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
index 05d20b2..c064e0f 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.cpp
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
@@ -58,8 +58,7 @@
     switch (value->GetChildValueClassID()) {
       case XFA_Element::Date: {
         if (!wsText.IsEmpty()) {
-          CXFA_LocaleValue lcValue =
-              XFA_GetLocaleValue(m_pNode->GetWidgetAcc());
+          CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pNode.Get());
           CFX_DateTime date = lcValue.GetDate();
           if (date.IsSet())
             pWidget->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
@@ -160,7 +159,7 @@
   auto* normalWidget = static_cast<CFWL_DateTimePicker*>(m_pNormalWidget.get());
   normalWidget->SetEditText(wsText);
   if (IsFocused() && !wsText.IsEmpty()) {
-    CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pNode->GetWidgetAcc());
+    CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pNode.Get());
     CFX_DateTime date = lcValue.GetDate();
     if (lcValue.IsValid()) {
       if (date.IsSet())
diff --git a/xfa/fxfa/cxfa_ffnumericedit.cpp b/xfa/fxfa/cxfa_ffnumericedit.cpp
index 666f3c0..b437bc2 100644
--- a/xfa/fxfa/cxfa_ffnumericedit.cpp
+++ b/xfa/fxfa/cxfa_ffnumericedit.cpp
@@ -82,7 +82,7 @@
     return true;
 
   WideString wsFormat;
-  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pNode->GetWidgetAcc());
+  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pNode.Get());
   widgetValue.GetNumericFormat(wsFormat,
                                m_pNode->GetWidgetAcc()->GetLeadDigits(),
                                m_pNode->GetWidgetAcc()->GetFracDigits());
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index f3caea4..da552e1 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -580,7 +580,7 @@
     if (!pLocale)
       return XFA_EVENTERROR_NotExist;
 
-    CXFA_LocaleValue lcValue = XFA_GetLocaleValue(this);
+    CXFA_LocaleValue lcValue = XFA_GetLocaleValue(GetNode());
     if (!lcValue.ValidateValue(lcValue.GetValue(), wsPicture, pLocale,
                                nullptr)) {
       IXFA_AppProvider* pAppProvider =
@@ -2745,7 +2745,7 @@
   if (!wsPicture.IsEmpty()) {
     CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr();
     IFX_Locale* pLocale = GetLocale();
-    CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
+    CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(GetNode());
     bValidate =
         widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture);
     if (bValidate) {
@@ -2777,7 +2777,7 @@
   if (ePicture == XFA_VALUEPICTURE_Raw)
     return L"";
 
-  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
+  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(GetNode());
   switch (ePicture) {
     case XFA_VALUEPICTURE_Display: {
       if (CXFA_Format* pFormat =
@@ -2892,7 +2892,7 @@
     return wsValue;
 
   if (IFX_Locale* pLocale = GetLocale()) {
-    CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
+    CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(GetNode());
     CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr();
     switch (widgetValue.GetType()) {
       case XFA_VT_DATE: {
@@ -2932,7 +2932,7 @@
   ASSERT(GetNode());
   CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr();
   IFX_Locale* pLocale = GetLocale();
-  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
+  CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(GetNode());
   if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) {
     widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsValue, wsPicture,
                                    pLocale, pLocalMgr);
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index 3342776..bc181b5 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -144,8 +144,7 @@
   if (pGrandParentNode->GetBindData())
     return false;
 
-  CXFA_WidgetAcc* pWidgetAcc = pGrandParentNode->GetWidgetAcc();
-  XFA_Element eUIType = pWidgetAcc->GetUIType();
+  XFA_Element eUIType = pGrandParentNode->GetWidgetAcc()->GetUIType();
   if (eUIType == XFA_Element::PasswordEdit)
     return false;
   return true;
@@ -417,9 +416,9 @@
   return FX_ArraySize(fraction_scales);
 }
 
-CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetAcc* pWidgetAcc) {
+CXFA_LocaleValue XFA_GetLocaleValue(CXFA_Node* pNode) {
   CXFA_Value* pNodeValue =
-      pWidgetAcc->GetNode()->GetChild<CXFA_Value>(0, XFA_Element::Value, false);
+      pNode->GetChild<CXFA_Value>(0, XFA_Element::Value, false);
   if (!pNodeValue)
     return CXFA_LocaleValue();
 
@@ -457,8 +456,8 @@
       iVTType = XFA_VT_NULL;
       break;
   }
-  return CXFA_LocaleValue(iVTType, pWidgetAcc->GetNode()->GetRawValue(),
-                          pWidgetAcc->GetNode()->GetDocument()->GetLocalMgr());
+  return CXFA_LocaleValue(iVTType, pNode->GetRawValue(),
+                          pNode->GetDocument()->GetLocalMgr());
 }
 
 bool XFA_FDEExtension_ResolveNamespaceQualifier(CFX_XMLElement* pNode,
diff --git a/xfa/fxfa/parser/xfa_utils.h b/xfa/fxfa/parser/xfa_utils.h
index 9317a78..9308157b 100644
--- a/xfa/fxfa/parser/xfa_utils.h
+++ b/xfa/fxfa/parser/xfa_utils.h
@@ -23,7 +23,7 @@
                                                 const WideString& wsQualifier,
                                                 WideString* wsNamespaceURI);
 
-CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetAcc* pWidgetAcc);
+CXFA_LocaleValue XFA_GetLocaleValue(CXFA_Node* pNode);
 int32_t XFA_MapRotation(int32_t nRotation);
 
 bool XFA_RecognizeRichText(CFX_XMLElement* pRichTextXMLNode);
