diff --git a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
index 4055533e08401b12e881ee0e757fedbaa9c37fdd..4c89318599ee6309783578e00c580ad2f716eb20 100644
--- a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
+++ b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
@@ -309,22 +309,20 @@ const XMLCh *BinHTTPInputStreamCommon::getEncoding() const
 					// text/xml, text/xml-external-parsed-entity, or a subtype like text/AnythingAtAll+xml 
 					// has a default encoding of us-ascii
 					XMLCh* subType = strType+XMLString::stringLen(szTextSlash);
-					XMLCh* cursor=subType;
-					int plusPos;
-					do
+
+					BaseRefVectorOf<XMLCh>* tokens=XMLString::tokenizeString(subType, chPlus, fMemoryManager);
+					for(XMLSize_t i=0;i<tokens->size();i++)
 					{
-						plusPos=XMLString::indexOf(cursor, chPlus);
-						if(plusPos!=-1)
-							*(cursor+plusPos)=0;
-						if(XMLString::compareIStringASCII(cursor, szXml)==0 || XMLString::startsWithI(cursor, szXmlDash))
+						XMLCh* part=tokens->elementAt(i);
+						if(XMLString::compareIStringASCII(part, szXml)==0 || XMLString::startsWithI(part, szXmlDash))
 						{
 							const_cast<BinHTTPInputStreamCommon*>(this)->fEncoding = XMLString::replicate(XMLUni::fgUSASCIIEncodingString, fMemoryManager);
 							break;
 						}
-						cursor+=plusPos+1;
-					} while(plusPos==-1);
+					}
 					if(fEncoding==0)
 						const_cast<BinHTTPInputStreamCommon*>(this)->fEncoding = XMLString::replicate(XMLUni::fgISO88591EncodingString, fMemoryManager);
+					delete tokens;
 				}
 			}
 			delete tokens;