diff --git a/src/xercesc/dom/deprecated/DOMParser.cpp b/src/xercesc/dom/deprecated/DOMParser.cpp
index 83dc48e10aee49729f8d9a3b8b019aa74bd2e9b6..c2da4884aafe304d5844251ee18a0b09a1b634b9 100644
--- a/src/xercesc/dom/deprecated/DOMParser.cpp
+++ b/src/xercesc/dom/deprecated/DOMParser.cpp
@@ -383,11 +383,11 @@ void DOMParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }
 
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 54296478b4a7d9da79b8db7e779c876993e54221..fa1ba381fb2b67a149cda629221e74a25c685ebe 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -540,7 +540,26 @@ void XMLScanner::scanReset(XMLPScanToken& token)
     fErrorCount = 0;
 }
 
-
+void XMLScanner::setParseSettings(XMLScanner* const refScanner)
+{
+    setDocHandler(refScanner->getDocHandler());
+    setDocTypeHandler(refScanner->getDocTypeHandler());
+    setErrorHandler(refScanner->getErrorHandler());
+    setErrorReporter(refScanner->getErrorReporter());
+    setEntityHandler(refScanner->getEntityHandler());
+    setDoNamespaces(refScanner->getDoNamespaces());
+    setDoSchema(refScanner->getDoSchema());
+    setCalculateSrcOfs(refScanner->getCalculateSrcOfs());
+    setExitOnFirstFatal(refScanner->getExitOnFirstFatal());
+    setValidationConstraintFatal(refScanner->getValidationConstraintFatal());
+    setValidationSchemaFullChecking(refScanner->getValidationSchemaFullChecking());
+    cacheGrammarFromParse(refScanner->isCachingGrammarFromParse());
+    useCachedGrammarInParse(refScanner->isUsingCachedGrammarInParse());
+    setLoadExternalDTD(refScanner->getLoadExternalDTD());
+    setNormalizeData(refScanner->getNormalizeData());
+    setExternalSchemaLocation(refScanner->getExternalSchemaLocation());
+    setExternalNoNamespaceSchemaLocation(refScanner->getExternalNoNamespaceSchemaLocation());
+}
 
 // ---------------------------------------------------------------------------
 //  XMLScanner: Private helper methods.
diff --git a/src/xercesc/internal/XMLScanner.hpp b/src/xercesc/internal/XMLScanner.hpp
index 7a9be63ea39542fd140a8a1ea691a009e16d3395..a599fc70239c8c11db31dd7a0a1c066a7f0ad218 100644
--- a/src/xercesc/internal/XMLScanner.hpp
+++ b/src/xercesc/internal/XMLScanner.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.14  2002/12/20 22:09:56  tng
  * XML 1.1
  *
@@ -408,6 +411,8 @@ public :
     XMLEntityHandler* getEntityHandler();
     const XMLErrorReporter* getErrorReporter() const;
     XMLErrorReporter* getErrorReporter();
+    const ErrorHandler* getErrorHandler() const;
+    ErrorHandler* getErrorHandler();
     bool getExitOnFirstFatal() const;
     bool getValidationConstraintFatal() const;
     RefHashTableOf<XMLRefInfo>* getIDRefList();
@@ -527,6 +532,7 @@ public :
     void setLoadExternalDTD(const bool loadDTD);
     void setNormalizeData(const bool normalizeData);
     void setCalculateSrcOfs(const bool newValue);
+    void setParseSettings(XMLScanner* const refScanner);
 
     // -----------------------------------------------------------------------
     //  Mutator methods
@@ -577,7 +583,7 @@ public :
 
     // -----------------------------------------------------------------------
     //  Grammar preparsing methods
-    // -----------------------------------------------------------------------
+    // -----------------------------------------------------------------------    
     Grammar* loadGrammar
     (
         const   XMLCh* const    systemId
@@ -934,6 +940,16 @@ inline XMLErrorReporter* XMLScanner::getErrorReporter()
     return fErrorReporter;
 }
 
+inline const ErrorHandler* XMLScanner::getErrorHandler() const
+{
+    return fErrorHandler;
+}
+
+inline ErrorHandler* XMLScanner::getErrorHandler()
+{
+    return fErrorHandler;
+}
+
 inline bool XMLScanner::getExitOnFirstFatal() const
 {
     return fExitOnFirstFatal;
diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 952afb877a5dd7a4b3e9e825de755e6d173fea35..b0e65e9b320b1c9e04605291d9c7fe61af0450e8 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -378,13 +378,11 @@ void AbstractDOMParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setDocHandler(this);
-        fScanner->setDocTypeHandler(this);
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }
 
diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
index af7f51e9a47f766063d462cfc74d102e422d5052..3a7db573b7e83719e087981659e7718995a82e42 100644
--- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
+++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.14  2002/12/11 22:14:54  knoaman
  * Performance: no need to use temporary buffer to hold namespace value.
  *
@@ -1488,7 +1491,7 @@ void SAX2XMLReaderImpl::setProperty(const XMLCh* const name, void* value)
 
         if (tempScanner) {
 
-            // REVISIT: set scanner options and handlers
+            tempScanner->setParseSettings(fScanner);
             tempScanner->setGrammarResolver(fGrammarResolver);
             tempScanner->setURIStringPool(fURIStringPool);
             delete fScanner;
diff --git a/src/xercesc/parsers/SAXParser.cpp b/src/xercesc/parsers/SAXParser.cpp
index 5fd825e41c2c724d70e5a841cc33e106f784cc23..686378f1f57323c06dbff4db1128063bee4e922c 100644
--- a/src/xercesc/parsers/SAXParser.cpp
+++ b/src/xercesc/parsers/SAXParser.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.11  2002/12/23 15:23:18  knoaman
  * Added a public api to various parsers to return the src offset within the input
  * source.
@@ -553,11 +556,11 @@ void SAXParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }