diff --git a/src/xercesc/parsers/DOMBuilderImpl.cpp b/src/xercesc/parsers/DOMBuilderImpl.cpp
index e408b31546194c935d64083205a2d14359e21f3f..0f3d34cf80a38f6f372b4c4d7196473b47aa7f12 100644
--- a/src/xercesc/parsers/DOMBuilderImpl.cpp
+++ b/src/xercesc/parsers/DOMBuilderImpl.cpp
@@ -545,18 +545,24 @@ Grammar* DOMBuilderImpl::loadGrammar(const char* const systemId,
     try
     {
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
 
         // Release DOM tree - DTD
         DOMDocument* doc = adoptDocument();
         if (doc)
             doc->release();
-
+        
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
         throw;
     }
@@ -576,6 +582,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId,
     try
     {
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
 
         // Release DOM tree - DTD
@@ -583,11 +591,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId,
         if (doc)
             doc->release();
 
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
         throw;
     }
@@ -609,6 +621,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source,
         Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false, getMemoryManager());
 
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(isWrapper, grammarType, toCache);
 
         // Release DOM tree - DTD
@@ -616,11 +630,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source,
         if (doc)
             doc->release();
 
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
         throw;
     }
diff --git a/src/xercesc/parsers/XercesDOMParser.cpp b/src/xercesc/parsers/XercesDOMParser.cpp
index 484b9c2f35dcdf489457fe10d38f782c0a3bfd28..7b8288f2ede9da549d4eca1030b2ae5261ae6595 100644
--- a/src/xercesc/parsers/XercesDOMParser.cpp
+++ b/src/xercesc/parsers/XercesDOMParser.cpp
@@ -265,12 +265,18 @@ Grammar* XercesDOMParser::loadGrammar(const char* const systemId,
     try
     {
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);        
         setParseInProgress(false);
         throw;
     }
@@ -290,12 +296,18 @@ Grammar* XercesDOMParser::loadGrammar(const XMLCh* const systemId,
     try
     {
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);        
         setParseInProgress(false);
         throw;
     }
@@ -315,12 +327,18 @@ Grammar* XercesDOMParser::loadGrammar(const InputSource& source,
     try
     {
         setParseInProgress(true);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(0);
         grammar = getScanner()->loadGrammar(source, grammarType, toCache);
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
     }
 
     catch(...)
     {
+        if (grammarType == Grammar::DTDGrammarType) 
+            getScanner()->setDocTypeHandler(this);
         setParseInProgress(false);
         throw;
     }