diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp
index 905fb1fa80bec1d5990b14cca54e091806dc3be7..7302d2b41798a49e52945aaebf5e269b9a6b3ea6 100644
--- a/src/xercesc/util/XMLString.cpp
+++ b/src/xercesc/util/XMLString.cpp
@@ -1180,14 +1180,19 @@ int XMLString::patternMatch(        XMLCh* const    toSearch
     XMLCh* srcPtr = toSearch;
     const int patnLen = XMLString::stringLen(pattern);
     int  patnIndex = 0;
+    bool patnMatch;
 
     while (*srcPtr)
     {
-        if (*srcPtr++ != pattern[patnIndex++])
+        patnMatch = (*srcPtr++ == pattern[patnIndex++]);
+
+        if (!patnMatch)
         {
             patnIndex = 0;
+            patnMatch = (*srcPtr == pattern[patnIndex++]);
         }
-        else
+
+        if (patnMatch)
         {
             if (patnIndex == patnLen)
                 // full pattern match found