diff --git a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
index 214f38e..10543fd 100644
--- a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
+++ b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
@@ -7,14 +7,16 @@
 #ifndef XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
 #define XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
 
+#include "core/fxcrt/unowned_ptr.h"
+
 template <class NodeType, class TraverseStrategy>
 class CXFA_NodeIteratorTemplate {
  public:
   explicit CXFA_NodeIteratorTemplate(NodeType* pRoot)
       : m_pRoot(pRoot), m_pCurrent(pRoot) {}
 
-  NodeType* GetRoot() const { return m_pRoot; }
-  NodeType* GetCurrent() const { return m_pCurrent; }
+  NodeType* GetRoot() const { return m_pRoot.Get(); }
+  NodeType* GetCurrent() const { return m_pCurrent.Get(); }
 
   void Reset() { m_pCurrent = m_pRoot; }
   bool SetCurrent(NodeType* pNode) {
@@ -30,18 +32,18 @@
     if (!m_pRoot)
       return nullptr;
     if (!m_pCurrent) {
-      m_pCurrent = LastDescendant(m_pRoot);
-      return m_pCurrent;
+      m_pCurrent = LastDescendant(m_pRoot.Get());
+      return m_pCurrent.Get();
     }
-    NodeType* pSibling = PreviousSiblingWithinSubtree(m_pCurrent);
+    NodeType* pSibling = PreviousSiblingWithinSubtree(m_pCurrent.Get());
     if (pSibling) {
       m_pCurrent = LastDescendant(pSibling);
-      return m_pCurrent;
+      return m_pCurrent.Get();
     }
-    NodeType* pParent = ParentWithinSubtree(m_pCurrent);
+    NodeType* pParent = ParentWithinSubtree(m_pCurrent.Get());
     if (pParent) {
       m_pCurrent = pParent;
-      return m_pCurrent;
+      return pParent;
     }
     return nullptr;
   }
@@ -49,10 +51,10 @@
   NodeType* MoveToNext() {
     if (!m_pRoot || !m_pCurrent)
       return nullptr;
-    NodeType* pChild = TraverseStrategy::GetFirstChild(m_pCurrent);
+    NodeType* pChild = TraverseStrategy::GetFirstChild(m_pCurrent.Get());
     if (pChild) {
       m_pCurrent = pChild;
-      return m_pCurrent;
+      return pChild;
     }
     return SkipChildrenAndMoveToNext();
   }
@@ -60,17 +62,17 @@
   NodeType* SkipChildrenAndMoveToNext() {
     if (!m_pRoot)
       return nullptr;
-    NodeType* pNode = m_pCurrent;
+    NodeType* pNode = m_pCurrent.Get();
     while (pNode) {
       NodeType* pSibling = NextSiblingWithinSubtree(pNode);
       if (pSibling) {
         m_pCurrent = pSibling;
-        return m_pCurrent;
+        return pSibling;
       }
       pNode = ParentWithinSubtree(pNode);
     }
     m_pCurrent = nullptr;
-    return m_pCurrent;
+    return nullptr;
   }
 
  private:
@@ -122,8 +124,8 @@
     return pChild ? LastDescendant(pChild) : pNode;
   }
 
-  NodeType* m_pRoot;
-  NodeType* m_pCurrent;
+  UnownedPtr<NodeType> m_pRoot;
+  UnownedPtr<NodeType> m_pCurrent;
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
