diff --git a/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp b/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
index 89468b705bb5d243656456ec6d575946b747b55c..72a8237b7146c7060d54cce9645739f96274e236 100644
--- a/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
+++ b/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
@@ -3135,6 +3135,31 @@ SOURCE=..\..\..\..\..\src\xercesc\dom\DOMWriter.hpp
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathNamespace.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathNSResolver.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathResult.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathEvaluator.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathException.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\dom\DOMXPathExpression.hpp
+# End Source File
+# Begin Source File
+
+
 SOURCE=..\..\..\..\..\src\xercesc\dom\DOMWriterFilter.hpp
 # End Source File
 # End Group
@@ -3144,3 +3169,5 @@ SOURCE=..\..\..\..\..\src\xercesc\util\Platforms\Win32\Version.rc
 # End Source File
 # End Target
 # End Project
+
+
diff --git a/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj b/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj
index 804df825a162e6f733c144a763f04e7a52c4385f..f68c2a452242ef8e19cd5499432659e65b18347a 100644
--- a/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj
+++ b/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj
@@ -1834,6 +1834,24 @@
 			<File
 				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMTypeInfo.hpp">
 			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathNamespace.hpp">
+			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathNSResolver.hpp">
+			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathResult.hpp">
+			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathEvaluator.hpp">
+			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathException.hpp">
+			</File>
+			<File
+				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMXPathExpression.hpp">
+			</File>
 			<File
 				RelativePath="..\..\..\..\..\src\xercesc\dom\DOMUserDataHandler.hpp">
 			</File>
diff --git a/doc/html/ApacheDOMC++BindingL3.html b/doc/html/ApacheDOMC++BindingL3.html
index 4c6cf420561e0dbab05c20926ff0ec78f77bcc84..f96baf20330ac8978292ff678edb317987607fef 100644
--- a/doc/html/ApacheDOMC++BindingL3.html
+++ b/doc/html/ApacheDOMC++BindingL3.html
@@ -23,11 +23,10 @@ Binding for DOM Level 2]</a></font></div>
 <p><br>This document contains the Experimental Apache Recommended C++ Language
 binding for the <a href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20020409/">Document
 Object Model Level 3.0 Core</a>, and for the subset of&nbsp; <a href="http://www.w3.org/TR/2002/WD-DOM-Level-3-ASLS-20020409/">Document
-Object Model Level 3.0 Abstract Schemas and Load and Save</a>.&nbsp; Both
-are W3C Working Draft of 09 April 2002.
+Object Model Level 3.0 Abstract Schemas and Load and Save</a>&nbsp;, as well as the <a href="http://www.w3.org/TR/2003/CR-DOM-Level-3-XPath-20030331/">Document Object Model Level 3.0 XPath</a>.&nbsp;
 <p>The definitions are divided into <a href="#A: Document Object Model: Core">Core</a>,
 and
-<a href="#B: Document Object Model: Load and Save">Load and Save</a>.
+<a href="#B: Document Object Model: Load and Save">Load and Save</a> and <a href="#C: Document Object Model: XPath">XPath</a>.
 The headers are also available in Xerces-C++ distribution.
 <p>Note:
 <ol>
@@ -128,6 +127,13 @@ are owned by implementation</li>
 </td>
 </tr>
 
+<tr ALIGN=LEFT VALIGN=TOP>
+<td>Xerces-C++ 2.4</td>
+<td ALIGN=LEFT VALIGN=TOP>Modified
+<br>- added DOM Level 3 XPath interfaces
+</td>
+</tr>
+
 </table>
 
 <p>
@@ -4397,19 +4403,626 @@ long toShow) = 0;</font></font></td>
 </table>
 </div>
 
-<div class='div1'>
-<div id="Divider">
-<hr WIDTH="100%"></div>
-</div>
 
-<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="620" >
+
+
+<hr WIDTH="100%">
+<h2>
+<a NAME="C: Document Object Model: XPath"></a><u><font color="#000000"><a href="#C++ Language Binding for DOM Level 3">C:
+Document Object Model: XPath</a></font></u></h2>
+
+
+
+
+<h3>
+<font color="#000000">DOMXPathEvaluator.hpp:</font></h3>
+
+<div id="DOMXPathEvaluator"><font face="Courier New,Courier"><font size=-1>classDOMXPathEvaluator</font></font>
+<table>
+
 <tr ALIGN=LEFT VALIGN=TOP>
-<td ALIGN=CENTER><i><font color="#0086B2"><font size=-1>Copyright &copy;
-2001 The Apache Software Foundation. All Rights Reserved.</font></font></i></td>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>const DOMXPathExpression*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>createExpression(const XMLCh *expression, const DOMXPathNSResolver *resolver) = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>const DOMXPathNSResolver*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>createNSResolver(DOMNode *nodeResolver) = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>void*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>evaluate(const XMLCh *expression, DOMNode *contextNode, const DOMXPathNSResolver *resolver,                            unsigned short type, void* result) = 0;
+</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
 </tr>
 </table>
-</div>
-</div>
+
+
+
+
+<h3>
+<font color="#000000">DOMXPathException.hpp:</font></h3>
+
+<div id="DOMXPathException"><font face="Courier New,Courier"><font size=-1>classDOMXPathException</font></font>
+<table>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>enum</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>ExceptionCode {</font></font></td>
+
+<td></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>INVALID_EXPRESSION_ERR</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 51,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>TYPE_ERR</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 52,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+</table>
+
+<h3>
+<font color="#000000">DOMXPathExpression.hpp:</font></h3>
+
+<div id="DOMXPathExpression"><font face="Courier New,Courier"><font size=-1>class
+DOMXPathExpression</font></font>
+<table>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>void*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>evaluate(DOMNode *contextNode, unsigned short type, void* result) const = 0;</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+</table>
+
+
+
+
+
+<h3>
+<font color="#000000">DOMXPathNamespace.hpp:</font></h3>
+
+<div id="DOMXPathNamespace"><font face="Courier New,Courier"><font size=-1>classDOMXPathNamespace</font></font>
+<table>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>enum</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>XPathNodeType {</font></font></td>
+
+<td></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>XPATH_NAMESPACE_NODE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 13,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>DOMElement</font></font></td>
+<td><font face="Courier New,Courier"><font size=-1>*getOwnerElement() const = 0;</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+</table>
+
+
+
+
+<h3>
+<font color="#000000">DOMXPathNSResolver.hpp:</font></h3>
+
+<div id="DOMXPathNSResolver"><font face="Courier New,Courier"><font size=-1>class
+DOMXPathNSResolver</font></font>
+<table>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>const XMLCh*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>lookupNamespaceURI(const XMLCh* prefix) const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>const XMLCh*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>lookupPrefix(const XMLCh* URI) const = 0;</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+</table>
+
+
+
+
+
+<h3>
+<font color="#000000">DOMXPathResult.hpp:</font></h3>
+
+<div id="DOMXPathResult"><font face="Courier New,Courier"><font size=-1>class
+DOMXPathResult</font></font>
+<table>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>{</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>public:</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>enum</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>resultType {</font></font></td>
+
+<td></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>ANY_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 0,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>NUMBER_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 1,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>STRING_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 2,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>BOOLEAN_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 3,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>UNORDERED_NODE_ITERATOR_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 4,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>ORDERED_NODE_ITERATOR_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 5,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>UNORDERED_NODE_SNAPSHOT_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 6,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>ORDERED_NODE_SNAPSHOT_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 7,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>ANY_UNORDERED_NODE_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 8,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>FIRST_ORDERED_NODE_TYPE</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>= 9,</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>bool</font></font></td>
+
+
+
+
+<td><font face="Courier New,Courier"><font size=-1>getBooleanValue() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>bool</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>getInvalidIteratorState() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>double</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>getNumberValue() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>short</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>getResultType() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>DOMNode</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>*getSingleNodeValue() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>unsigned long</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>getSnapshotLength() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>const XMLCh*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>getStringValue() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>DOMNode*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>iterateNext() const = 0;</font></font></td>
+</tr>
+
+<tr ALIGN=LEFT VALIGN=TOP>
+<td></td>
+
+<td><font face="Courier New,Courier"><font size=-1>virtual</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>DOMNode*</font></font></td>
+
+<td><font face="Courier New,Courier"><font size=-1>snapshotItem(unsigned long index) const = 0;</font></font></td>
+</tr>
+<tr ALIGN=LEFT VALIGN=TOP>
+<td><font face="Courier New,Courier"><font size=-1>};</font></font></td>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+</tr>
+</table>
+
+<td></td>
+
+<td></td>
+
+<td></td>
+
+
+</tr>
+</table>
+</div>
+
+<div class='div1'>
+<div id="Divider">
+<hr WIDTH="100%"></div>
+</div>
+
+<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="620" >
+<tr ALIGN=LEFT VALIGN=TOP>
+<td ALIGN=CENTER><i><font color="#0086B2"><font size=-1>Copyright &copy;
+2001 The Apache Software Foundation. All Rights Reserved.</font></font></i></td>
+</tr>
+</table>
+</div>
+</div>
+
+
 
 </body>
 </html>
diff --git a/src/xercesc/dom/DOM.hpp b/src/xercesc/dom/DOM.hpp
index 7192e529fac5a7ccfd3fa22991b749c39324f9fd..3f149c82eb07e09ca5c4c8ef41e82c09e9366bd8 100644
--- a/src/xercesc/dom/DOM.hpp
+++ b/src/xercesc/dom/DOM.hpp
@@ -111,6 +111,12 @@
 #include <xercesc/dom/DOMWriter.hpp>
 #include <xercesc/dom/DOMWriterFilter.hpp>
 
+#include <xercesc/dom/DOMXPathEvaluator.hpp>
+#include <xercesc/dom/DOMXPathNSResolver.hpp>
+#include <xercesc/dom/DOMXPathException.hpp>
+#include <xercesc/dom/DOMXPathExpression.hpp>
+#include <xercesc/dom/DOMXPathResult.hpp>
+#include <xercesc/dom/DOMXPathNamespace.hpp>
 
 
 #endif
diff --git a/src/xercesc/dom/DOMDocument.hpp b/src/xercesc/dom/DOMDocument.hpp
index cf196b6c8c33197218979bcede019f252bdc853e..2c8740cbf54fdc6fe6e9ad8780b56aa5b75e2f35 100644
--- a/src/xercesc/dom/DOMDocument.hpp
+++ b/src/xercesc/dom/DOMDocument.hpp
@@ -65,6 +65,7 @@
 #include "DOMNode.hpp"
 #include "DOMDocumentRange.hpp"
 #include "DOMDocumentTraversal.hpp"
+#include "DOMXPathEvaluator.hpp"
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -100,9 +101,11 @@ class DOMNode;
  */
 
 class CDOM_EXPORT DOMDocument: public DOMDocumentRange,
+ public DOMXPathEvaluator,
  public DOMDocumentTraversal,
  public DOMNode {
 
+
 protected:
     // -----------------------------------------------------------------------
     //  Hidden constructors
diff --git a/src/xercesc/dom/DOMXPathEvaluator.hpp b/src/xercesc/dom/DOMXPathEvaluator.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..4e775fcd8c5bd2548744523a766c534146405c88
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathEvaluator.hpp
@@ -0,0 +1,211 @@
+#ifndef DOMXPathEvaluator_HEADER_GUARD_
+#define DOMXPathEvaluator_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include <xercesc/util/XercesDefs.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class DOMXPathNSResolver;
+class DOMXPathExpression;
+class DOMNode;
+
+/**
+ * The evaluation of XPath expressions is provided by <code>DOMXPathEvaluator</code>. 
+ * In a DOM implementation which supports the XPath 3.0 feature, the <code>DOMXPathEvaluator</code>
+ * interface will be implemented on the same object which implements the Document interface permitting
+ * it to be obtained by casting or by using the DOM Level 3 getInterface method. In this case the
+ * implementation obtained from the Document supports the XPath DOM module and is compatible 
+ * with the XPath 1.0 specification.
+ * Evaluation of expressions with specialized extension functions or variables may not
+ * work in all implementations and is, therefore, not portable. XPathEvaluator implementations
+ * may be available from other sources that could provide specific support for specialized extension
+ * functions or variables as would be defined by other specifications.
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathEvaluator
+{
+
+protected:
+    // -----------------------------------------------------------------------
+    //  Hidden constructors
+    // -----------------------------------------------------------------------
+    /** @name Hidden constructors */
+    //@{    
+    DOMXPathEvaluator() {};
+    //@}
+
+private:
+    // -----------------------------------------------------------------------
+    // Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    /** @name Unimplemented constructors and operators */
+    //@{
+    DOMXPathEvaluator(const DOMXPathEvaluator &);
+    DOMXPathEvaluator& operator = (const  DOMXPathEvaluator&);
+    //@}
+
+public:
+    // -----------------------------------------------------------------------
+    //  All constructors are hidden, just the destructor is available
+    // -----------------------------------------------------------------------
+    /** @name Destructor */
+    //@{
+    /**
+     * Destructor
+     *
+     */
+    virtual ~DOMXPathEvaluator() {};
+    //@}
+
+    // -----------------------------------------------------------------------
+    // Virtual DOMDocument interface
+    // -----------------------------------------------------------------------
+    /** @name Functions introduced in DOM Level 3 */
+    //@{
+
+    /**
+     * Creates a parsed XPath expression with resolved namespaces. This is useful
+     * when an expression will be reused in an application since it makes it 
+     * possible to compile the expression string into a more efficient internal 
+     * form and preresolve all namespace prefixes which occur within the expression.
+     * @param expression of type XMLCh - The XPath expression string to be parsed.
+     * @param resolver of type <code>XPathNSResolver</code> - The resolver permits 
+     * translation of all prefixes, including the xml namespace prefix, within the XPath expression
+     * into appropriate namespace URIs. If this is specified as null, any namespace 
+     * prefix within the expression will result in <code>DOMException</code> being thrown with the
+     * code NAMESPACE_ERR.
+     * @return <code>XPathExpression</code> The compiled form of the XPath expression.
+     * @exception <code>XPathException</code>
+     * INVALID_EXPRESSION_ERR: Raised if the expression is not legal according to the 
+     * rules of the <code>DOMXPathEvaluator</code>.
+     * @exception DOMException
+     * NAMESPACE_ERR: Raised if the expression contains namespace prefixes which cannot
+     * be resolved by the specified <code>XPathNSResolver</code>.
+     * @since DOM Level 3
+     */
+    virtual const DOMXPathExpression*    createExpression(const XMLCh *expression, const DOMXPathNSResolver *resolver) = 0;
+
+
+    /** Adapts any DOM node to resolve namespaces so that an XPath expression can be
+     * easily evaluated relative to the context of the node where it appeared within
+     * the document. This adapter works like the DOM Level 3 method lookupNamespaceURI
+     * on nodes in resolving the namespaceURI from a given prefix using the current 
+     * information available in the node's hierarchy at the time lookupNamespaceURI 
+     * is called. also correctly resolving the implicit xml prefix.
+     * @param nodeResolver of type <code>DOMNode</code> The node to be used as a context 
+     * for namespace resolution.
+     * @return <code>XPathNSResolver</code> <code>XPathNSResolver</code> which resolves namespaces 
+     * with respect to the definitions in scope for a specified node.
+     */
+    virtual const DOMXPathNSResolver*    createNSResolver(DOMNode *nodeResolver) = 0;
+
+
+    /**
+     * Evaluates an XPath expression string and returns a result of the specified 
+     * type if possible.
+     * @param expression of type XMLCh The XPath expression string to be parsed 
+     * and evaluated.
+     * @param contextNode of type <code>DOMNode</code> The context is context node 
+     * for the evaluation 
+     * of this XPath expression. If the <code>DOMXPathEvaluator</code> was obtained by
+     * casting the <code>DOMDocument</code> then this must be owned by the same 
+     * document and must be a <code>DOMDocument</code>, <code>DOMElement</code>, 
+     * <code>DOMAttribute</code>, <code>DOMText</code>, <code>DOMCDATASection</code>, 
+     * <code>DOMComment</code>, <code>DOMProcessingInstruction</code>, or 
+     * <code>XPathNamespace</code> node. If the context node is a <code>DOMText</code> or 
+     * a <code>DOMCDATASection</code>, then the context is interpreted as the whole 
+     * logical text node as seen by XPath, unless the node is empty in which case it
+     * may not serve as the XPath context.
+     * @param resolver of type <code>XPathNSResolver</code> The resolver permits 
+     * translation of all prefixes, including the xml namespace prefix, within 
+     * the XPath expression into appropriate namespace URIs. If this is specified 
+     * as null, any namespace prefix within the expression will result in 
+     * <code>DOMException</code> being thrown with the code NAMESPACE_ERR.
+     * @param type of type unsigned short - If a specific type is specified, then 
+     * the result will be returned as the corresponding type.
+     * For XPath 1.0 results, this must be one of the codes of the <code>XPathResult</code>
+     * interface.
+     * @param result of type void* - The result specifies a specific result object
+     * which may be reused and returned by this method. If this is specified as 
+     * null or the implementation does not reuse the specified result, a new result
+     * object will be constructed and returned.
+     * For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
+     * @return void* The result of the evaluation of the XPath expression.
+     * For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
+     * @exception <code>XPathException</code>
+     * INVALID_EXPRESSION_ERR: Raised if the expression is not legal 
+     * according to the rules of the <code>DOMXPathEvaluator</code>
+     * TYPE_ERR: Raised if the result cannot be converted to return the specified type.
+     * @exception DOMException
+     * NAMESPACE_ERR: Raised if the expression contains namespace prefixes 
+     * which cannot be resolved by the specified <code>XPathNSResolver</code>.
+     * WRONG_DOCUMENT_ERR: The Node is from a document that is not supported 
+     * by this <code>DOMXPathEvaluator</code>.
+     * NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath context 
+     * node or the request type is not permitted by this <code>DOMXPathEvaluator</code>.
+     */
+    virtual void* evaluate(const XMLCh *expression, DOMNode *contextNode, const DOMXPathNSResolver *resolver, 
+                           unsigned short type, void* result) = 0;
+
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/dom/DOMXPathException.cpp b/src/xercesc/dom/DOMXPathException.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bcc5b0c97181ec87e4520f0afadd6759cb99b8c8
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathException.cpp
@@ -0,0 +1,89 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+
+#include "DOMXPathException.hpp"
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+
+DOMXPathException::DOMXPathException()
+: msg(0)
+{
+        code = (ExceptionCode) 0;
+};
+
+
+DOMXPathException::DOMXPathException(short exCode, const XMLCh *message)
+: msg(message)
+{
+   code = (ExceptionCode) exCode;
+};
+
+
+DOMXPathException::DOMXPathException(const DOMXPathException &other)
+: msg(other.msg)
+{
+        code = other.code;
+};
+
+
+DOMXPathException::~DOMXPathException()
+{
+};
+
+XERCES_CPP_NAMESPACE_END
+
diff --git a/src/xercesc/dom/DOMXPathException.hpp b/src/xercesc/dom/DOMXPathException.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..43db64f582d13b8e85b543a9453bfd1e2c0b3fa6
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathException.hpp
@@ -0,0 +1,150 @@
+#ifndef DOMXPathException_HEADER_GUARD_
+#define DOMXPathException_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include <xercesc/util/XercesDefs.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+/**
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathException
+{
+public:
+    // -----------------------------------------------------------------------
+    //  Constructors
+    // -----------------------------------------------------------------------
+    /** @name Constructors */
+    //@{
+    /**
+      * Default constructor for DOMXPathException.
+      *
+      */
+    DOMXPathException();
+
+    /**
+      * Constructor which takes an error code and a message.
+      *
+      * @param code The error code which indicates the exception
+      * @param message The string containing the error message
+      */
+    DOMXPathException(short code, const XMLCh *message);
+
+    /**
+      * Copy constructor.
+      *
+      * @param other The object to be copied.
+      */
+    DOMXPathException(const DOMXPathException  &other);
+
+    //@}
+
+    // -----------------------------------------------------------------------
+    //  Destructors
+    // -----------------------------------------------------------------------
+    /** @name Destructor. */
+    //@{
+	 /**
+	  * Destructor for DOMXPathException.
+	  *
+	  */
+    virtual ~DOMXPathException();
+    //@}
+
+public:
+
+    //@{
+    /**
+     * ExceptionCode
+     * INVALID_EXPRESSION_ERR If the expression has a syntax error or otherwise
+     * is not a legal expression according to the rules of the specific 
+     * <code>XPathEvaluator</code> or contains specialized extension functions
+     * or variables not supported by this implementation.
+     * TYPE_ERR If the expression cannot be converted to return the specified type.
+     */
+	enum ExceptionCode {
+		INVALID_EXPRESSION_ERR = 51,
+		TYPE_ERR = 52,
+	};
+    //@}
+
+    // -----------------------------------------------------------------------
+    //  Class Types
+    // -----------------------------------------------------------------------
+    /** @name Public variables */
+    //@{
+	 /**
+	  * A code value, from the set defined by the ExceptionCode enum,
+     * indicating the type of error that occured.
+     */
+    ExceptionCode   code;
+
+	 /**
+	  * A string value.  Applications may use this field to hold an error
+     *  message.  The field value is not set by the DOM implementation,
+     *  meaning that the string will be empty when an exception is first
+     *  thrown.
+	  */
+    const XMLCh *msg;
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/dom/DOMXPathExpression.hpp b/src/xercesc/dom/DOMXPathExpression.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..14f020dde0609fe35b7f7cc6c6ed943aafca1f8d
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathExpression.hpp
@@ -0,0 +1,147 @@
+#ifndef DOMXPathExpression_HEADER_GUARD_
+#define DOMXPathExpression_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include <xercesc/util/XercesDefs.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class DOMNode;
+/**
+ * The <code>DOMXPathExpression</code> interface represents a parsed and resolved XPath expression.
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathExpression
+{
+
+protected:
+    // -----------------------------------------------------------------------
+    //  Hidden constructors
+    // -----------------------------------------------------------------------
+    /** @name Hidden constructors */
+    //@{    
+    DOMXPathExpression() {};
+    //@}
+
+private:
+    // -----------------------------------------------------------------------
+    // Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    /** @name Unimplemented constructors and operators */
+    //@{
+    DOMXPathExpression(const DOMXPathExpression &);
+    DOMXPathExpression& operator = (const  DOMXPathExpression&);
+    //@}
+
+public:
+    // -----------------------------------------------------------------------
+    //  All constructors are hidden, just the destructor is available
+    // -----------------------------------------------------------------------
+    /** @name Destructor */
+    //@{
+    /**
+     * Destructor
+     *
+     */
+    virtual ~DOMXPathExpression() {};
+    //@}
+
+    // -----------------------------------------------------------------------
+    // Virtual DOMDocument interface
+    // -----------------------------------------------------------------------
+    /** @name Functions introduced in DOM Level 3 */
+    //@{  
+
+    /**
+     * Evaluates this XPath expression and returns a result.
+     * @param contextNode of type <code>DOMNode</code> The context is context
+     * node for the evaluation of this XPath expression.
+     * If the XPathEvaluator was obtained by casting the Document then this must 
+     * be owned by the same document and must be a <code>DOMDocument</code>, <code>DOMElement</code>, 
+     * <code>DOMAttribute</code>, <code>DOMText</code>, <code>DOMCDATASection</code>, 
+     * <code>DOMComment</code>, <code>DOMProcessingInstruction</code>, or 
+     * <code>XPathNamespace</code>. If the context node is a <code>DOMText</code> or a 
+     * <code>DOMCDATASection</code>, then the context is interpreted as the whole logical
+     * text node as seen by XPath, unless the node is empty in which case it may not
+     * serve as the XPath context.
+     * @param type of type unsigned short If a specific type is specified, then the result
+     * will be coerced to return the specified type relying on XPath conversions and fail 
+     * if the desired coercion is not possible. This must be one of the type codes of <code>XPathResult</code>.
+     * @param result of type void* The result specifies a specific result object which
+     * may be reused and returned by this method. If this is specified as nullor the 
+     * implementation does not reuse the specified result, a new result object will be constructed
+     * and returned.
+     * For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
+     * @return void* The result of the evaluation of the XPath expression.
+     * For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
+     * @exception <code>XPathException</code>
+     * TYPE_ERR: Raised if the result cannot be converted to return the specified type.
+     * @exception <code>DOMException</code>
+     * WRONG_DOCUMENT_ERR: The <code>DOMNode</code> is from a document that is not supported by 
+     * the <code>XPathEvaluator</code> that created this <code>DOMXPathExpression</code>.
+     * NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath context node or the 
+     * request type is not permitted by this <code>DOMXPathExpression</code>.
+     */
+
+    virtual void*          evaluate(DOMNode *contextNode, unsigned short type, void* result) const = 0;
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/dom/DOMXPathNSResolver.hpp b/src/xercesc/dom/DOMXPathNSResolver.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..e5991a351225522469c290ff6b50a395c541c6f8
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathNSResolver.hpp
@@ -0,0 +1,147 @@
+#ifndef DOMXPathNSResolver_HEADER_GUARD_
+#define DOMXPathNSResolver_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include <xercesc/util/XercesDefs.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+/**
+ * The <code>DOMXPathNSResolver</code> interface permit prefix strings
+ * in the expression to be properly bound to namespaceURI strings. 
+ * <code>DOMXPathEvaluator</code> can construct an implementation of 
+ * <code>DOMXPathNSResolver</code> from a node, or the interface may be
+ * implemented by any application.
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathNSResolver
+{
+
+protected:
+    // -----------------------------------------------------------------------
+    //  Hidden constructors
+    // -----------------------------------------------------------------------
+    /** @name Hidden constructors */
+    //@{    
+    DOMXPathNSResolver() {};
+    //@}
+
+private:
+    // -----------------------------------------------------------------------
+    // Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    /** @name Unimplemented constructors and operators */
+    //@{
+    DOMXPathNSResolver(const DOMXPathNSResolver &);
+    DOMXPathNSResolver& operator = (const  DOMXPathNSResolver&);
+    //@}
+
+public:
+    // -----------------------------------------------------------------------
+    //  All constructors are hidden, just the destructor is available
+    // -----------------------------------------------------------------------
+    /** @name Destructor */
+    //@{
+    /**
+     * Destructor
+     *
+     */
+    virtual ~DOMXPathNSResolver() {};
+    //@}
+
+    // -----------------------------------------------------------------------
+    // Virtual DOMDocument interface
+    // -----------------------------------------------------------------------
+    /** @name Functions introduced in DOM Level 3 */
+    //@{
+
+    /** Look up the namespace URI associated to the given namespace prefix. 
+     * The XPath evaluator must never call this with a null or empty argument, 
+     * because the result of doing this is undefined.
+     * @param prefix of type XMLCh - The prefix to look for.
+     * @return the associated namespace URI or null if none is found.
+     */
+    virtual const XMLCh*          lookupNamespaceURI(const XMLCh* prefix) const = 0;
+    //@}
+
+
+    // -----------------------------------------------------------------------
+    // Non-standard extension
+    // -----------------------------------------------------------------------
+    /** @name Non-standard extension */
+    //@{
+
+    /**
+     * Non-standard extension
+     *
+     * XPath2 implementations require a reverse lookup in the static context.
+     * Look up the prefix associated with the namespace URI
+     * The XPath evaluator must never call this with a null or empty argument, 
+     * because the result of doing this is undefined.
+     * @param URI of type XMLCh - The namespace to look for.
+     * @return the associated prefix or null if none is found.
+     */
+    virtual const XMLCh*          lookupPrefix(const XMLCh* URI) const = 0;
+
+
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
+
diff --git a/src/xercesc/dom/DOMXPathNamespace.hpp b/src/xercesc/dom/DOMXPathNamespace.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ec0c4a129f970072421c4f01ccd879912f5e9af0
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathNamespace.hpp
@@ -0,0 +1,150 @@
+#ifndef DOMXPathNamespace_HEADER_GUARD_
+#define DOMXPathNamespace_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include "DOMNode.hpp"
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class DOMElement;
+
+/**
+ * The <code>DOMXPathNamespace</code> interface is returned by <code>DOMXPathResult</code>
+ * interfaces to represent the XPath namespace node type that DOM lacks. There is no
+ * public constructor for this node type. Attempts to place it into a hierarchy or a 
+ * NamedNodeMap result in a DOMException with the code HIERARCHY_REQUEST_ERR. This node
+ * is read only, so methods or setting of attributes that would mutate the node result 
+ * in a <code>DOMException</code> with the code NO_MODIFICATION_ALLOWED_ERR.
+ * The core specification describes attributes of the <code>DOMNode</code> interface that 
+ * are different for different node types but does not describe XPATH_NAMESPACE_NODE, 
+ * so here is a description of those attributes for this node type. All attributes of
+ * <code>DOMNode</code> not described in this section have a null or false value.
+ * ownerDocument matches the ownerDocument of the ownerElement even if the element is later adopted.
+ * nodeName is always the string "#namespace".
+ * prefix is the prefix of the namespace represented by the node.
+ * localName is the same as prefix.
+ * nodeType is equal to XPATH_NAMESPACE_NODE.
+ * namespaceURI is the namespace URI of the namespace represented by the node.
+ * nodeValue is the same as namespaceURI.
+ * adoptNode, cloneNode, and importNode fail on this node type by raising a DOMException with the code NOT_SUPPORTED_ERR.
+ * Note: In future versions of the XPath specification, the definition of a namespace node may
+ * be changed incomatibly, in which case incompatible changes to field values may be required to
+ * implement versions beyond XPath 1.0.
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathNamespace : public DOMNode
+{
+
+protected:
+    // -----------------------------------------------------------------------
+    //  Hidden constructors
+    // -----------------------------------------------------------------------
+    /** @name Hidden constructors */
+    //@{    
+    DOMXPathNamespace() {};
+    //@}
+
+private:
+    // -----------------------------------------------------------------------
+    // Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    /** @name Unimplemented constructors and operators */
+    //@{
+    DOMXPathNamespace(const DOMXPathNamespace &);
+    DOMXPathNamespace& operator = (const  DOMXPathNamespace&);
+    //@}
+
+public:
+
+    
+    enum XPathNodeType {
+        XPATH_NAMESPACE_NODE = 13
+    };
+
+    // -----------------------------------------------------------------------
+    //  All constructors are hidden, just the destructor is available
+    // -----------------------------------------------------------------------
+    /** @name Destructor */
+    //@{
+    /**
+     * Destructor
+     *
+     */
+    virtual ~DOMXPathNamespace() {};
+    //@}
+
+    // -----------------------------------------------------------------------
+    // Virtual DOMDocument interface
+    // -----------------------------------------------------------------------
+    /** @name Functions introduced in DOM Level 3 */
+    //@{
+    /**
+     * The <code>DOMElement</code> on which the namespace was in scope when 
+     * it was requested. This does not change on a returned namespace node
+     * even if the document changes such that the namespace goes out of
+     * scope on that element and this node is no longer found there by XPath.
+     * @since DOM Level 3
+     */
+    virtual DOMElement     *getOwnerElement() const = 0;
+
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/dom/DOMXPathResult.hpp b/src/xercesc/dom/DOMXPathResult.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..a85de8a89f58ca41b81b567aeff508a2c46da163
--- /dev/null
+++ b/src/xercesc/dom/DOMXPathResult.hpp
@@ -0,0 +1,293 @@
+#ifndef DOMXPathResult_HEADER_GUARD_
+#define DOMXPathResult_HEADER_GUARD_
+
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 2001, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#include <xercesc/util/XercesDefs.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class DOMXPathNSResolver;
+class DOMXPathExpression;
+class DOMNode;
+
+/**
+ * The <code>DOMXPathResult</code> interface represents the result of the
+ * evaluation of an XPath 1.0 expression within the context of a particular
+ * node. Since evaluation of an XPath expression can result in various result
+ * types, this object makes it possible to discover and manipulate the type
+ * and value of the result.
+ * @since DOM Level 3
+ */
+class CDOM_EXPORT DOMXPathResult
+{
+
+protected:
+    // -----------------------------------------------------------------------
+    //  Hidden constructors
+    // -----------------------------------------------------------------------
+    /** @name Hidden constructors */
+    //@{    
+    DOMXPathResult() {};
+    //@}
+
+private:
+    // -----------------------------------------------------------------------
+    // Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    /** @name Unimplemented constructors and operators */
+    //@{
+    DOMXPathResult(const DOMXPathResult &);
+    DOMXPathResult& operator = (const  DOMXPathResult&);
+    //@}
+
+public:
+    // -----------------------------------------------------------------------
+    //  All constructors are hidden, just the destructor is available
+    // -----------------------------------------------------------------------
+    /** @name Destructor */
+    //@{
+    /**
+     * Destructor
+     *
+     */
+    virtual ~DOMXPathResult() {};
+    //@}
+
+    // -----------------------------------------------------------------------
+    //  Class Types
+    // -----------------------------------------------------------------------
+    /** @name Public Contants */
+    //@{
+    /**    ANY_TYPE
+     * This code does not represent a specific type. An evaluation of an XPath 
+     * expression will never produce this type. If this type is requested, then 
+     * the evaluation returns whatever type naturally results from evaluation 
+     * of the expression.
+     * If the natural result is a node set when ANY_TYPE was requested, then 
+     * UNORDERED_NODE_ITERATOR_TYPE is always the resulting type. Any other 
+     * representation of a node set must be explicitly requested.
+     * ANY_UNORDERED_NODE_TYPE
+     * The result is a node set as defined by [XPath 1.0] and will be accessed
+     * as a single node, which may be nullif the node set is empty. Document
+     * modification does not invalidate the node, but may mean that the result 
+     * node no longer corresponds to the current document. This is a convenience
+     * that permits optimization since the implementation can stop once any node 
+     * in the resulting set has been found.
+     * If there is more than one node in the actual result, the single node 
+     * returned might not be the first in document order.
+     * BOOLEAN_TYPE
+     * The result is a boolean as defined by [XPath 1.0]. Document modification 
+     * does not invalidate the boolean, but may mean that reevaluation would not 
+     * yield the same boolean.
+     * FIRST_ORDERED_NODE_TYPE
+     * The result is a node set as defined by [XPath 1.0] and will be accessed
+     * as a single node, which may be null if the node set is empty. Document 
+     * modification does not invalidate the node, but may mean that the result 
+     * node no longer corresponds to the current document. This is a convenience
+     * that permits optimization since the implementation can stop once the first
+     * node in document order of the resulting set has been found.
+     * If there are more than one node in the actual result, the single node 
+     * returned will be the first in document order.
+     * NUMBER_TYPE
+     * The result is a number as defined by [XPath 1.0]. Document modification does
+     * not invalidate the number, but may mean that reevaluation would not yield the 
+     * same number.
+     * ORDERED_NODE_ITERATOR_TYPE
+     * The result is a node set as defined by [XPath 1.0] that will be accessed 
+     * iteratively, which will produce document-ordered nodes. Document modification 
+     * invalidates the iteration.
+     * ORDERED_NODE_SNAPSHOT_TYPE
+     * The result is a node set as defined by [XPath 1.0] that will be accessed as a
+     * snapshot list of nodes that will be in original document order. Document 
+     * modification does not invalidate the snapshot but may mean that reevaluation would
+     * not yield the same snapshot and nodes in the snapshot may have been altered, moved, 
+     * or removed from the document.
+     * STRING_TYPE
+     * The result is a string as defined by [XPath 1.0]. Document modification does not
+     * invalidate the string, but may mean that the string no longer corresponds to the 
+     * current document.
+     * UNORDERED_NODE_ITERATOR_TYPE
+     * The result is a node set as defined by [XPath 1.0] that will be accessed iteratively, 
+     * which may not produce nodes in a particular order. Document modification invalidates the iteration.
+     * This is the default type returned if the result is a node set and ANY_TYPE is requested.
+     * UNORDERED_NODE_SNAPSHOT_TYPE
+     * The result is a node set as defined by [XPath 1.0] that will be accessed as a
+     * snapshot list of nodes that may not be in a particular order. Document modification
+     * does not invalidate the snapshot but may mean that reevaluation would not yield the same
+     * snapshot and nodes in the snapshot may have been altered, moved, or removed from the document.
+     */
+	enum resultType {
+                ANY_TYPE = 0,
+                NUMBER_TYPE = 1,
+                STRING_TYPE = 2,
+                BOOLEAN_TYPE = 3,
+                UNORDERED_NODE_ITERATOR_TYPE = 4,
+                ORDERED_NODE_ITERATOR_TYPE = 5,
+                UNORDERED_NODE_SNAPSHOT_TYPE = 6,
+                ORDERED_NODE_SNAPSHOT_TYPE = 7,
+                ANY_UNORDERED_NODE_TYPE = 8,
+                FIRST_ORDERED_NODE_TYPE = 9
+    };
+    //@}
+
+
+    // -----------------------------------------------------------------------
+    // Virtual DOMDocument interface
+    // -----------------------------------------------------------------------
+    /** @name Functions introduced in DOM Level 3 */
+    //@{
+
+
+    /** 
+     * Returns the boolean value of this result
+     * @return booleanValue of type boolean, readonly
+     * The value of this boolean result.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not BOOLEAN_TYPE.
+     */
+	virtual bool getBooleanValue() const = 0;
+
+    /** 
+     * Returns the state of the iterator
+     * @return invalidIteratorState 
+     * Signifies that the iterator has become invalid. True if resultType is 
+     * UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE and the 
+     * document has been modified since this result was returned.
+     * @exception XPathException 
+     * TYPE_ERR: raised if resultType is not NUMBER_TYPE.
+     */
+	virtual bool getInvalidIteratorState() const = 0;
+
+    /**
+     * Returns the number value of this result
+     * @return numberValue 
+     * The value of this number result. If the native double type of the DOM 
+     * binding does not directly support the exact IEEE 754 result of the XPath 
+     * expression, then it is up to the definition of the binding to specify how 
+     * the XPath number is converted to the native binding number.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not NUMBER_TYPE.
+     */
+	virtual double getNumberValue() const = 0;
+
+    /**
+     * Returns the result type of this result
+     * @return resultType 
+     * A code representing the type of this result, as defined by the type constants.       
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.
+     */
+	virtual short getResultType() const = 0;
+    	
+    /**
+     * Returns the single node value of this result
+     * @return singleNodeValue 
+     * The value of this single node result, which may be null.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.
+     */
+	virtual DOMNode *getSingleNodeValue() const = 0;
+
+    /**
+     * Returns the snapshot length
+     * @return snapshotLength 
+     * The number of nodes in the result snapshot. Valid values for snapshotItem indices 
+     * are 0 to snapshotLength-1 inclusive.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not UNORDERED_NODE_SNAPSHOT_TYPE or 
+     * ORDERED_NODE_SNAPSHOT_TYPE.        
+     */
+	virtual unsigned long getSnapshotLength() const = 0;
+        
+    /**
+     * Returns the string value of this result
+     * @return stringValue 
+     * The value of this string result.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not STRING_TYPE.
+     */
+	virtual const XMLCh* getStringValue() const = 0;
+    
+    /**
+     * Iterates and returns the next node from the node set or nullif there are no more nodes.
+     * @return the next node.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE.
+     * @exception DOMException
+     * INVALID_STATE_ERR: The document has been mutated since the result was returned.	
+     */
+	virtual DOMNode* iterateNext() const = 0;
+
+    /**
+     * Returns the indexth item in the snapshot collection. If index is greater than or
+     * equal to the number of nodes in the list, this method returns null. Unlike the
+     * iterator result, the snapshot does not become invalid, but may not correspond 
+     * to the current document if it is mutated.
+     * @param index of type unsigned long - Index into the snapshot collection.
+     * @return The node at the indexth position in the NodeList, or null if that is not a valid index.
+     * @exception XPathException
+     * TYPE_ERR: raised if resultType is not UNORDERED_NODE_SNAPSHOT_TYPE or ORDERED_NODE_SNAPSHOT_TYPE.	
+     */
+	virtual DOMNode* snapshotItem(unsigned long index) const = 0;
+
+    //@}
+};
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/dom/Makefile.in b/src/xercesc/dom/Makefile.in
index 6c85f94bbd4f408f3c0c4b67b1af63e586e7ba79..ddae68409ac9d62b72342e2df8d1df24c292f803 100644
--- a/src/xercesc/dom/Makefile.in
+++ b/src/xercesc/dom/Makefile.in
@@ -85,7 +85,7 @@ DOM_CPP_PUBHEADERS = \
 	DOMCDATASection.hpp \
 	DOMCharacterData.hpp \
 	DOMComment.hpp \
-        DOMConfiguration.hpp \
+  DOMConfiguration.hpp \
 	DOMDocument.hpp \
 	DOMDocumentRange.hpp \
 	DOMDocumentTraversal.hpp \
@@ -119,7 +119,13 @@ DOM_CPP_PUBHEADERS = \
 	DOMUserDataHandler.hpp \
 	DOMWriter.hpp \
 	DOMWriterFilter.hpp \
-	StDOMNode.hpp
+	StDOMNode.hpp \
+	DOMXPathNamespace.hpp \
+	DOMXPathNSResolver.hpp \
+	DOMXPathResult.hpp \
+	DOMXPathEvaluator.hpp \
+	DOMXPathException.hpp \
+	DOMXPathExpression.hpp 
 
 DOM_CPP_PRIVHEADERS =
 
@@ -127,7 +133,8 @@ DOM_C_FILES =
 
 DOM_CPP_OBJECTS = \
 	DOMException.$(TO) \
-	DOMRangeException.$(TO)
+	DOMRangeException.$(TO) \
+	DOMXPathException.$(TO) 
 
 all::	includes $(DOM_CPP_OBJECTS) impl deprecated
 
diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.cpp b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
index 486f174e2c1de05ba5ec8d1934d969c348cdf26d..97a001a0d88d1a7fbe095ee8b22e701414448898 100644
--- a/src/xercesc/dom/impl/DOMDocumentImpl.cpp
+++ b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
@@ -85,7 +85,7 @@
 #include <xercesc/dom/DOMImplementation.hpp>
 #include <xercesc/util/XMLChar.hpp>
 #include <xercesc/framework/MemoryManager.hpp>
-
+#include <iostream>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -437,6 +437,29 @@ void DOMDocumentImpl::removeNodeIterator(DOMNodeIteratorImpl* nodeIterator)
     }
 }
 
+
+const DOMXPathExpression* DOMDocumentImpl::createExpression(const XMLCh *expression, const DOMXPathNSResolver *resolver)
+{
+    throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0);
+    return 0;
+}
+
+const DOMXPathNSResolver* DOMDocumentImpl::createNSResolver(DOMNode *nodeResolver)
+
+{
+    throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0);
+    return 0;
+}
+
+void* DOMDocumentImpl::evaluate(const XMLCh *expression, DOMNode *contextNode, const DOMXPathNSResolver *resolver, 
+                           unsigned short type, void* result) 
+{
+    throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0);
+    return 0;
+}
+
+
+
 DOMTreeWalker* DOMDocumentImpl::createTreeWalker (DOMNode *root, unsigned long whatToShow, DOMNodeFilter* filter, bool entityReferenceExpansion)
 {
     if (!root) {
diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.hpp b/src/xercesc/dom/impl/DOMDocumentImpl.hpp
index c7729b0d02c8fef3309cb052590f9b254d14239d..06f9a0c5a9c6964f08f57380015e98aa2523e9a5 100644
--- a/src/xercesc/dom/impl/DOMDocumentImpl.hpp
+++ b/src/xercesc/dom/impl/DOMDocumentImpl.hpp
@@ -107,6 +107,8 @@ class DOMRangeImpl;
 class DOMStringPool;
 class DOMBuffer;
 class MemoryManager;
+class XPathNSResolver;
+class XPathExpression;
 
 typedef RefVectorOf<DOMRangeImpl>        Ranges;
 typedef RefVectorOf<DOMNodeIteratorImpl>     NodeIterators;
@@ -193,6 +195,11 @@ public:
     virtual void                 removeRange(DOMRangeImpl* range); //non-standard api
     virtual void                 removeNodeIterator(DOMNodeIteratorImpl* nodeIterator); //non-standard api
 
+    virtual const DOMXPathExpression*    createExpression(const XMLCh *expression, const DOMXPathNSResolver *resolver);
+    virtual const DOMXPathNSResolver*    createNSResolver(DOMNode *nodeResolver);
+    virtual void* evaluate(const XMLCh *expression, DOMNode *contextNode, const DOMXPathNSResolver *resolver, 
+                           unsigned short type, void* result);
+
 
     // Extension to be called by the Parser
     DOMEntityReference*  createEntityReferenceByParser(const XMLCh * name);