diff --git a/xpath_rwapi/.cvsignore b/xpath_rwapi/.cvsignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/xpath_rwapi/.cvsignore
@@ -0,0 +1 @@
+build
diff --git a/xpath_rwapi/grammar/etree.xsl b/xpath_rwapi/grammar/etree.xsl
index c5c6e62..d4af66f 100644
--- a/xpath_rwapi/grammar/etree.xsl
+++ b/xpath_rwapi/grammar/etree.xsl
@@ -31,21 +31,17 @@
     /**
      * Node factory for customized parser.  
      */
-    NodeFactory m_nodeFactory;
-
-    /**
-     * Sets the node factory.  
-     * @param nodeFactory to use.
-     */
-    public void setNodeFactory(NodeFactory nodeFactory) {      		
-    	m_nodeFactory = nodeFactory;
-    }
+    private NodeFactory m_nodeFactory;
 
     /**
      * Returns the node factory.  
      * @return NodeFactory
      */
     public NodeFactory getNodeFactory() {
+    	if (m_nodeFactory == null)
+    	{
+    		m_nodeFactory = DefaultNodeFactory.createNodeFactory();
+    	}
     	return m_nodeFactory;
     }
 
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore b/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore
new file mode 100644
index 0000000..73ff854
--- /dev/null
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore
@@ -0,0 +1 @@
+xpath-grammar.jj*
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
similarity index 65%
rename from xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java
rename to xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
index 01a275e..a5458c5 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
@@ -53,98 +53,118 @@
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  */
-package org.apache.xpath.impl;
+package org.apache.xpath.impl.parser;
 
-import org.apache.xpath.impl.parser.Node;
-import org.apache.xpath.impl.parser.NodeFactory;
+import org.apache.xpath.impl.FunctionCallImpl;
+import org.apache.xpath.impl.KindTestImpl;
+import org.apache.xpath.impl.LiteralImpl;
+import org.apache.xpath.impl.NameTestImpl;
+import org.apache.xpath.impl.OperatorImpl;
+import org.apache.xpath.impl.PathExprImpl;
+import org.apache.xpath.impl.SequenceTypeImpl;
+import org.apache.xpath.impl.StepExprImpl;
+import org.apache.xpath.impl.VariableImpl;
 
 /**
- * Default implementation for node factory.
+ * Implementation of {@link NodeFactory}. Returns null for each
+ * factory method.
+ * <p>Provides also a way to create a node factory. By now, it tries
+ * to instantiate an user class, by looking at the system property
+ * with the key {@link #FACTORY_PROPERTY}. If its value is a valid 
+ * class name which implements {@link NodeFactory}, then a new 
+ * instance of this class is returned. Otherwise, a singletion of this object 
+ * is returned.
+ 
+ * @author <a href="mailto:villard@us.ibm.com">Lionel Villard</a>
+ * @version $Id$
  */
-public class DefaultNodeFactory implements NodeFactory {
+public class DefaultNodeFactory implements NodeFactory 
+{
 
+	final static public String FACTORY_PROPERTY_KEY = "org.apache.xpath.impl.parser.NodeFactory";
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createFunctionCallNode()
-	 */
+	final static private NodeFactory DEFAULT_NODE_FACTORY = new DefaultNodeFactory();
+
+	static protected NodeFactory createNodeFactory()
+	{
+		String cn = System.getProperty(FACTORY_PROPERTY_KEY);
+		NodeFactory result;
+		if (cn != null)
+		{
+			try
+			{
+				Class c = Class.forName(cn);
+				
+				result = (NodeFactory) c.newInstance();
+			} catch (ClassNotFoundException e)
+			{
+				result = DEFAULT_NODE_FACTORY;
+			} catch (InstantiationException e)
+			{
+				result = DEFAULT_NODE_FACTORY;
+			} catch (IllegalAccessException e)
+			{
+				result = DEFAULT_NODE_FACTORY;
+			} catch (ClassCastException e)
+			{
+				result = DEFAULT_NODE_FACTORY;
+			}
+		}
+		else
+		{
+			result = DEFAULT_NODE_FACTORY;
+		}
+		
+		return result;
+	}
+
+	// Implements NodeFactory
+
 	public FunctionCallImpl createFunctionCallNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createKindTestNode(int)
-	 */
 	public KindTestImpl createKindTestNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createLiteralNode(int)
-	 */
 	public LiteralImpl createLiteralNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createNameTestNode()
-	 */
 	public NameTestImpl createNameTestNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createNode(int)
-	 */
 	public Node createNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createOperatorNode(int)
-	 */
 	public OperatorImpl createOperatorNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createPathNode()
-	 */
 	public PathExprImpl createPathNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createStepNode()
-	 */
 	public StepExprImpl createStepNode(int id) {
 		return null;
 	}
 
-	/**
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createVarNameNode()
-	 */
 	public VariableImpl createVarNameNode(int id) {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createSequenceTypeNode(int)
-	 */
+	
 	public SequenceTypeImpl createSequenceTypeNode(int id) {
 		return null;
 
 	}
 
-	/* (non-Javadoc)
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createCastAsNode(int)
-	 */
 	public SequenceTypeImpl createCastAsNode(int id) {
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.apache.xpath.impl.parser.NodeFactory#createTreatAsNode(int)
-	 */
 	public SequenceTypeImpl createTreatAsNode(int id) {
 		return null;
 	}
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
index dd1c69b..64830dc 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
@@ -69,6 +69,7 @@
 /**
  * Applications which want to generate their own AST need to implement this
  * interface.
+ * <p></p>
  *
  * @see org.apache.xpath.impl.parser.XPathTreeConstants
  */
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
index c7b1192..a9984b6 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
@@ -5,7 +5,6 @@
 import org.apache.xpath.impl.CastOrTreatAsExprImpl;
 import org.apache.xpath.impl.CastableAsExprImpl;
 import org.apache.xpath.impl.ConditionalExprImpl;
-import org.apache.xpath.impl.DefaultNodeFactory;
 import org.apache.xpath.impl.ExpressionFactoryImpl;
 import org.apache.xpath.impl.ForAndQuantifiedExprImpl;
 import org.apache.xpath.impl.FunctionCallImpl;
@@ -27,23 +26,25 @@
 {
     public static boolean PRODUCE_RAW_TREE = false;
     
-    final static private NodeFactory DEFAULT_NODE_FACTORY = new DefaultNodeFactory();
-    
-    /**
-     * List of child nodes
-     */
-    protected Node[] m_children; 
+	static ExpressionFactory m_exprFact = new ExpressionFactoryImpl();
+
+    protected Node[] m_children; // to remove
     
     protected int id; // to remove
 
+	protected static ExpressionFactory getExpressionFactory()
+	{
+		return m_exprFact;
+	}
+
+	// Constructors
+
     protected SimpleNode()
     {
     }
 
     /**
      * Creates a new SimpleNode object.
-     *
-     * @param i DOCUMENT ME!
      */
     public SimpleNode(int i)
     {
@@ -52,30 +53,12 @@
 
     /**
      * Creates a new SimpleNode object.
-     *
-     * @param p DOCUMENT ME!
-     * @param i DOCUMENT ME!
      */
     public SimpleNode(XPath p, int i)
     {
         this(i);
     }
 
-	static ExpressionFactory m_exprFact = new ExpressionFactoryImpl();
-
-	protected static ExpressionFactory getExpressionFactory()
-	{
-		return m_exprFact;
-	}
-
-    /**
-     * DOCUMENT ME!
-     *
-     * @param p DOCUMENT ME!
-     * @param id DOCUMENT ME!
-     *
-     * @return DOCUMENT ME!
-     */
     public static Node jjtCreate(XPath p, int id)
     {
         if (PRODUCE_RAW_TREE)
@@ -84,8 +67,7 @@
         }
 
         Node newNode;
-        NodeFactory nodeFactory = (p.m_nodeFactory == null)
-            ? DEFAULT_NODE_FACTORY : p.m_nodeFactory;
+        NodeFactory nodeFactory = p.getNodeFactory();
 
         switch (id)
         {
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
index d6b3fdd..dd15824 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
@@ -13,21 +13,17 @@
     /**
      * Node factory for customized parser.  
      */
-    NodeFactory m_nodeFactory;
-
-    /**
-     * Sets the node factory.  
-     * @param nodeFactory to use.
-     */
-    public void setNodeFactory(NodeFactory nodeFactory) {
-        m_nodeFactory = nodeFactory;
-    }
+    private NodeFactory m_nodeFactory;
 
     /**
      * Returns the node factory.  
      * @return NodeFactory
      */
     public NodeFactory getNodeFactory() {
+        if (m_nodeFactory == null)
+        {
+                m_nodeFactory = DefaultNodeFactory.createNodeFactory();
+        }
         return m_nodeFactory;
     }
 
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
index 021fff0..cb57907 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. F:/projets/xml-xalan-xslt20/xml-xalan/java/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathTreeConstants.java */
+/* Generated By:JJTree: Do not edit this line. D:/projects/xml-xalan-xslt20/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathTreeConstants.java */
 
 package org.apache.xpath.impl.parser;
 
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
index 32c5e3a..e23b828 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. F:/projets/xml-xalan-xslt20/xml-xalan/java/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathVisitor.java */
+/* Generated By:JJTree: Do not edit this line. D:/projects/xml-xalan-xslt20/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathVisitor.java */
 
 package org.apache.xpath.impl.parser;
 
