diff --git a/src/org/apache/xml/serializer/DOM3Serializer.java b/src/org/apache/xml/serializer/DOM3Serializer.java
index d08a809..df0e1fd 100644
--- a/src/org/apache/xml/serializer/DOM3Serializer.java
+++ b/src/org/apache/xml/serializer/DOM3Serializer.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 /*
- * $Id:  $
+ * $Id$
  */
 
 package org.apache.xml.serializer;
@@ -28,8 +28,7 @@
 import org.w3c.dom.ls.LSSerializerFilter;
 
 /**
- * Interface for a DOM serializer capable of serializing DOMs as specified in 
- * the DOM Level 3 Save Recommendation. This interface is not intended to be used
+ * This interface is not intended to be used
  * by an end user, but rather by an XML parser that is implementing the DOM 
  * Level 3 Load and Save APIs.
  * <p>
@@ -87,8 +86,6 @@
  *        org.w3c.dom.Document docToSerialize = getDocument();
  *
  *        // Get a factory (DOMImplementationLS) for creating a Load and Save object.
- *        System.setProperty(org.w3c.dom.bootstrap.DOMImplementationRegistry.PROPERTY,
- *                "org.apache.xerces.dom.DOMImplementationSourceImpl");
  *        org.w3c.dom.ls.DOMImplementationLS impl = 
  *            (org.w3c.dom.ls.DOMImplementationLS) 
  *            org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance().getDOMImplementation("LS");
@@ -106,103 +103,13 @@
  *    
  *    }  // end of class TestDOM3
  * </pre>
- * <p>
- * The DOM3Serializer is a facet of a serializer and is obtained from the
- * asDOM3Serializer() method of the org.apache.xml.serializer.Serializer interface. 
- * A serializer may or may not support a level 3 DOM serializer, if it does not then the 
- * return value from asDOM3Serializer() is null.
- * <p>
- * Using the DOM3Serializer interface directly is discouraged for use by end users.
- * <p>
- * Example:
- * <pre>
- *   public class TestDOM3 {
- *
- *   public static void main(String args[]) throws Exception {
- *       // Get document to serialize
- *       TestDOM3 test = new TestDOM3();
- *       
- *       // Serialize using implementation specific
- *       // non-standard serialization
- *       // APIs (use standard DOM Level 3 if you can) 
- *       System.out.println(test.testDOM3Xalan());
- *   }
- *   
- *   //
- *   // This method uses non-standard, implementation specific
- *   // classes:
- *   //   org.apache.xml.serializer.OutputPropertiesFactory
- *   //   org.apache.xml.serializer.SerializerFactory
- *   //   org.apache.xml.serializer.Serializer
- *   //   org.apache.xml.serializer.DOM3Serializer
- *   // to serialize a Document.
- *   // 
- *   // These classes are intended to be used by an XML
- *   // parser to implement Load Save support for DOM Level 3.
- *   // They are not intended for use by an end user.
- *   //
- *   public String testDOM3Xalan() throws Exception {
- *       // Get a simple DOM Document that will be serialized.
- *       org.w3c.dom.Document doc = getDocument();
- *    
- *       // Get the default properties for serializing XML
- *       java.util.Properties configProps = org.apache.xml.serializer.OutputPropertiesFactory
- *               .getDefaultMethodProperties("xml");
- *       
- *       // Get a Serializer from the non-standard factory
- *       org.apache.xml.serializer.Serializer ser = org.apache.xml.serializer.SerializerFactory
- *               .getSerializer(configProps);
- *       java.io.StringWriter sw = new java.io.StringWriter();
- *       // Set the writer where the Serializer should write its output to.
- *       ser.setWriter(sw);
- *    
- *       // Configure the Serializer with additional non-standard properties
- *       // for DOM Level 3 serialization:
- *       java.util.Properties props = new java.util.Properties();
- *       props.setProperty(
- *               "{http://www.w3.org/TR/DOM-Level-3-LS}format-pretty-print",
- *               "explicit:yes");
- *       ser.setOutputFormat(props);
- *    
- *       // Cast the Serializer to a DOM3Serializer and use it to serialize the Document.
- *       org.apache.xml.serializer.DOM3Serializer dser = (org.apache.xml.serializer.DOM3Serializer) ser
- *               .asDOM3Serializer();
- *       dser.serializeDOM3(doc);
- *       String serializedXML = sw.toString();
- *       return serializedXML;
- *   }
- *   
- *   }  // end of class TestDOM3
- *   
- * </pre>
- * <p>
- * If a DOM3Serializer is used directly (not through the DOM Level 3 API LSSerializer,
- * then the configuration properties for DOM Level 3 are supported:
- * <ul>
- * <li> "cdata-sections"
- * <li> "comments"
- * <li> "element-content-whitespace"
- * <li> "entities"
- * <li> "infoset"
- * <li> "namespaces"
- * <li> "namespace-declarations"
- * <li> "split-cdata-sections"
- * <li> "well-formed"
- * </ul>
- * <p>
- * Also the following propertes for DOM Level 3 Load and Save are supported:
- * <ul>
- * <li> "{http://www.w3.org/TR/DOM-Level-3-LS}format-pretty-print" 
- * <li> "format-pretty-print"
- * <li> "xml-declaration"
- * </ul>
  * 
  * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration">DOMConfiguration</a>
  * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer-config">LSSerializer</a>
  * @see org.apache.xml.serializer.Serializer
  * @see org.apache.xml.serializer.DOMSerializer
  * 
- * @xsl.usage general
+ * @xsl.usage advanced
  *
  */
 public interface DOM3Serializer {
