diff --git a/src/xercesc/NLS/EN_US/XMLErrList_EN_US.Xml b/src/xercesc/NLS/EN_US/XMLErrList_EN_US.Xml
index 246b0e25796708f2abc072093669aad08013a7a7..ce9e60f839e34670aba1402f9f4881b06de6e4c4 100644
--- a/src/xercesc/NLS/EN_US/XMLErrList_EN_US.Xml
+++ b/src/xercesc/NLS/EN_US/XMLErrList_EN_US.Xml
@@ -790,7 +790,7 @@
             <Message Id="XSer_GrammarPool_Empty"         Text="grammar pool is empty"/>
             <Message Id="XSer_GrammarPool_NotEmpty"      Text="grammar pool is not empty"/>
             <Message Id="XSer_StringPool_NotEmpty"       Text="string pool is not empty"/>
-            <Message Id="XSer_Storer_NewerThan_Loader"   Text="storer level '{0}' is newer than loader level '{1}'"/>
+            <Message Id="XSer_Storer_Loader_Mismatch"    Text="storer level '{0}' does not match loader level '{1}'"/>
             <Message Id="VALUE_QName_Invalid2"           Text="undefined prefix in QName value '{0}'"/>
         </FatalError>
     </MsgDomain>
diff --git a/src/xercesc/framework/XMLEntityDecl.cpp b/src/xercesc/framework/XMLEntityDecl.cpp
index 2f9bdfee489b3d734884a2f6f2507a342ce7b956..5c1cc671d659f5ff4728572ee1784f86bebe2380 100644
--- a/src/xercesc/framework/XMLEntityDecl.cpp
+++ b/src/xercesc/framework/XMLEntityDecl.cpp
@@ -195,9 +195,7 @@ void XMLEntityDecl::serialize(XSerializeEngine& serEng)
         serEng.readString(fPublicId);
         serEng.readString(fSystemId);
         serEng.readString(fBaseURI);
-        // when fIsExternal has been added, XERCES_GRAMMAR_SERIALIZATION_LEVEL has been bumped to 6
-        if(serEng.getStorerLevel()>=6)
-            serEng>>fIsExternal;
+        serEng>>fIsExternal;
     }
 }
 
diff --git a/src/xercesc/framework/XMLGrammarPoolImpl.cpp b/src/xercesc/framework/XMLGrammarPoolImpl.cpp
index c8dc74d78f529adb6ab22c7a11fed5a2743b0b1a..7e67c2d23c6d4a1884d2499d1774f76ca234dd04 100644
--- a/src/xercesc/framework/XMLGrammarPoolImpl.cpp
+++ b/src/xercesc/framework/XMLGrammarPoolImpl.cpp
@@ -302,11 +302,11 @@ void XMLGrammarPoolImpl::deserializeGrammars(BinInputStream* const binIn)
         //version information
         unsigned int  StorerLevel;
         serEng>>StorerLevel;
-        serEng.fStorerLevel = (short)StorerLevel;
+        serEng.fStorerLevel = StorerLevel;
 
-        //if the storer level is after the loader level
-        //the loader shall not read the data any more
-        if (StorerLevel > (unsigned int) XERCES_GRAMMAR_SERIALIZATION_LEVEL)
+        // The storer level must match the loader level.
+        //
+        if (StorerLevel != (unsigned int)XERCES_GRAMMAR_SERIALIZATION_LEVEL)
         {
             XMLCh     StorerLevelChar[5];
             XMLCh     LoaderLevelChar[5];
@@ -314,7 +314,7 @@ void XMLGrammarPoolImpl::deserializeGrammars(BinInputStream* const binIn)
             XMLString::binToText(XERCES_GRAMMAR_SERIALIZATION_LEVEL,   LoaderLevelChar,   4, 10, memMgr);
 
             ThrowXMLwithMemMgr2(XSerializationException
-                    , XMLExcepts::XSer_Storer_NewerThan_Loader
+                    , XMLExcepts::XSer_Storer_Loader_Mismatch
                     , StorerLevelChar
                     , LoaderLevelChar
                     , memMgr);
diff --git a/src/xercesc/internal/XSerializeEngine.hpp b/src/xercesc/internal/XSerializeEngine.hpp
index faaf36fe135907f40ab18866c2a028d17bc8a41f..7b5d7d6d51acf572f862124bb6dc32a8f432da0c 100644
--- a/src/xercesc/internal/XSerializeEngine.hpp
+++ b/src/xercesc/internal/XSerializeEngine.hpp
@@ -165,7 +165,7 @@ public:
       *  Return: level
       *
       ***/
-    inline unsigned short getStorerLevel() const;
+    inline unsigned int getStorerLevel() const;
 
     /***
       *
@@ -658,7 +658,7 @@ private:
     //  fMapCount:
     // -------------------------------------------------------------------------------
     const short                            fStoreLoad;
-    short                                  fStorerLevel;
+    unsigned int                           fStorerLevel;
 
     XMLGrammarPool*  const                 fGrammarPool;
     BinInputStream*  const                 fInputStream;
@@ -796,7 +796,7 @@ unsigned long XSerializeEngine::getBufCount() const
 }
 
 inline
-unsigned short XSerializeEngine::getStorerLevel() const
+unsigned int XSerializeEngine::getStorerLevel() const
 {
     return fStorerLevel;
 }
diff --git a/src/xercesc/util/XMLExceptMsgs.hpp b/src/xercesc/util/XMLExceptMsgs.hpp
index ac117c14f92017a01b6f4478ee94d5e401ad31ee..8327bceb06a70a0466818ee17c0ecf2181722772 100644
--- a/src/xercesc/util/XMLExceptMsgs.hpp
+++ b/src/xercesc/util/XMLExceptMsgs.hpp
@@ -375,7 +375,7 @@ public :
       , XSer_GrammarPool_Empty             = 359
       , XSer_GrammarPool_NotEmpty          = 360
       , XSer_StringPool_NotEmpty           = 361
-      , XSer_Storer_NewerThan_Loader       = 362
+      , XSer_Storer_Loader_Mismatch        = 362
       , VALUE_QName_Invalid2               = 363
       , F_HighBounds                       = 364
       , E_LowBounds                        = 365