--- src/main/java/freemarker/ext/jdom/NodeListModel.java.orig	2017-10-16 02:17:50.000000000 +0100
+++ src/main/java/freemarker/ext/jdom/NodeListModel.java	2017-12-06 18:53:07.877967201 +0000
@@ -661,7 +661,7 @@
                 else if ("data".equals(localName))
                     attr = new Attribute("data", pi.getData());
                 else
-                    attr = new Attribute(localName, pi.getValue(localName));
+                    attr = new Attribute(localName, pi.getPseudoAttributeValue(localName));
             } else if (node instanceof DocType) {
                 DocType doctype = (DocType) node;
                 if ("publicId".equals(localName))
@@ -762,17 +762,17 @@
 
     private static final Element getParent(Object node) {
         if (node instanceof Element)
-            return((Element) node).getParent();
+            return((Element) node).getParentElement();
         else if (node instanceof Attribute)
             return((Attribute) node).getParent();
         else if (node instanceof Text)
-            return((Text) node).getParent();
+            return((Text) node).getParentElement();
         else if (node instanceof ProcessingInstruction)
-            return((ProcessingInstruction) node).getParent();
+            return((ProcessingInstruction) node).getParentElement();
         else if (node instanceof Comment)
-            return((Comment) node).getParent();
+            return((Comment) node).getParentElement();
         else if (node instanceof EntityRef)
-            return((EntityRef) node).getParent();
+            return((EntityRef) node).getParentElement();
         else
             // With 2.1 semantics it  makes more sense to just return a null and let the core 
             // throw an InvalidReferenceException and the template writer can use ?exists etcetera. (JR)
@@ -794,7 +794,7 @@
             LinkedList list = new LinkedList();
             do {
                 list.addFirst(parent);
-                parent = parent.getParent();
+                parent = parent.getParentElement();
             } while (parent != null);
             return list;
         }
@@ -808,7 +808,7 @@
             list.addFirst(node);
             do {
                 list.addFirst(parent);
-                parent = parent.getParent();
+                parent = parent.getParentElement();
             } while (parent != null);
             return list;
         }
@@ -861,7 +861,7 @@
                 Element parent = ((Attribute) node).getParent();
                 doc = parent == null ? null : parent.getDocument();
             } else if (node instanceof Text) {
-                Element parent = ((Text) node).getParent();
+                Element parent = ((Text) node).getParentElement();
                 doc = parent == null ? null : parent.getDocument();
             } else if (node instanceof Document)
                 doc = (Document) node;
--- src/main/java/freemarker/ext/xml/_JdomNavigator.java.orig	2012-03-01 01:56:25.000000000 +0100
+++ src/main/java/freemarker/ext/xml/_JdomNavigator.java	2012-05-16 13:32:06.328559677 +0200
@@ -122,7 +122,7 @@
             } else if ("data".equals(localName)) {
                 result.add(new Attribute("data", pi.getData()));
             } else {
-                result.add(new Attribute(localName, pi.getValue(localName)));
+                result.add(new Attribute(localName, pi.getPseudoAttributeValue(localName)));
             }
         } else if (node instanceof DocType) {
             DocType doctype = (DocType) node;
@@ -186,7 +186,7 @@
             Element parent = ((Attribute) node).getParent();
             return parent == null ? null : parent.getDocument();
         } else if (node instanceof Text) {
-            Element parent = ((Text) node).getParent();
+            Element parent = ((Text) node).getParentElement();
             return parent == null ? null : parent.getDocument();
         } else if (node instanceof Document)
             return node;
