diff --git a/src/org/apache/xml/dtm/ref/xni2dtm/DTM2XNI.java b/src/org/apache/xml/dtm/ref/xni2dtm/DTM2XNI.java
index 95fe8dc..0fd16bf 100644
--- a/src/org/apache/xml/dtm/ref/xni2dtm/DTM2XNI.java
+++ b/src/org/apache/xml/dtm/ref/xni2dtm/DTM2XNI.java
@@ -385,8 +385,10 @@
       org.apache.xerces.xni.XMLAttributes attrs = 
                             new org.apache.xerces.util.XMLAttributesImpl();
 
-      for (int nsn = m_dtm.getFirstNamespaceNode(node, true); DTM.NULL != nsn;
-           nsn = m_dtm.getNextNamespaceNode(node, nsn, true))
+	  // Note that this needs to scan the namespaces declared ON THIS NODE,
+	  // *not* the ones inherited.
+      for (int nsn = m_dtm.getFirstNamespaceNode(node, false); DTM.NULL != nsn;
+           nsn = m_dtm.getNextNamespaceNode(node, nsn, false))
       {
         String nsprefix = m_dtm.getLocalName(nsn); //xmlns:whatever
         	
@@ -522,8 +524,8 @@
 				m_dtm.getNodeName(node),ns);
       m_XMLDocumentHandler.endElement(qq,null);
 
-      for (int nsn = m_dtm.getFirstNamespaceNode(node, true); DTM.NULL != nsn;
-           nsn = m_dtm.getNextNamespaceNode(node, nsn, true))
+      for (int nsn = m_dtm.getFirstNamespaceNode(node, false); DTM.NULL != nsn;
+           nsn = m_dtm.getNextNamespaceNode(node, nsn, false))
       {
         // String prefix = m_dtm.getPrefix(nsn);
         String prefix = m_dtm.getNodeNameX(nsn);
diff --git a/src/org/apache/xml/dtm/ref/xni2dtm/FuncValidate.java b/src/org/apache/xml/dtm/ref/xni2dtm/FuncValidate.java
index d5ad16f..6812327 100644
--- a/src/org/apache/xml/dtm/ref/xni2dtm/FuncValidate.java
+++ b/src/org/apache/xml/dtm/ref/xni2dtm/FuncValidate.java
@@ -30,11 +30,19 @@
 		DTM sourceDTM=proxy.getDTM();
 		int sourceHandle=proxy.getDTMNodeNumber();
 		DTMManager dtmmgr=((DTMDefaultBase)sourceDTM).getManager();
-		
-		DTM2XNI d2x=new DTM2XNI(sourceDTM,sourceHandle);
-		XNISource xsrc=new XNISource(d2x,null);
+
+		// Set up an XNI scanner to read from the source DTM,
+		// run that through validation (operates as a filter?),
+		// and pass that into Xalan to produce a new document
 		// %REVIEW% system ID???
-			
+		DTM2XNI d2x=new DTM2XNI(sourceDTM,sourceHandle);
+		
+		// VALIDATION GOES HERE!
+		// Sandy Gao recommends "create a customized parser configuration,
+		// which contains an XNI event source, a validator, and (optionally)
+		// a document handler." See "pipelines" in the XNI docs.
+		
+		XNISource xsrc=new XNISource(d2x,null);
 		DTM newDTM=dtmmgr.getDTM(xsrc,
 			true, // unique
 			null, // whitespace filter
diff --git a/src/org/apache/xml/dtm/ref/xni2dtm/XNI2DTM.java b/src/org/apache/xml/dtm/ref/xni2dtm/XNI2DTM.java
index 9288ef2..6b75daa 100644
--- a/src/org/apache/xml/dtm/ref/xni2dtm/XNI2DTM.java
+++ b/src/org/apache/xml/dtm/ref/xni2dtm/XNI2DTM.java
@@ -104,9 +104,8 @@
  * 
  * Please note that it this is a PROTOTYPE, since the Xerces post-schema 
  * validation infoset (PSVI) APIs it is using are themselves prototypes and
- * subject to change without warning. Also note that currently Xerces only
- * implements a subset of the "light weight" PSVI, whereas the official
- * XPath2 data model requires the heavyweight version. 
+ * subject to change without warning. The most recent such change was from
+ * "lightweight" to "heavyweight" schema models.
  * 
  * This version is derived from SAX2DTM for ease of implementation and
  * support, but deliberately blocks external access to
@@ -1783,6 +1782,10 @@
   	 * */
   	public boolean equals(XPath2Type other)
   	{
+		// Could cache hashCode()'s result and use that to accelerate
+		// doesn't-equal testing at the cost of some storage and
+		// slowing down does-equal tests. Not convinced it's useful here.
+		// %REVIEW%
   		return (m_xniType==other.m_xniType ||
   			m_xniType!=null && m_xniType.equals(other.m_xniType)) &&
   			// These two won't be null
@@ -1795,6 +1798,8 @@
   	 * */
   	public int hashCode()
   	{
+  		// Could cache hashCode(). See discussion in equals().
+  		// %REVIEW%
   		return m_namespace.hashCode()+m_localName.hashCode()+
   			(m_xniType==null ? 0 : m_xniType.hashCode());
   	}
@@ -1888,7 +1893,8 @@
    * */  
   protected void heavyResolveTypeName(ItemPSVI psvi, boolean attr)
   {
-  /*
+  	/* Not compatable with old light-weight schema APIs
+
   	// NAME OF THIS CONSTANT IS IN FLUX
   	//int VALID=ItemPSVI.VALIDITY_VALID;
   	int VALID=ItemPSVI.VALID_VALIDITY;
@@ -1926,7 +1932,7 @@
         m_namespace = "http://www.w3.org/2001/XMLSchema";
         m_localName = attr ? "anySimpleType" : "anyType";
         return;
-  */ throw new java.lang.UnsupportedOperationException("Xerces Heavyweight not yet available");
+  */ throw new java.lang.UnsupportedOperationException("Xerces Heavyweight PSVI not yet avaialble"); /**/       
   }
   
   /** Modification of the XPath2 type-name resolution algorithm
@@ -1943,7 +1949,8 @@
    * */  
   protected void proposedHeavyResolveTypeName(ItemPSVI psvi, boolean attr)
   {
-  /*
+  	/* Not compatable with old light-weight schema APIs
+
   	// NAME OF THIS CONSTANT IS IN FLUX
   	//int VALID=ItemPSVI.VALIDITY_VALID;
   	int VALID=ItemPSVI.VALID_VALIDITY;
@@ -1980,7 +1987,7 @@
         m_namespace = "http://www.w3.org/2001/XMLSchema";
         m_localName = attr ? "anySimpleType" : "anyType";
         return;
-  */ throw new java.lang.UnsupportedOperationException("Xerces Heavyweight not yet available");
+  */ throw new java.lang.UnsupportedOperationException("Xerces Heavyweight PSVI not yet avaialble"); /**/       
   }
   
   /** Attempt to write a simplified version of the type resolution
@@ -1999,8 +2006,9 @@
    * */  
   protected void lightResolveTypeName(ItemPSVI psvi, boolean attr)
   {
-  	// NAME OF THIS CONSTANT IS IN FLUX
-  	//int VALID=ItemPSVI.VALIDITY_VALID;
+  	/* Not compatable with new heavy-weight schema APIs
+  	*/
+  	
   	int VALID=ItemPSVI.VALID_VALIDITY;
   	
         // check whether the node is valid
@@ -2033,6 +2041,7 @@
         m_namespace = "http://www.w3.org/2001/XMLSchema";
         m_localName = attr ? "anySimpleType" : "anyType";
         return;
+  // throw new java.lang.UnsupportedOperationException("Xerces Lightweight PSVI phased out"); /**/
   }
   } // XPath2Type
 } // XNI2DTM
