diff --git a/src/org/apache/xalan/transformer/TransformerImpl.java b/src/org/apache/xalan/transformer/TransformerImpl.java
index a59ad1b..f999f6d 100644
--- a/src/org/apache/xalan/transformer/TransformerImpl.java
+++ b/src/org/apache/xalan/transformer/TransformerImpl.java
@@ -72,9 +72,7 @@
 import org.apache.xml.dtm.DTMIterator;
 import org.apache.xml.dtm.DTMManager;
 import org.apache.xml.dtm.DTMWSFilter;
-import org.apache.xml.serializer.ToHTMLSAXHandler;
 import org.apache.xml.serializer.ToSAXHandler;
-import org.apache.xml.serializer.ToTextSAXHandler;
 import org.apache.xml.serializer.ToTextStream;
 import org.apache.xml.serializer.ToXMLSAXHandler;
 import org.apache.xml.serializer.SerializationHandler;
@@ -1140,21 +1138,11 @@
             
         String encoding = format.getProperty(OutputKeys.ENCODING); 
         String method = format.getProperty(OutputKeys.METHOD);
-        if (org.apache.xml.serializer.Method.HTML.equals(method))
-        {
-            xoh = new ToHTMLSAXHandler(handler, lexHandler, encoding);
-        }
-        else if (org.apache.xml.serializer.Method.TEXT.equals(method))
-        {
-            xoh = new ToTextSAXHandler(handler, lexHandler, encoding);
-        } 
-        else 
-        {
-            ToXMLSAXHandler toXMLSAXHandler = new ToXMLSAXHandler(handler, lexHandler, encoding);
-            toXMLSAXHandler.setShouldOutputNSAttr(false);
-            xoh = toXMLSAXHandler;   
- 
-        } 
+
+        ToXMLSAXHandler toXMLSAXHandler = new ToXMLSAXHandler(handler, lexHandler, encoding);
+        toXMLSAXHandler.setShouldOutputNSAttr(false);
+        xoh = toXMLSAXHandler;   
+
 
         String publicID = format.getProperty(OutputKeys.DOCTYPE_PUBLIC); 
         String systemID = format.getProperty(OutputKeys.DOCTYPE_SYSTEM); 
diff --git a/src/org/apache/xalan/xsltc/runtime/output/TransletOutputHandlerFactory.java b/src/org/apache/xalan/xsltc/runtime/output/TransletOutputHandlerFactory.java
index 2e2581b..dc45edb 100644
--- a/src/org/apache/xalan/xsltc/runtime/output/TransletOutputHandlerFactory.java
+++ b/src/org/apache/xalan/xsltc/runtime/output/TransletOutputHandlerFactory.java
@@ -28,9 +28,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.xalan.xsltc.trax.SAX2DOM;
-import org.apache.xml.serializer.ToHTMLSAXHandler;
 import org.apache.xml.serializer.ToHTMLStream;
-import org.apache.xml.serializer.ToTextSAXHandler;
 import org.apache.xml.serializer.ToTextStream;
 import org.apache.xml.serializer.ToUnknownStream;
 import org.apache.xml.serializer.ToXMLSAXHandler;
@@ -170,57 +168,19 @@
                     _method = "xml"; // default case
                 }
 
-                if (_method.equalsIgnoreCase("xml"))
+                if (_lexHandler == null)
                 {
-
-                    if (_lexHandler == null)
-                    {
-                        result = new ToXMLSAXHandler(_handler, _encoding);
-                    }
-                    else
-                    {
-                        result =
-                            new ToXMLSAXHandler(
-                                _handler,
-                                _lexHandler,
-                                _encoding);
-                    }
-
+                    result = new ToXMLSAXHandler(_handler, _encoding);
                 }
-                else if (_method.equalsIgnoreCase("html"))
+                else
                 {
-
-                    if (_lexHandler == null)
-                    {
-                        result = new ToHTMLSAXHandler(_handler, _encoding);
-                    }
-                    else
-                    {
-                        result =
-                            new ToHTMLSAXHandler(
-                                _handler,
-                                _lexHandler,
-                                _encoding);
-                    }
-
+                    result =
+                        new ToXMLSAXHandler(
+                            _handler,
+                            _lexHandler,
+                            _encoding);
                 }
-                else if (_method.equalsIgnoreCase("text"))
-                {
 
-                    if (_lexHandler == null)
-                    {
-                        result = new ToTextSAXHandler(_handler, _encoding);
-                    }
-                    else
-                    {
-                        result =
-                            new ToTextSAXHandler(
-                                _handler,
-                                _lexHandler,
-                                _encoding);
-                    }
-
-                }
                 return result;
         }
         return null;
