diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index 92de697..0426d5a 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -119,23 +119,22 @@
 }
 
 bool CFXJSE_ResolveProcessor::ResolveAnyChild(CFXJSE_ResolveNodeData& rnd) {
+  CXFA_Node* pParent = ToNode(rnd.m_CurObject.Get());
+  if (!pParent)
+    return false;
+
   WideStringView wsName = rnd.m_wsName.AsStringView();
   WideString wsCondition = rnd.m_wsCondition;
-  CXFA_Node* findNode = nullptr;
-  bool bClassName = false;
-  if (wsName.GetLength() && wsName[0] == '#') {
-    bClassName = true;
-    findNode = CXFA_NodeHelper::GetOneChildOfClass(
-        ToNode(rnd.m_CurObject.Get()), wsName.Right(wsName.GetLength() - 1));
-  } else {
-    findNode = CXFA_NodeHelper::GetOneChildNamed(ToNode(rnd.m_CurObject.Get()),
-                                                 wsName);
-  }
-  if (!findNode)
+  const bool bClassName = !wsName.IsEmpty() && wsName[0] == '#';
+  CXFA_Node* pChild =
+      bClassName
+          ? pParent->GetOneChildOfClass(wsName.Right(wsName.GetLength() - 1))
+          : pParent->GetOneChildNamed(wsName);
+  if (!pChild)
     return false;
 
   if (wsCondition.IsEmpty()) {
-    rnd.m_Objects.emplace_back(findNode);
+    rnd.m_Objects.emplace_back(pChild);
     return true;
   }
 
@@ -144,7 +143,7 @@
     nodes.push_back(pObject->AsNode());
 
   std::vector<CXFA_Node*> siblings =
-      CXFA_NodeHelper::GetSiblings(findNode, XFA_LOGIC_Transparent, bClassName);
+      CXFA_NodeHelper::GetSiblings(pChild, XFA_LOGIC_Transparent, bClassName);
   nodes.insert(nodes.end(), siblings.begin(), siblings.end());
   rnd.m_Objects =
       std::vector<UnownedPtr<CXFA_Object>>(nodes.begin(), nodes.end());
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 4c0d7d0..851532a 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -695,6 +695,61 @@
   return wsOutput;
 }
 
+CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
+                                       uint32_t dwNameHash,
+                                       uint32_t dwFilter);
+CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
+                                         XFA_Element element,
+                                         uint32_t dwFilter);
+
+CXFA_Node* FindFirstSiblingNamed(CXFA_Node* parent, uint32_t dwNameHash) {
+  CXFA_Node* result = FindFirstSiblingNamedInList(parent, dwNameHash,
+                                                  XFA_NODEFILTER_Properties);
+  if (result)
+    return result;
+
+  return FindFirstSiblingNamedInList(parent, dwNameHash,
+                                     XFA_NODEFILTER_Children);
+}
+
+CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
+                                       uint32_t dwNameHash,
+                                       uint32_t dwFilter) {
+  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
+    if (child->GetNameHash() == dwNameHash)
+      return child;
+
+    CXFA_Node* result = FindFirstSiblingNamed(child, dwNameHash);
+    if (result)
+      return result;
+  }
+  return nullptr;
+}
+
+CXFA_Node* FindFirstSiblingOfClass(CXFA_Node* parent, XFA_Element element) {
+  CXFA_Node* result =
+      FindFirstSiblingOfClassInList(parent, element, XFA_NODEFILTER_Properties);
+  if (result)
+    return result;
+
+  return FindFirstSiblingOfClassInList(parent, element,
+                                       XFA_NODEFILTER_Children);
+}
+
+CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
+                                         XFA_Element element,
+                                         uint32_t dwFilter) {
+  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
+    if (child->GetElementType() == element)
+      return child;
+
+    CXFA_Node* result = FindFirstSiblingOfClass(child, element);
+    if (result)
+      return result;
+  }
+  return nullptr;
+}
+
 }  // namespace
 
 class CXFA_WidgetLayoutData {
@@ -1562,6 +1617,18 @@
   return nullptr;
 }
 
+CXFA_Node* CXFA_Node::GetOneChildNamed(WideStringView wsName) {
+  return FindFirstSiblingNamed(this, FX_HashCode_GetW(wsName, false));
+}
+
+CXFA_Node* CXFA_Node::GetOneChildOfClass(WideStringView wsClass) {
+  XFA_Element element = XFA_GetElementByName(wsClass);
+  if (element == XFA_Element::Unknown)
+    return nullptr;
+
+  return FindFirstSiblingOfClass(this, element);
+}
+
 CXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() {
   CXFA_Node* pInstanceMgr = nullptr;
   if (m_ePacket == XFA_PacketType::Form) {
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index d886d9f..e7767af 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -214,6 +214,9 @@
     return static_cast<T*>(GetNextSameClassSiblingInternal(eType));
   }
 
+  CXFA_Node* GetOneChildNamed(WideStringView wsName);
+  CXFA_Node* GetOneChildOfClass(WideStringView wsClass);
+
   CXFA_Node* GetInstanceMgrOfSubform();
 
   Optional<bool> GetDefaultBoolean(XFA_Attribute attr) const;
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index 8f72acf..b99e3f6 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -20,61 +20,6 @@
 
 namespace {
 
-CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
-                                       uint32_t dwNameHash,
-                                       uint32_t dwFilter);
-CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
-                                         XFA_Element element,
-                                         uint32_t dwFilter);
-
-CXFA_Node* FindFirstSiblingNamed(CXFA_Node* parent, uint32_t dwNameHash) {
-  CXFA_Node* result = FindFirstSiblingNamedInList(parent, dwNameHash,
-                                                  XFA_NODEFILTER_Properties);
-  if (result)
-    return result;
-
-  return FindFirstSiblingNamedInList(parent, dwNameHash,
-                                     XFA_NODEFILTER_Children);
-}
-
-CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
-                                       uint32_t dwNameHash,
-                                       uint32_t dwFilter) {
-  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
-    if (child->GetNameHash() == dwNameHash)
-      return child;
-
-    CXFA_Node* result = FindFirstSiblingNamed(child, dwNameHash);
-    if (result)
-      return result;
-  }
-  return nullptr;
-}
-
-CXFA_Node* FindFirstSiblingOfClass(CXFA_Node* parent, XFA_Element element) {
-  CXFA_Node* result =
-      FindFirstSiblingOfClassInList(parent, element, XFA_NODEFILTER_Properties);
-  if (result)
-    return result;
-
-  return FindFirstSiblingOfClassInList(parent, element,
-                                       XFA_NODEFILTER_Children);
-}
-
-CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
-                                         XFA_Element element,
-                                         uint32_t dwFilter) {
-  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
-    if (child->GetElementType() == element)
-      return child;
-
-    CXFA_Node* result = FindFirstSiblingOfClass(child, element);
-    if (result)
-      return result;
-  }
-  return nullptr;
-}
-
 void TraverseSiblings(CXFA_Node* parent,
                       uint32_t dwNameHash,
                       std::vector<CXFA_Node*>* pSiblings,
@@ -171,27 +116,6 @@
 CXFA_NodeHelper::~CXFA_NodeHelper() = default;
 
 // static
-CXFA_Node* CXFA_NodeHelper::GetOneChildNamed(CXFA_Node* parent,
-                                             WideStringView wsName) {
-  if (!parent)
-    return nullptr;
-  return FindFirstSiblingNamed(parent, FX_HashCode_GetW(wsName, false));
-}
-
-// static
-CXFA_Node* CXFA_NodeHelper::GetOneChildOfClass(CXFA_Node* parent,
-                                               WideStringView wsClass) {
-  if (!parent)
-    return nullptr;
-
-  XFA_Element element = XFA_GetElementByName(wsClass);
-  if (element == XFA_Element::Unknown)
-    return nullptr;
-
-  return FindFirstSiblingOfClass(parent, element);
-}
-
-// static
 std::vector<CXFA_Node*> CXFA_NodeHelper::GetSiblings(CXFA_Node* pNode,
                                                      XFA_LOGIC_TYPE eLogicType,
                                                      bool bIsClassName) {
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.h b/xfa/fxfa/parser/cxfa_nodehelper.h
index c04178c..d4f973e 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.h
+++ b/xfa/fxfa/parser/cxfa_nodehelper.h
@@ -26,10 +26,6 @@
   CXFA_NodeHelper();
   ~CXFA_NodeHelper();
 
-  static CXFA_Node* GetOneChildNamed(CXFA_Node* parent, WideStringView wsName);
-  static CXFA_Node* GetOneChildOfClass(CXFA_Node* parent,
-                                       WideStringView wsClass);
-
   static std::vector<CXFA_Node*> GetSiblings(CXFA_Node* pNode,
                                              XFA_LOGIC_TYPE eLogicType,
                                              bool bIsClassName);
