diff --git a/src/xercesc/validators/schema/SchemaGrammar.cpp b/src/xercesc/validators/schema/SchemaGrammar.cpp
index 71e957f942b4fcccf196488583170635bb15543f..e5e8f86542da11cc8e4f3de7b61c5570f2c57136 100644
--- a/src/xercesc/validators/schema/SchemaGrammar.cpp
+++ b/src/xercesc/validators/schema/SchemaGrammar.cpp
@@ -59,6 +59,7 @@ SchemaGrammar::SchemaGrammar(MemoryManager* const manager) :
     , fValidated(false)
     , fDatatypeRegistry(manager)
     , fScopeCount (0)
+    , fAnonTypeCount (0)
 {
     CleanupType cleanup(this, &SchemaGrammar::cleanUp);
 
diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp
index 03eb4091cf385ff2fee4ca492409e844149bb8ba..e803c0235c420213d138765d6d32c883fe1e068d 100644
--- a/src/xercesc/validators/schema/SchemaGrammar.hpp
+++ b/src/xercesc/validators/schema/SchemaGrammar.hpp
@@ -243,6 +243,12 @@ public:
     unsigned int getScopeCount () const;
     void setScopeCount (unsigned int);
 
+    /**
+     * Get/set anonymous type count.
+     */
+    unsigned int getAnonTypeCount () const;
+    void setAnonTypeCount (unsigned int);
+
     /***
      * Support for Serialization/De-serialization
      ***/
@@ -334,6 +340,7 @@ private:
     DatatypeValidatorFactory               fDatatypeRegistry;
 
     unsigned int                             fScopeCount;
+    unsigned int                             fAnonTypeCount;
 };
 
 
@@ -614,6 +621,18 @@ SchemaGrammar::setScopeCount (unsigned int scopeCount)
   fScopeCount = scopeCount;
 }
 
+inline unsigned int
+SchemaGrammar::getAnonTypeCount () const
+{
+  return fAnonTypeCount;
+}
+
+inline void
+SchemaGrammar::setAnonTypeCount (unsigned int count)
+{
+  fAnonTypeCount = count;
+}
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index e39631f4072b3d18189db33f7f7d99fdea72fe9f..f63b81f3d5a9503ae95de7f2bc32614894ddc7ab 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -169,7 +169,7 @@ TraverseSchema::TraverseSchema( DOMElement* const    schemaRoot
     , fEmptyNamespaceURI(-1)
     , fCurrentScope(Grammar::TOP_LEVEL_SCOPE)
     , fScopeCount(schemaGrammar->getScopeCount ())
-    , fAnonXSTypeCount(0)
+    , fAnonXSTypeCount(schemaGrammar->getAnonTypeCount ())
     , fCircularCheckIndex(0)
     , fTargetNSURIString(0)
     , fDatatypeRegistry(0)
@@ -235,11 +235,12 @@ TraverseSchema::TraverseSchema( DOMElement* const    schemaRoot
             preprocessSchema(schemaRoot, schemaURL, multipleImport);
             doTraverseSchema(schemaRoot);
 
-            // Store the scope count in case we need to add more to this
-            // grammar (multi-import case). schemaGrammar and fSchemaGrammar
-            // should be the same here.
+            // Store the scope and anon type counts in case we need to add
+            // more to this grammar (multi-import case). schemaGrammar and
+            // fSchemaGrammar should be the same here.
             //
             fSchemaGrammar->setScopeCount (fScopeCount);
+            fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount);
         }
 
     }
@@ -885,6 +886,7 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) {
             // --------------------------------------------------------
             SchemaInfo* saveInfo = fSchemaInfo;
             fSchemaGrammar->setScopeCount (fScopeCount);
+            fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount);
             if (grammarFound) {
                 fSchemaGrammar = (SchemaGrammar*) aGrammar;
             }
@@ -892,6 +894,8 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) {
                 fSchemaGrammar = new (fGrammarPoolMemoryManager) SchemaGrammar(fGrammarPoolMemoryManager);
             }
             fScopeCount = fSchemaGrammar->getScopeCount ();
+            fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount ();
+
             XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) fSchemaGrammar->getGrammarDescription();
             gramDesc->setContextType(XMLSchemaDescription::CONTEXT_IMPORT);
             gramDesc->setLocationHints(importURL);
@@ -6940,8 +6944,11 @@ void TraverseSchema::restoreSchemaInfo(SchemaInfo* const toRestore,
         int targetNSURI = toRestore->getTargetNSURI();
 
         fSchemaGrammar->setScopeCount (fScopeCount);
+        fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount);
+
         fSchemaGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(toRestore->getTargetNSURIString());
         fScopeCount = fSchemaGrammar->getScopeCount ();
+        fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount ();
 
         fTargetNSURI = targetNSURI;
         fCurrentScope = saveScope;