diff --git a/src/xercesc/internal/XMLReader.cpp b/src/xercesc/internal/XMLReader.cpp
index e7d02674bfd908d0ce0bb87801f74fb447a868ab..45ec331109a94529b588dbbb490e9631dcc7b347 100644
--- a/src/xercesc/internal/XMLReader.cpp
+++ b/src/xercesc/internal/XMLReader.cpp
@@ -1130,7 +1130,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
         //  dirty comparison straight to its buffer with no requirement to unget
         //  if it fails.
         //
-        if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip, srcLen))
+        if (memcmp(&fCharBuf[fCharIndex], toSkip, srcLen*sizeof(XMLCh)))
             return false;
 
         //
@@ -1146,7 +1146,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
             if (charsLeft == 0)
                 return false; // error situation
         }
-        if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip, charsLeft))
+        if (memcmp(&fCharBuf[fCharIndex], toSkip, charsLeft*sizeof(XMLCh)))
             return false;
 
         fCharIndex += charsLeft;
@@ -1161,7 +1161,7 @@ bool XMLReader::skippedString(const XMLCh* const toSkip)
                 return false; // error situation
             if (charsLeft > remainingLen)
                 charsLeft = remainingLen;
-            if (XMLString::compareNString(&fCharBuf[fCharIndex], toSkip+offset, charsLeft))
+            if (memcmp(&fCharBuf[fCharIndex], toSkip+offset, charsLeft*sizeof(XMLCh)))
                 return false;
             offset += charsLeft;
             remainingLen -= charsLeft;
@@ -1215,7 +1215,7 @@ bool XMLReader::peekString(const XMLCh* const toPeek)
     //  dirty comparison straight to its buffer with no requirement to unget
     //  if it fails.
     //
-    if (XMLString::compareNString(&fCharBuf[fCharIndex], toPeek, srcLen))
+    if (memcmp(&fCharBuf[fCharIndex], toPeek, srcLen*sizeof(XMLCh)))
         return false;
 
     return true;
@@ -1857,8 +1857,6 @@ void XMLReader::handleEOL(XMLCh& curCh, bool inDecl)
     {
         fCurCol++;
     }
-
-    return;
 }
 
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/internal/XMLReader.hpp b/src/xercesc/internal/XMLReader.hpp
index 3746fe0ea08f12bbb84de26d93868920095e42d7..f2f4abcc379e159aaf1da57b7da16b644cc5f878 100644
--- a/src/xercesc/internal/XMLReader.hpp
+++ b/src/xercesc/internal/XMLReader.hpp
@@ -771,7 +771,7 @@ inline bool XMLReader::peekNextChar(XMLCh& chGotten)
     //  normal char get method in regards to newline normalization, though
     //  its not as complicated as the actual character getting method's.
     //
-    if ((chGotten == chCR || ((chGotten == chNEL || chGotten == chLineSeparator) && fNEL))
+    if ((chGotten == chCR || (fNEL && (chGotten == chNEL || chGotten == chLineSeparator)))
         && (fSource == Source_External))
         chGotten = chLF;
 
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 6dc613cce7b7fad9602d7e48f02b9b6b2e4a0cbc..b7e451ae4ece86db679ee6d7c129c00c5d3fcc45 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -1946,6 +1946,11 @@ XMLScanner::XMLTokens XMLScanner::senseNextToken(unsigned int& orgReader)
     //  in order to catch the scenario where the current entity ended at
     //  the > of some markup.
     XMLCh nextCh;
+
+    // avoid setting up the ThrowEOEJanitor if we know that we have data in the current reader
+    if(fReaderMgr.getCurrentReader() && fReaderMgr.getCurrentReader()->charsLeftInBuffer()>0)
+        nextCh = fReaderMgr.peekNextChar();
+    else
     {
         ThrowEOEJanitor janMgr(&fReaderMgr, true);
         nextCh = fReaderMgr.peekNextChar();
diff --git a/src/xercesc/util/XMLString.hpp b/src/xercesc/util/XMLString.hpp
index 7d207893e40e008ad74e1802b19d88c62283bb35..5e06cae138199e59aa63a47c6ea41534578b236c 100644
--- a/src/xercesc/util/XMLString.hpp
+++ b/src/xercesc/util/XMLString.hpp
@@ -16,7 +16,7 @@
  */
 
 /*
- * $Id $
+ * $Id$
  */
 
 #if !defined(XMLSTRING_HPP)
@@ -1521,14 +1521,10 @@ inline unsigned int XMLString::hash(   const   XMLCh* const    tohash
         return 0;
 
     const XMLCh* curCh = tohash;
-    unsigned int hashVal = (unsigned int)(*curCh);
-    curCh++;
+    unsigned int hashVal = (unsigned int)(*curCh++);
 
     while (*curCh)
-    {
-        hashVal = (hashVal * 38) + (hashVal >> 24) + (unsigned int)(*curCh);
-        curCh++;
-    }
+        hashVal = (hashVal * 38) + (hashVal >> 24) + (unsigned int)(*curCh++);
 
     // Divide by modulus
     return hashVal % hashModulus;