diff --git a/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr b/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr
index 048cab81c09c1b712e8588fe140ec8e77c965bc2..d94a67a659ff5427745b8cdabce798ab682e1e73 100644
--- a/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr
+++ b/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr
@@ -4,302 +4,303 @@
   <MACROS>
     <VERSION value="BCB.06.00"/>
     <PROJECT value="..\..\..\..\..\Build\Win32\BCB6\XercesLib.dll"/>
-    <OBJFILES value="..\..\..\..\..\Build\Win32\BCB6\obj\Xerceslib.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsFileMgr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\InMemMsgLoader.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsMutexMgr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPURLInputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\WinSockNetAccessor.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Win32TransService.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ASCIIRangeFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BlockRangeFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BMPattern.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\CharToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ClosureToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ConcatToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ConditionToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Match.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ModifierToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Op.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\OpFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ParenToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ParserForXMLSchema.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeTokenMap.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RegularExpression.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RegxParser.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\RegxUtil.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\StringToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Token.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\TokenFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\UnicodeRangeFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\UnionToken.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRangeFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUniCharacter.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Base64.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DefaultPanicHandler.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PanicHandler.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileInputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinInputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemInputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BitSet.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\EncodingValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\HashPtr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\HashXMLCh.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\HeaderDummy.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\HexBin.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\KVStringPair.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Mutexes.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PlatformUtils.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIUni.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\QName.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\StringPool.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SynchronizedStringPool.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\TransService.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMemory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XML256TableTranscoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XML88591Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAbstractDoubleFloat.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLASCIITranscoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigDecimal.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigInteger.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChar.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChTranscoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDateTime.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDouble.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEBCDICTranscoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFloat.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1047Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1140Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLInitializer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLMsgLoader.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNumber.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLString.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLStringTokenizer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUCS4Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUni.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUri.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLURL.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF16Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF8Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLWin1252Transcoder.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinOutputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileFormatTarget.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileInputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufFormatTarget.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufInputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\StdInInputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\StdOutFormatTarget.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\URLInputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4DOMLSInput.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4InputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDef.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBuffer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBufferMgr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLContentModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLElementDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEntityDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFormatter.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNotationDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRecognizer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRefInfo.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDefList.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarDescription.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescription.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescription.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileOutputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemOutputStream.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DGXMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ElemStack.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner2.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MemoryManagerImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ReaderMgr.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SGXMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ValidationContextImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttributesImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttrListImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\WFXMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarPoolImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLReader.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScannerResolver.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XProtoType.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAXMLScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSObjectFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSerializeEngine.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XTemplateSerializer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Dummy.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\InputSource.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParseException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSParserImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\CMAny.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\CMBinaryOp.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\CMUnaryOp.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ContentLeafNameTypeVector.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ContentSpecNode.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DFAContentModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\GrammarResolver.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MixedContentModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SimpleContentModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Grammar.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericFacetValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractStringValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AnySimpleTypeDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\AnyURIDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\Base64BinaryDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\BooleanDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidatorFactory.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DateDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DayDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DecimalDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DoubleDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DurationDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ENTITYDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\FloatDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\HexBinaryDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IDDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IDREFDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ListDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDayDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\NameDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\NCNameDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\NOTATIONDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\QNameDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\StringDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\TimeDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\UnionDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLCanRepGroup.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\YearDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\YearMonthDatatypeValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDef.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDefList.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDElementDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDGrammar.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDScanner.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescriptionImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDEntityDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\FieldActivator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\FieldValueMap.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Field.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Key.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_KeyRef.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Selector.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Unique.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraint.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraintHandler.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStore.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStoreCache.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesXPath.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcher.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcherStack.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathSymbols.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\ComplexTypeInfo.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\GeneralAttributeCheck.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\NamespaceScope.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDef.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDefList.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaElementDecl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaGrammar.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaInfo.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaSymbols.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaValidator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\SubstitutionGroupComparator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\TraverseSchema.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesAttGroupInfo.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesElementWildcard.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesGroupInfo.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDDOMParser.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDErrorReporter.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDLocator.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XUtil.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescriptionImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\sax2Dummy.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrMapImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrNSImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCDATASectionImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCharacterDataImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMChildNode.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCommentImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMConfigurationImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDeepNodeListImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentFragmentImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentTypeImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementNSImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityReferenceImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMErrorImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationListImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationRegistry.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLocatorImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSSerializerImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNamedNodeMapImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIDMap.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIteratorImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeListImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeVector.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNormalizer.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNotationImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMParentNode.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMProcessingInstructionImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringListImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringPool.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTextImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTreeWalkerImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTypeInfoImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDElementNSImpl.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttribute.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttributeList.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIElement.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIItem.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAnnotation.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeDeclaration.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeGroupDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeUse.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSComplexTypeDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSElementDeclaration.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSFacet.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSIDCDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModel.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroup.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroupDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSMultiValueFacet.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSNamespaceItem.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSNotationDeclaration.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSObject.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSParticle.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSSimpleTypeDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSTypeDefinition.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSValue.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\XSWildcard.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSException.obj 
-      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSOutputImpl.obj 
+    <OBJFILES value="..\..\..\..\..\Build\Win32\BCB6\obj\Xerceslib.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsFileMgr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\InMemMsgLoader.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsMutexMgr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPURLInputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\WinSockNetAccessor.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPInputStreamCommon.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Win32TransService.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ASCIIRangeFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BlockRangeFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BMPattern.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\CharToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ClosureToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ConcatToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ConditionToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Match.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ModifierToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Op.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\OpFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ParenToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ParserForXMLSchema.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RangeTokenMap.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RegularExpression.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RegxParser.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\RegxUtil.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\StringToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Token.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\TokenFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\UnicodeRangeFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\UnionToken.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRangeFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUniCharacter.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Base64.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DefaultPanicHandler.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PanicHandler.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileInputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinInputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemInputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BitSet.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\EncodingValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\HashPtr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\HashXMLCh.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\HeaderDummy.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\HexBin.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\KVStringPair.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Mutexes.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PlatformUtils.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIUni.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\QName.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\StringPool.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SynchronizedStringPool.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\TransService.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMemory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XML256TableTranscoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XML88591Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAbstractDoubleFloat.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLASCIITranscoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigDecimal.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigInteger.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChar.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChTranscoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDateTime.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDouble.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEBCDICTranscoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFloat.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1047Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1140Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLInitializer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLMsgLoader.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNumber.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLString.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLStringTokenizer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUCS4Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUni.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUri.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLURL.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF16Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF8Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLWin1252Transcoder.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinOutputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileFormatTarget.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileInputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufFormatTarget.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufInputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\StdInInputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\StdOutFormatTarget.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\URLInputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4DOMLSInput.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4InputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDef.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBuffer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBufferMgr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLContentModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLElementDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEntityDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFormatter.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNotationDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRecognizer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRefInfo.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDefList.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarDescription.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescription.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescription.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileOutputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemOutputStream.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DGXMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ElemStack.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner2.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MemoryManagerImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ReaderMgr.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SGXMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ValidationContextImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttributesImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttrListImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\WFXMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarPoolImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLReader.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScannerResolver.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XProtoType.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAXMLScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSObjectFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSerializeEngine.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XTemplateSerializer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Dummy.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\InputSource.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParseException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSParserImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\CMAny.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\CMBinaryOp.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\CMUnaryOp.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ContentLeafNameTypeVector.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ContentSpecNode.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DFAContentModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\GrammarResolver.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MixedContentModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SimpleContentModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Grammar.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericFacetValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractStringValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AnySimpleTypeDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\AnyURIDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\Base64BinaryDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\BooleanDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidatorFactory.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DateDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DayDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DecimalDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DoubleDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DurationDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ENTITYDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\FloatDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\HexBinaryDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IDDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IDREFDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ListDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDayDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\NameDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\NCNameDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\NOTATIONDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\QNameDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\StringDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\TimeDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\UnionDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLCanRepGroup.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\YearDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\YearMonthDatatypeValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDef.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDefList.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDElementDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDGrammar.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDScanner.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescriptionImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DTDEntityDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\FieldActivator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\FieldValueMap.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Field.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Key.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_KeyRef.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Selector.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Unique.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraint.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraintHandler.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStore.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStoreCache.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesXPath.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcher.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcherStack.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XPathSymbols.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\ComplexTypeInfo.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\GeneralAttributeCheck.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\NamespaceScope.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDef.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDefList.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaElementDecl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaGrammar.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaInfo.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaSymbols.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaValidator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\SubstitutionGroupComparator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\TraverseSchema.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesAttGroupInfo.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesElementWildcard.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XercesGroupInfo.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDDOMParser.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDErrorReporter.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDLocator.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XUtil.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescriptionImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\sax2Dummy.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrMapImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrNSImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCDATASectionImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCharacterDataImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMChildNode.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCommentImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMConfigurationImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDeepNodeListImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentFragmentImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentTypeImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementNSImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityReferenceImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMErrorImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationListImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationRegistry.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLocatorImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSSerializerImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNamedNodeMapImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIDMap.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIteratorImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeListImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeVector.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNormalizer.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNotationImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMParentNode.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMProcessingInstructionImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringListImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringPool.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTextImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTreeWalkerImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTypeInfoImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSDElementNSImpl.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttribute.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttributeList.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIElement.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIItem.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAnnotation.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeDeclaration.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeGroupDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeUse.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSComplexTypeDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSElementDeclaration.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSFacet.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSIDCDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModel.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroup.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroupDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSMultiValueFacet.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSNamespaceItem.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSNotationDeclaration.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSObject.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSParticle.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSSimpleTypeDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSTypeDefinition.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSValue.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\XSWildcard.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSException.obj
+      ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSOutputImpl.obj
       ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSInputImpl.obj
       ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathExpressionImpl.obj
       ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathNSResolverImpl.obj
@@ -316,7 +317,7 @@
     <LIBRARIES value=""/>
     <SPARELIBS value="rtl.lib"/>
     <PACKAGES value="vcl.bpi rtl.bpi"/>
-    <PATHCPP value=".;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\xinclude"/>
+    <PATHCPP value=".;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\xinclude"/>
     <PATHPAS value=".;"/>
     <PATHRC value=".;"/>
     <PATHASM value=".;"/>
@@ -326,40 +327,41 @@
     <USERDEFINES value="_DEBUG;PLATFORM_WIN32;XERCES_BUILDING_LIBRARY;XERCES_PATH_DELIMITER_BACKSLASH=1;XERCES_USE_FILEMGR_WINDOWS=1;XERCES_USE_MUTEXMGR_WINDOWS=1;XERCES_USE_NETACCESSOR_WINSOCK=1;XERCES_USE_TRANSCODER_WINDOWS=1;XERCES_USE_MSGLOADER_INMEMORY=1;HAVE_LIMITS_H=1;HAVE_FTIME=1;HAVE_SYS_TIMEB_H=1;HAVE_STRICMP=1;HAVE_STRNICMP=1;HAVE_WCSUPR=1;HAVE_WCSLWR=1;HAVE_WCSICMP=1;HAVE_WCSNICMP=1;"/>
     <SYSDEFINES value="NO_STRICT;_RTLDLL;USEPACKAGES"/>
     <MAINSOURCE value="Xerceslib.cpp"/>
-    <INCLUDEPATH value="..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\include"/>
-    <LIBPATH value="..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\lib\obj;$(BCB)\lib"/>
+    <INCLUDEPATH value="..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\include"/>
+    <LIBPATH value="..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\lib\obj;$(BCB)\lib"/>
     <WARNINGS value="-w-par -w-8027 -w-8026"/>
     <OTHERFILES value=""/>
   </MACROS>
   <OPTIONS>
-    <IDLCFLAGS value="-I..\..\..\..\..\src\xercesc\framework\psvi 
-      -I..\..\..\..\..\src\xercesc\dom -I..\..\..\..\..\src\xercesc\dom\impl 
-      -I..\..\..\..\..\src\xercesc\sax2 
-      -I..\..\..\..\..\src\xercesc\validators\schema 
-      -I..\..\..\..\..\src\xercesc\validators\schema\identity 
-      -I..\..\..\..\..\src\xercesc\validators\DTD 
-      -I..\..\..\..\..\src\xercesc\validators\datatype 
-      -I..\..\..\..\..\src\xercesc\validators\common 
-      -I..\..\..\..\..\src\xercesc\parsers -I..\..\..\..\..\src\xercesc\sax 
-      -I..\..\..\..\..\src\xercesc\internal 
-      -I..\..\..\..\..\src\xercesc\framework -I..\..\..\..\..\src\xercesc\util 
-      -I..\..\..\..\..\src\xercesc\util\regx 
-      -I..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock 
-      -I..\..\..\..\..\src\xercesc\util\Transcoders\Win32 
-      -I..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory 
-      -I..\..\..\..\..\src\xercesc\util\FileManagers 
-      -I..\..\..\..\..\src\xercesc\util\MutexManagers -I..\..\..\..\..\src 
+    <IDLCFLAGS value="-I..\..\..\..\..\src\xercesc\framework\psvi
+      -I..\..\..\..\..\src\xercesc\dom -I..\..\..\..\..\src\xercesc\dom\impl
+      -I..\..\..\..\..\src\xercesc\sax2
+      -I..\..\..\..\..\src\xercesc\validators\schema
+      -I..\..\..\..\..\src\xercesc\validators\schema\identity
+      -I..\..\..\..\..\src\xercesc\validators\DTD
+      -I..\..\..\..\..\src\xercesc\validators\datatype
+      -I..\..\..\..\..\src\xercesc\validators\common
+      -I..\..\..\..\..\src\xercesc\parsers -I..\..\..\..\..\src\xercesc\sax
+      -I..\..\..\..\..\src\xercesc\internal
+      -I..\..\..\..\..\src\xercesc\framework -I..\..\..\..\..\src\xercesc\util
+      -I..\..\..\..\..\src\xercesc\util\regx
+      -I..\..\..\..\..\src\xercesc\util\NetAccessors
+      -I..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock
+      -I..\..\..\..\..\src\xercesc\util\Transcoders\Win32
+      -I..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory
+      -I..\..\..\..\..\src\xercesc\util\FileManagers
+      -I..\..\..\..\..\src\xercesc\util\MutexManagers -I..\..\..\..\..\src
       -I..\..\..\..\..\src\xercesc\xinclude
-      -I$(BCB)\include -src_suffix cpp -D_DEBUG -DPLATFORM_WIN32 
-      -DXERCES_BUILDING_LIBRARY -DXERCES_PATH_DELIMITER_BACKSLASH=1 
-      -DXERCES_USE_FILEMGR_WINDOWS=1 -DXERCES_USE_MUTEXMGR_WINDOWS=1 
-      -DXERCES_USE_NETACCESSOR_WINSOCK=1 
-      -DXERCES_USE_TRANSCODER_WINDOWS=1 -DXERCES_USE_MSGLOADER_INMEMORY=1 
-      -DHAVE_LIMITS_H=1 -DHAVE_FTIME=1 -DHAVE_SYS_TIMEB_H=1 -DHAVE_STRICMP=1 
+      -I$(BCB)\include -src_suffix cpp -D_DEBUG -DPLATFORM_WIN32
+      -DXERCES_BUILDING_LIBRARY -DXERCES_PATH_DELIMITER_BACKSLASH=1
+      -DXERCES_USE_FILEMGR_WINDOWS=1 -DXERCES_USE_MUTEXMGR_WINDOWS=1
+      -DXERCES_USE_NETACCESSOR_WINSOCK=1
+      -DXERCES_USE_TRANSCODER_WINDOWS=1 -DXERCES_USE_MSGLOADER_INMEMORY=1
+      -DHAVE_LIMITS_H=1 -DHAVE_FTIME=1 -DHAVE_SYS_TIMEB_H=1 -DHAVE_STRICMP=1
       -DHAVE_WCSUPR=1 -DHAVE_WCSLWR=1 -DHAVE_WCSICMP=1 -DHAVE_WCSNICMP=1
       -DHAVE_STRNICMP=1 -boa"/>
     <CFLAG1 value="-WD -Od -Q -Vx -Ve -X- -r- -a8 -b -k -y -v -vi- -tWD -tWM -c"/>
-    <PFLAGS value="-N2..\..\..\..\..\Build\Win32\BCB6\obj 
+    <PFLAGS value="-N2..\..\..\..\..\Build\Win32\BCB6\obj
       -N0..\..\..\..\..\Build\Win32\BCB6\obj -$Y+ -$W -$O- -$A8 -v -JPHNE -M"/>
     <RFLAGS value=""/>
     <AFLAGS value="/mx /w2 /zi"/>
@@ -377,6 +379,7 @@
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\FileManagers\WindowsFileMgr.cpp" FORMNAME="" UNITNAME="WindowsFileMgr" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory\InMemMsgLoader.cpp" FORMNAME="" UNITNAME="InMemMsgLoader" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\MutexManagers\WindowsMutexMgr.cpp" FORMNAME="" UNITNAME="WindowsMutexMgr" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+      <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp" FORMNAME="" UNITNAME="BinHTTPInputStreamCommon" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp" FORMNAME="" UNITNAME="BinHTTPURLInputStream" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\WinSockNetAccessor.cpp" FORMNAME="" UNITNAME="WinSockNetAccessor" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
       <FILE FILENAME="..\..\..\..\..\src\xercesc\util\Transcoders\Win32\Win32TransService.cpp" FORMNAME="" UNITNAME="Win32TransService" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
diff --git a/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak b/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak
index 207e7e2d31bd5cebb115477ca910c9cfd57ee9ba..d3a41bb64be2d89332a8bc7f80a899d58ba117d0 100644
--- a/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak
+++ b/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak
@@ -11,6 +11,7 @@ OBJFILES = $(TARGETPATH)\obj\XercesLib.obj \
     $(TARGETPATH)\obj\Win32TransService.obj \
     $(TARGETPATH)\obj\BinHTTPURLInputStream.obj \
     $(TARGETPATH)\obj\WinSockNetAccessor.obj \
+    $(TARGETPATH)\obj\BinHTTPInputStreamCommon.obj \
     $(TARGETPATH)\obj\ASCIIRangeFactory.obj \
     $(TARGETPATH)\obj\BlockRangeFactory.obj \
     $(TARGETPATH)\obj\BMPattern.obj \
@@ -319,7 +320,7 @@ LIBRARIES =
 SPARELIBS =
 DEFFILE =
 # ---------------------------------------------------------------------------
-PATHCPP = .;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
+PATHCPP = .;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
 PATHASM = .;
 PATHPAS = .;
 PATHRC = .;..\..\..\..\..\src\xercesc\util\Platforms\Win32
@@ -328,8 +329,8 @@ XERCES_NO_ASM=;XERCES_NO_ASM
 !endif
 USERDEFINES = _DEBUG;XERCES_BUILDING_LIBRARY;XERCES_USE_FILEMGR_WINDOWS=1;XERCES_USE_MUTEXMGR_WINDOWS=1;XERCES_USE_NETACCESSOR_WINSOCK=1;XERCES_USE_MSGLOADER_INMEMORY=1;XERCES_USE_TRANSCODER_WINDOWS=1;XERCES_PATH_DELIMITER_BACKSLASH=1;HAVE_LIMITS_H=1;HAVE_SYS_TIMEB_H=1;HAVE_FTIME=1;HAVE_STRICMP=1;HAVE_STRNICMP=1;HAVE_WCSUPR=0;HAVE_WCSLWR=0;HAVE_WCSICMP=0;HAVE_WCSNICMP=0;$(XERCES_NO_ASM)
 SYSDEFINES = NO_STRICT;_NO_VCL;_RTLDLL
-INCLUDEPATH = ..\..\..\..\..\src;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
-LIBPATH = ..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
+INCLUDEPATH = ..\..\..\..\..\src;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
+LIBPATH = ..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude;
 WARNINGS= -w-par
 # ---------------------------------------------------------------------------
 CFLAG1 = -tWD -Od -Vx -Ve -X- -r- -a8 -4 -b -k -y -v -vi- -c -tWM
diff --git a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
index 5377583a78e8d1a837598c6cb550011c0a6259f2..d099031c87de1370f0a5b878b3a209d57e864901 100644
--- a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
+++ b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
@@ -194,6 +194,14 @@ SOURCE=..\..\..\..\..\src\xercesc\util\Transcoders\Win32\Win32TransService.hpp
 # PROP Default_Filter ".cpp,.hpp"
 # Begin Source File
 
+SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp
 # End Source File
 # Begin Source File
diff --git a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak
index 3e39e86144ba00a277a54f9dfe565f35d4b55f9f..cdda6e695f6fe2c1885e54feddd90cd8dfaacbe4 100644
--- a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak
+++ b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak
@@ -248,6 +248,7 @@ CLEAN :
 	-@erase "$(INTDIR)\WindowsFileMgr.obj"
 	-@erase "$(INTDIR)\WindowsMutexMgr.obj"
 	-@erase "$(INTDIR)\WinSockNetAccessor.obj"
+	-@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj"
 	-@erase "$(INTDIR)\Wrapper4DOMLSInput.obj"
 	-@erase "$(INTDIR)\Wrapper4InputSource.obj"
 	-@erase "$(INTDIR)\XercesAttGroupInfo.obj"
@@ -372,6 +373,7 @@ LINK32_OBJS= \
 	"$(INTDIR)\Win32TransService.obj" \
 	"$(INTDIR)\BinHTTPURLInputStream.obj" \
 	"$(INTDIR)\WinSockNetAccessor.obj" \
+	"$(INTDIR)\BinHTTPInputStreamCommon.obj" \
 	"$(INTDIR)\ASCIIRangeFactory.obj" \
 	"$(INTDIR)\BlockRangeFactory.obj" \
 	"$(INTDIR)\BMPattern.obj" \
@@ -894,6 +896,7 @@ CLEAN :
 	-@erase "$(INTDIR)\WindowsFileMgr.obj"
 	-@erase "$(INTDIR)\WindowsMutexMgr.obj"
 	-@erase "$(INTDIR)\WinSockNetAccessor.obj"
+	-@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj"
 	-@erase "$(INTDIR)\Wrapper4DOMLSInput.obj"
 	-@erase "$(INTDIR)\Wrapper4InputSource.obj"
 	-@erase "$(INTDIR)\XercesAttGroupInfo.obj"
@@ -1018,6 +1021,7 @@ LINK32_OBJS= \
 	"$(INTDIR)\Win32TransService.obj" \
 	"$(INTDIR)\BinHTTPURLInputStream.obj" \
 	"$(INTDIR)\WinSockNetAccessor.obj" \
+	"$(INTDIR)\BinHTTPInputStreamCommon.obj" \
 	"$(INTDIR)\ASCIIRangeFactory.obj" \
 	"$(INTDIR)\BlockRangeFactory.obj" \
 	"$(INTDIR)\BMPattern.obj" \
@@ -1540,6 +1544,7 @@ CLEAN :
 	-@erase "$(INTDIR)\WindowsFileMgr.obj"
 	-@erase "$(INTDIR)\WindowsMutexMgr.obj"
 	-@erase "$(INTDIR)\WinSockNetAccessor.obj"
+	-@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj"
 	-@erase "$(INTDIR)\Wrapper4DOMLSInput.obj"
 	-@erase "$(INTDIR)\Wrapper4InputSource.obj"
 	-@erase "$(INTDIR)\XercesAttGroupInfo.obj"
@@ -1665,6 +1670,7 @@ LINK32_OBJS= \
 	"$(INTDIR)\Win32TransService.obj" \
 	"$(INTDIR)\BinHTTPURLInputStream.obj" \
 	"$(INTDIR)\WinSockNetAccessor.obj" \
+	"$(INTDIR)\BinHTTPInputStreamCommon.obj" \
 	"$(INTDIR)\ASCIIRangeFactory.obj" \
 	"$(INTDIR)\BlockRangeFactory.obj" \
 	"$(INTDIR)\BMPattern.obj" \
@@ -2186,6 +2192,7 @@ CLEAN :
 	-@erase "$(INTDIR)\WindowsFileMgr.obj"
 	-@erase "$(INTDIR)\WindowsMutexMgr.obj"
 	-@erase "$(INTDIR)\WinSockNetAccessor.obj"
+	-@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj"
 	-@erase "$(INTDIR)\Wrapper4DOMLSInput.obj"
 	-@erase "$(INTDIR)\Wrapper4InputSource.obj"
 	-@erase "$(INTDIR)\XercesAttGroupInfo.obj"
@@ -2311,6 +2318,7 @@ LINK32_OBJS= \
 	"$(INTDIR)\Win32TransService.obj" \
 	"$(INTDIR)\BinHTTPURLInputStream.obj" \
 	"$(INTDIR)\WinSockNetAccessor.obj" \
+	"$(INTDIR)\BinHTTPInputStreamCommon.obj" \
 	"$(INTDIR)\ASCIIRangeFactory.obj" \
 	"$(INTDIR)\BlockRangeFactory.obj" \
 	"$(INTDIR)\BMPattern.obj" \
@@ -2713,6 +2721,10 @@ SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\WinSockNetAccessor.c
 "$(INTDIR)\WinSockNetAccessor.obj" : $(SOURCE) "$(INTDIR)"
 	$(CPP) $(CPP_PROJ) $(SOURCE)
 
+SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp
+
+"$(INTDIR)\BinHTTPInputStreamCommon.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
 
 SOURCE=..\..\..\..\..\src\xercesc\util\regx\ASCIIRangeFactory.cpp
 
diff --git a/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj
index 5fd27af5e8e88975298d40de9e4860fc99dec63d..15b7b2d6198fdbc0f7809ee67387080e824e6ab6 100644
--- a/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj
+++ b/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj
@@ -1113,6 +1113,12 @@
 			<Filter
 				Name="NetAccessors"
 				Filter=".cpp,.hpp">
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp">
+				</File>
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp">
+				</File>
 				<File
 					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp">
 				</File>
diff --git a/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj
index 766d08abe3e07f636da2630045d14d63b52b6429..c454e84a448b5c370a6f47304a2fe7408ee88a88 100644
--- a/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj
+++ b/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj
@@ -2292,6 +2292,14 @@
 				Name="NetAccessors"
 				Filter=".cpp,.hpp"
 				>
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp"
+					>
+				</File>
 				<File
 					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp"
 					>
diff --git a/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj
index 877249489441e1600426130598f5c8d270b1b526..3c633f2f7af642d453c4bb65a0ce746fa616e788 100644
--- a/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj
+++ b/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj
@@ -2323,6 +2323,42 @@
 				Name="NetAccessors"
 				Filter=".cpp,.hpp"
 				>
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp"
+					>
+					<FileConfiguration
+						Name="ICU Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="ICU Debug|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="ICU Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="ICU Release|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp"
+					>
+				</File>
 				<File
 					RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp"
 					>
diff --git a/src/Makefile.am b/src/Makefile.am
index ad8997a5e1860e5c1b9ba213ce6e1d36fe91a9dc..793a80594743e35d138ff7ae05efc1a9bd725f35 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1034,11 +1034,13 @@ curl_sources = \
 
 sockets_headers = \
 	xercesc/util/NetAccessors/Socket/SocketNetAccessor.hpp \
-	xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp
+	xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp \
+	xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp
 
 sockets_sources = \
 	xercesc/util/NetAccessors/Socket/SocketNetAccessor.cpp \
-	xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp
+	xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp \
+	xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
 
 libwww_headers = \
 	xercesc/util/NetAccessors/libWWW/LibWWWNetAccessor.hpp \
@@ -1058,11 +1060,13 @@ cfurl_sources = \
 
 winsock_headers = \
 	xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.hpp \
-	xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp
+	xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp \
+	xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp
 
 winsock_sources = \
 	xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp \
-	xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
+	xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp \
+	xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
 
 
 msginmemory_headers = \
diff --git a/src/xercesc/util/BinFileInputStream.cpp b/src/xercesc/util/BinFileInputStream.cpp
index 28fb727c4d1e7f6bf018f2118bc3ed0d445166b5..959f03a4d3d3645543db925fd07e80bcfb80b657 100644
--- a/src/xercesc/util/BinFileInputStream.cpp
+++ b/src/xercesc/util/BinFileInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -102,4 +102,9 @@ BinFileInputStream::readBytes(          XMLByte* const  toFill
     return XMLPlatformUtils::readFileBuffer(fSource, maxToRead, toFill, fMemoryManager);
 }
 
+const XMLCh* BinFileInputStream::getContentType() const
+{
+    return 0;
+}
+
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/BinFileInputStream.hpp b/src/xercesc/util/BinFileInputStream.hpp
index b8d3f95a5061057592d3c16b0a06363d5de204bc..3b4ba03d348a4dfb6c5af7f3e132c7caf34c154c 100644
--- a/src/xercesc/util/BinFileInputStream.hpp
+++ b/src/xercesc/util/BinFileInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -73,13 +73,14 @@ public :
         , const XMLSize_t           maxToRead
     );
 
+    virtual const XMLCh* getContentType() const;
 
 private :
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators
     // -----------------------------------------------------------------------
     BinFileInputStream(const BinFileInputStream&);
-    BinFileInputStream& operator=(const BinFileInputStream&);   
+    BinFileInputStream& operator=(const BinFileInputStream&);
 
     // -----------------------------------------------------------------------
     //  Private data members
diff --git a/src/xercesc/util/BinInputStream.cpp b/src/xercesc/util/BinInputStream.cpp
index efea4ed0a17113729fec887cbe08d15fe54c76d1..6ca0d9a39ad8a0aff842e33851034c1c70d4218a 100644
--- a/src/xercesc/util/BinInputStream.cpp
+++ b/src/xercesc/util/BinInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
diff --git a/src/xercesc/util/BinInputStream.hpp b/src/xercesc/util/BinInputStream.hpp
index 6f0b84a2a9e713f894c0604afa8f65eab1fb0731..d93c017935f935d39f3eb48895f2e144c7a2d98e 100644
--- a/src/xercesc/util/BinInputStream.hpp
+++ b/src/xercesc/util/BinInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -46,6 +46,26 @@ public :
         , const XMLSize_t           maxToRead
     ) = 0;
 
+    /**
+     * Return the "out-of-band" content type for the data supplied by this
+     * input stream in the form of the media-type production (mime type
+     * with optional parameters such as encoding) as defined by the HTTP 1.1
+     * specification. If no such content type is provided for the data, 0 is
+     * returned. This function is expected to return the correct value at
+     * any time after the construction of the stream.
+     *
+     * An example of the stream that may return non-0 from this function is
+     * an HTTP stream with the value returned taken from the "Content-Type"
+     * HTTP header. Note also that if the encoding of the data is known
+     * to the application by some other means then the setEncoding function
+     * in the InputSource object should be used instead. The getContentType
+     * function should only be used to return information that is intrinsic
+     * to the stream.
+     *
+     * @return The content type, or 0 if one is not available.
+     */
+    virtual const XMLCh* getContentType() const = 0;
+
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/BinMemInputStream.cpp b/src/xercesc/util/BinMemInputStream.cpp
index 8a465b8b1c6429aeafcd9cb7be0181df3e8891bb..42b7a342eedac8de9a798bdfca4fbeb6d8b1d816 100644
--- a/src/xercesc/util/BinMemInputStream.cpp
+++ b/src/xercesc/util/BinMemInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -90,4 +90,9 @@ XMLSize_t BinMemInputStream::readBytes(       XMLByte* const  toFill
     return actualToRead;
 }
 
+const XMLCh* BinMemInputStream::getContentType() const
+{
+    return 0;
+}
+
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/BinMemInputStream.hpp b/src/xercesc/util/BinMemInputStream.hpp
index bede9d4aaf6d93a980e049184b3c61670959d439..1617b65d0590ab0b806007aa77b3c6b3d5b6a474 100644
--- a/src/xercesc/util/BinMemInputStream.hpp
+++ b/src/xercesc/util/BinMemInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -71,14 +71,16 @@ public :
         , const XMLSize_t       maxToRead
     );
 
+    virtual const XMLCh* getContentType() const;
+
     inline XMLSize_t getSize() const;
-    
+
 private :
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators
     // -----------------------------------------------------------------------
     BinMemInputStream(const BinMemInputStream&);
-    BinMemInputStream& operator=(const BinMemInputStream&); 
+    BinMemInputStream& operator=(const BinMemInputStream&);
     // -----------------------------------------------------------------------
     //  Private data members
     //
diff --git a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8ec95e0c1546dd34217f59c534da628d8fbc244e
--- /dev/null
+++ b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp
@@ -0,0 +1,356 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: BinFileInputStream.cpp 553903 2007-07-06 14:43:42Z amassari $
+ */
+
+
+// ---------------------------------------------------------------------------
+//  Includes
+// ---------------------------------------------------------------------------
+
+#if HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp>
+
+#include <xercesc/util/XMLString.hpp>
+#include <xercesc/util/XMLExceptMsgs.hpp>
+#include <xercesc/util/Janitor.hpp>
+#include <xercesc/util/TransService.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
+#include <xercesc/util/Base64.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class TranscodeStr
+{
+public:
+    TranscodeStr(const XMLCh *in, XMLTranscoder* trans,
+                 MemoryManager *manager = XMLPlatformUtils::fgMemoryManager)
+        : fString(0),
+          fBytesWritten(0),
+          fMemoryManager(manager)
+    {
+        if(in) {
+            XMLSize_t len = XMLString::stringLen(in) + 1;
+
+            XMLSize_t allocSize = len * sizeof(XMLCh);
+            fString = (unsigned char*)fMemoryManager->allocate(allocSize);
+
+            XMLSize_t charsRead;
+
+            XMLSize_t charsDone = 0;
+
+            while(true) {
+                fBytesWritten += trans->transcodeTo(in + charsDone, len - charsDone,
+                                                    fString + fBytesWritten, allocSize - fBytesWritten,
+                                                    charsRead, XMLTranscoder::UnRep_Throw);
+                charsDone += charsRead;
+
+                if(charsDone == len) break;
+
+                allocSize *= 2;
+                unsigned char *newBuf = (unsigned char*)fMemoryManager->allocate(allocSize);
+                memcpy(newBuf, fString, fBytesWritten);
+                fMemoryManager->deallocate(fString);
+                fString = newBuf;
+            }
+        }
+    }
+
+    ~TranscodeStr()
+    {
+        if(fString)
+            fMemoryManager->deallocate(fString);
+    }
+
+    const unsigned char *str() const
+    {
+        return fString;
+    }
+
+    XMLSize_t len() const
+    {
+        return fBytesWritten;
+    }
+
+private:
+    unsigned char *fString;
+    XMLSize_t fBytesWritten;
+    MemoryManager *fMemoryManager;
+};
+
+BinHTTPInputStreamCommon::BinHTTPInputStreamCommon(MemoryManager *manager)
+      : fBytesProcessed(0)
+      , fBuffer(1023, manager)
+      , fContentType(0)
+      , fMemoryManager(manager)
+{
+}
+
+
+BinHTTPInputStreamCommon::~BinHTTPInputStreamCommon()
+{
+    if(fContentType) fMemoryManager->deallocate(fContentType);
+}
+
+static const char *CRLF = "\r\n";
+
+void BinHTTPInputStreamCommon::createHTTPRequest(const XMLURL &urlSource, const XMLNetHTTPInfo *httpInfo, CharBuffer &buffer)
+{
+    static const char *GET = "GET ";
+    static const char *PUT = "PUT ";
+    static const char *POST = "POST ";
+    static const char *HTTP10 = " HTTP/1.0\r\n";
+    static const char *HOST = "Host: ";
+    static const char *AUTHORIZATION = "Authorization: Basic ";
+    static const char *COLON = ":";
+
+    XMLTransService::Codes failReason;
+    const XMLSize_t blockSize = 2048;
+
+    XMLTranscoder* trans = XMLPlatformUtils::fgTransService->makeNewTranscoderFor("ISO8859-1", failReason, blockSize, fMemoryManager);
+    Janitor<XMLTranscoder> janTrans(trans);
+
+    TranscodeStr hostName(urlSource.getHost(), trans, fMemoryManager);
+    TranscodeStr path(urlSource.getPath(), trans, fMemoryManager);
+    TranscodeStr fragment(urlSource.getFragment(), trans, fMemoryManager);
+    TranscodeStr query(urlSource.getQuery(), trans, fMemoryManager);
+
+    // Build up the http GET command to send to the server.
+    // To do:  We should really support http 1.1.  This implementation
+    //         is weak.
+    if(httpInfo) {
+        switch(httpInfo->fHTTPMethod) {
+        case XMLNetHTTPInfo::GET:   buffer.append(GET); break;
+        case XMLNetHTTPInfo::PUT:   buffer.append(PUT); break;
+        case XMLNetHTTPInfo::POST:  buffer.append(POST); break;
+        }
+    }
+    else {
+        buffer.append(GET);
+    }
+
+    if(path.str() != 0) {
+        buffer.append((char*)path.str());
+    }
+    else {
+        buffer.append("/");
+    }
+
+    if(query.str() != 0) {
+        buffer.append("?");
+        buffer.append((char*)query.str());
+    }
+
+    if(fragment.str() != 0) {
+        buffer.append((char*)fragment.str());
+    }
+    buffer.append(HTTP10);
+
+    buffer.append(HOST);
+    buffer.append((char*)hostName.str());
+    if(urlSource.getPortNum() != 80)
+    {
+        buffer.append(COLON);
+        buffer.appendDecimalNumber(urlSource.getPortNum());
+    }
+    buffer.append(CRLF);
+
+    const XMLCh *username = urlSource.getUser();
+    const XMLCh *password = urlSource.getPassword();
+    if(username && password) {
+        XMLBuffer userPassBuf(256, fMemoryManager);
+        userPassBuf.append(username);
+        userPassBuf.append(chColon);
+        userPassBuf.append(password);
+
+        TranscodeStr userPass(userPassBuf.getRawBuffer(), trans, fMemoryManager);
+
+        XMLSize_t len;
+        XMLByte* encodedData = Base64::encode((XMLByte*)userPass.str(), userPass.len() - 1, &len, fMemoryManager);
+        ArrayJanitor<XMLByte> janBuf2(encodedData, fMemoryManager);
+
+        if(encodedData) {
+            // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line
+            XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte));
+            ArrayJanitor<XMLByte> janBuf(authData, fMemoryManager);
+            XMLByte *cursor = authData;
+            for(XMLSize_t i = 0; i < len; ++i)
+                if(encodedData[i] != chLF)
+                    *cursor++ = encodedData[i];
+            *cursor++ = 0;
+            buffer.append(AUTHORIZATION);
+            buffer.append((char*)authData);
+            buffer.append(CRLF);
+        }
+    }
+
+    if(httpInfo && httpInfo->fHeaders)
+        buffer.append(httpInfo->fHeaders, httpInfo->fHeadersLen);
+
+    buffer.append(CRLF);
+}
+
+XMLCh *BinHTTPInputStreamCommon::findHeader(const char *name) const
+{
+    int len = strlen(name);
+
+    char *p = strstr(fBuffer.getRawBuffer(), name);
+    while(p != 0) {
+        if(*(p - 1) == '\n' &&
+            *(p + len) == ':' &&
+            *(p + len + 1) == ' ') {
+
+            p += len + 2;
+
+            char *endP = strstr(p, CRLF);
+            if(endP == 0) {
+                for(endP = p; *endP != 0; ++endP);
+            }
+
+            char tmp = *endP;
+            *endP = 0;
+
+            XMLCh *value = XMLString::transcode(p, fMemoryManager);
+            *endP = tmp;
+            return value;
+        }
+
+        p = strstr(p + 1, name);
+    }
+
+    return 0;
+}
+
+int BinHTTPInputStreamCommon::sendRequest(const XMLURL &url, const XMLNetHTTPInfo *httpInfo)
+{
+    //
+    //  Constants in ASCII to send/check in the HTTP request/response
+    //
+
+    static const char *CRLF2X = "\r\n\r\n";
+    static const char *LF2X = "\n\n";
+
+    // The port is open and ready to go.
+    // Build up the http GET command to send to the server.
+    CharBuffer requestBuffer(1023, fMemoryManager);
+    createHTTPRequest(url, httpInfo, requestBuffer);
+
+    // Send the http request
+    if(!send(requestBuffer.getRawBuffer(), requestBuffer.getLen())) {
+        ThrowXMLwithMemMgr1(NetAccessorException,
+                            XMLExcepts::NetAcc_WriteSocket, url.getURLText(), fMemoryManager);
+    }
+
+    if(httpInfo && httpInfo->fPayload) {
+        if(!send(httpInfo->fPayload, httpInfo->fPayloadLen)) {
+            ThrowXMLwithMemMgr1(NetAccessorException,
+                                XMLExcepts::NetAcc_WriteSocket, url.getURLText(), fMemoryManager);
+        }
+    }
+
+    //
+    // get the response, check the http header for errors from the server.
+    //
+    char tmpBuf[1024];
+    int ret;
+
+    fBuffer.reset();
+    while(true) {
+        ret = receive(tmpBuf, sizeof(tmpBuf));
+        if(ret == -1) {
+            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager);
+        }
+
+        fBuffer.append(tmpBuf, ret);
+
+        fBufferPos = strstr(fBuffer.getRawBuffer(), CRLF2X);
+        if(fBufferPos != 0) {
+            fBufferPos += 4;
+            *(fBufferPos - 2) = 0;
+            break;
+        }
+
+        fBufferPos = strstr(fBuffer.getRawBuffer(), LF2X);
+        if(fBufferPos != 0) {
+            fBufferPos += 2;
+            *(fBufferPos - 1) = 0;
+            break;
+        }
+    }
+
+    // Parse the response status
+    char *p = strstr(fBuffer.getRawBuffer(), "HTTP");
+    if(p == 0) {
+        ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager);
+    }
+
+    p = strchr(p, chSpace);
+    if(p == 0) {
+        ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager);
+    }
+
+    return atoi(p);
+}
+
+const XMLCh *BinHTTPInputStreamCommon::getContentType() const
+{
+    if(fContentType == 0) {
+        // mutable
+        const_cast<XMLCh*&>(fContentType) = findHeader("Content-Type");
+    }
+    return fContentType;
+}
+
+XMLSize_t BinHTTPInputStreamCommon::readBytes(XMLByte* const    toFill,
+                                              const XMLSize_t    maxToRead)
+{
+    XMLSize_t len = fBuffer.getRawBuffer() + fBuffer.getLen() - fBufferPos;
+    if(len > 0)
+    {
+        // If there's any data left over in the buffer into which we first
+        //   read from the server (to get the http header), return that.
+        if (len > maxToRead)
+            len = maxToRead;
+        memcpy(toFill, fBufferPos, len);
+        fBufferPos += len;
+    }
+    else
+    {
+        // There was no data in the local buffer.
+        // Read some from the socket, straight into our caller's buffer.
+        //
+        int cbRead = receive((char *)toFill, maxToRead);
+        if (cbRead == -1)
+        {
+            ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager);
+        }
+        len = cbRead;
+    }
+
+    fBytesProcessed += len;
+    return len;
+}
+
+XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..1d06d3b9a30f1efa81d2d70c72eeaf67a0bbf430
--- /dev/null
+++ b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: BinFileInputStream.hpp 553903 2007-07-06 14:43:42Z amassari $
+ */
+
+#if !defined(XERCESC_INCLUDE_GUARD_BINHTTPINPUTSTREAMCOMMON_HPP)
+#define XERCESC_INCLUDE_GUARD_BINHTTPINPUTSTREAMCOMMON_HPP
+
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/BinInputStream.hpp>
+#include <xercesc/util/XMLNetAccessor.hpp>
+#include <xercesc/framework/MemoryManager.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+//
+// This class implements a simple expanding character buffer
+//
+class XMLUTIL_EXPORT CharBuffer
+{
+public:
+    CharBuffer(XMLSize_t capacity = 1023,
+               MemoryManager *manager = XMLPlatformUtils::fgMemoryManager)
+        : fCapacity(capacity),
+          fIndex(0),
+          fMemoryManager(manager)
+    {
+        fBuffer = (char*)fMemoryManager->allocate((fCapacity + 1) * sizeof(char));
+    }
+
+    ~CharBuffer()
+    {
+        fMemoryManager->deallocate(fBuffer);
+    }
+
+    const char* getRawBuffer() const
+    {
+        fBuffer[fIndex] = 0;
+        return fBuffer;
+    }
+
+    char* getRawBuffer()
+    {
+        fBuffer[fIndex] = 0;
+        return fBuffer;
+    }
+
+    XMLSize_t getLen() const
+    {
+        return fIndex;
+    }
+
+    void reset()
+    {
+        fIndex = 0;
+    }
+
+    void append(const char *chars)
+    {
+        if(chars != 0 && *chars != 0) {
+            // get length of chars
+            XMLSize_t count = 0;
+            for(; *(chars+count); ++count);
+
+            if(fIndex + count >= fCapacity) {
+                insureCapacity(count);
+            }
+            memcpy(&fBuffer[fIndex], chars, count * sizeof(char));
+            fIndex += count;
+        }
+    }
+
+    void append(const char *chars, XMLSize_t len)
+    {
+        if(chars != 0 && len != 0) {
+            if(fIndex + len >= fCapacity) {
+                insureCapacity(len);
+            }
+            memcpy(&fBuffer[fIndex], chars, len * sizeof(char));
+            fIndex += len;
+        }
+    }
+
+    void appendDecimalNumber(unsigned int n)
+    {
+        if(n >= 10) {
+		appendDecimalNumber(n / 10);
+		n = n % 10;
+	}
+
+        if(fIndex + 1 >= fCapacity)
+            insureCapacity(1);
+
+        fBuffer[fIndex] = '0' + n;
+        ++fIndex;
+    }
+
+    void set(const char *chars)
+    {
+        reset();
+        append(chars);
+    }
+
+private:
+    // -----------------------------------------------------------------------
+    //  Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    CharBuffer(const CharBuffer &);
+    CharBuffer &operator=(const CharBuffer &);
+
+    void insureCapacity(XMLSize_t extraNeeded)
+    {
+        // If we can't handle it, try doubling the buffer size.
+        XMLSize_t newCap = (fIndex + extraNeeded) * 2;
+
+        if(newCap > fCapacity)
+        {
+            // Allocate new buffer
+            char* newBuf = (char*)fMemoryManager->allocate((newCap + 1) * sizeof(char));
+
+            // Copy over the old stuff
+            memcpy(newBuf, fBuffer, fIndex * sizeof(char));
+
+            // Clean up old buffer and store new stuff
+            fMemoryManager->deallocate(fBuffer);
+            fBuffer = newBuf;
+            fCapacity = newCap;
+        }
+    }
+
+    // -----------------------------------------------------------------------
+    //  Private data members
+    // -----------------------------------------------------------------------
+    char *fBuffer;
+    XMLSize_t fCapacity;
+    XMLSize_t fIndex;
+    MemoryManager *fMemoryManager;
+};
+
+//
+// Common base implementation of HTTP BinInputStream that is used by some
+// platform-specific implementations.
+//
+class XMLUTIL_EXPORT BinHTTPInputStreamCommon : public BinInputStream
+{
+public :
+    virtual XMLFilePos curPos() const;
+    virtual XMLSize_t readBytes
+    (
+                XMLByte* const  toFill
+        , const XMLSize_t    maxToRead
+    );
+
+    virtual const XMLCh *getContentType() const;
+
+protected :
+    BinHTTPInputStreamCommon(MemoryManager *manager);
+    virtual ~BinHTTPInputStreamCommon();
+
+    /**
+     * \return The HTTP status code
+     */
+    int sendRequest(const XMLURL &url, const XMLNetHTTPInfo *httpInfo);
+    XMLCh *findHeader(const char *name) const;
+
+    virtual bool send(const char *buf, XMLSize_t len) = 0;
+    /**
+     * \return The length of the data received, or -1 if an error occured
+     */
+    virtual int receive(char *buf, XMLSize_t len) = 0;
+
+private :
+    // -----------------------------------------------------------------------
+    //  Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    BinHTTPInputStreamCommon(const BinHTTPInputStreamCommon&);
+    BinHTTPInputStreamCommon& operator=(const BinHTTPInputStreamCommon&);
+
+    void createHTTPRequest(const XMLURL &urlSource, const XMLNetHTTPInfo *httpInfo, CharBuffer &buffer);
+
+    // -----------------------------------------------------------------------
+    //  Private data members
+    //
+    //  fBytesProcessed
+    //      Its a rolling count of the number of bytes processed off this
+    //      input stream.
+    //  fBuffer
+    //      Holds the http header, plus the first part of the actual
+    //      data.  Filled at the time the stream is opened, data goes
+    //      out to user in response to readBytes().
+    //  fBufferPos
+    //      Pointers into fBuffer, showing start and end+1 of content
+    //      that readBytes must return.
+    // -----------------------------------------------------------------------
+
+    XMLSize_t           fBytesProcessed;
+    CharBuffer          fBuffer;
+    char *              fBufferPos;
+    XMLCh *             fContentType;
+    MemoryManager*      fMemoryManager;
+};
+
+
+inline XMLFilePos BinHTTPInputStreamCommon::curPos() const
+{
+    return fBytesProcessed;
+}
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
index 5ac14024f8ad8080ac2860bb851f6349167a1425..c94a7454faa1ac80dfea88b7750aecdef2665d75 100644
--- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
@@ -54,6 +54,7 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
       , fDataAvailable(false)
       , fBufferHeadPtr(fBuffer)
       , fBufferTailPtr(fBuffer)
+      , fContentType(0)
 {
 	// Allocate the curl multi handle
 	fMulti = curl_multi_init();
@@ -70,6 +71,8 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
 	curl_easy_setopt(fEasy, CURLOPT_URL, fURL.get());
 	curl_easy_setopt(fEasy, CURLOPT_WRITEDATA, this);						// Pass this pointer to write function
 	curl_easy_setopt(fEasy, CURLOPT_WRITEFUNCTION, staticWriteCallback);	// Our static write function
+	curl_easy_setopt(fEasy, CURLOPT_WRITEHEADER, this);						// Pass this pointer to header function
+	curl_easy_setopt(fEasy, CURLOPT_HEADERFUNCTION, staticHeaderCallback);	// Our static header function
 	
 	// Add easy handle to the multi stack
 	curl_multi_add_handle(fMulti, fEasy);
@@ -86,6 +89,8 @@ CurlURLInputStream::~CurlURLInputStream()
 	
 	// Cleanup the multi handle
 	curl_multi_cleanup(fMulti);
+
+    if(fContentType) fMemoryManager->deallocate(fContentType);
 }
 
 
@@ -98,7 +103,10 @@ CurlURLInputStream::staticWriteCallback(char *buffer,
 	return ((CurlURLInputStream*)outstream)->writeCallback(buffer, size, nitems);
 }
 
-
+size_t CurlURLInputStream::staticHeaderCallback(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+    return ((CurlURLInputStream*)stream)->headerCallback((char*)ptr, size, nmemb);
+}
 
 size_t
 CurlURLInputStream::writeCallback(char *buffer,
@@ -140,6 +148,28 @@ CurlURLInputStream::writeCallback(char *buffer,
 	return totalConsumed;
 }
 
+size_t CurlURLInputStream::headerCallback(char *buffer, size_t size, size_t nitems)
+{
+    static const char *contentType = "Content-Type: ";
+    static const size_t contentTypeLen = strlen(contentType);
+
+    // Calculate the actual length of the buffer
+    size *= nitems;
+
+    if(size > contentTypeLen && strncmp(buffer, contentType, contentTypeLen) == 0) {
+        size_t valueLen = size - contentTypeLen;
+
+        char* value8 = (char*)fMemoryManager->allocate(valueLen + 1);
+        ArrayJanitor<char> janValue8(value8, fMemoryManager);
+
+        memcpy(value8, buffer + contentTypeLen, valueLen);
+        value8[valueLen] = 0;
+
+        fContentType = XMLString::transcode(value8, fMemoryManager);
+    }
+
+    return size;
+}
 
 XMLSize_t
 CurlURLInputStream::readBytes(XMLByte* const          toFill
@@ -245,6 +275,10 @@ CurlURLInputStream::readBytes(XMLByte* const          toFill
 	return fBytesRead;
 }
 
+const XMLCh *CurlURLInputStream::getContentType() const
+{
+    return fContentType;
+}
 
 XERCES_CPP_NAMESPACE_END
 
diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
index 085b3da9f8dc7051bfcf2f0d49e8f0a71a5830fa..5cb2b978690608a5da911daa7869ad621d086820 100644
--- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
@@ -45,13 +45,14 @@ public :
     CurlURLInputStream(const XMLURL&  urlSource, const XMLNetHTTPInfo* httpInfo=0);
     ~CurlURLInputStream();
 
-    XMLFilePos curPos() const;
-    XMLSize_t readBytes
+    virtual XMLFilePos curPos() const;
+    virtual XMLSize_t readBytes
     (
                 XMLByte* const  toFill
         , const XMLSize_t       maxToRead
     );
 
+    virtual const XMLCh *getContentType() const;
 
 private :
     // -----------------------------------------------------------------------
@@ -67,6 +68,13 @@ private :
     size_t writeCallback(			  char *buffer,
                                       size_t size,
                                       size_t nitems);
+    static size_t staticHeaderCallback(void *ptr,
+                                       size_t size,
+                                       size_t nmemb,
+                                       void *stream);
+    size_t headerCallback(             char *buffer,
+                                       size_t size,
+                                       size_t nitems);
 
 
     // -----------------------------------------------------------------------
@@ -105,6 +113,8 @@ private :
     XMLByte				fBuffer[CURL_MAX_WRITE_SIZE];
     XMLByte*			fBufferHeadPtr;
     XMLByte*			fBufferTailPtr;
+
+    XMLCh *             fContentType;
     
 }; // CurlURLInputStream
 
diff --git a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp
index 3a6180b9cc31ab40b9ce1abda6952e3b8a447913..e0bc3230c0a09fa394838addd7ee49ffaf28fed6 100644
--- a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -157,7 +157,7 @@ URLAccessCFBinInputStream::readBytes(XMLByte* const    toFill
     //	Read the appropriate bytes into the user buffer
     CFRange range = CFRangeMake(mBytesProcessed, n);
     CFDataGetBytes(mDataRef, range, reinterpret_cast<UInt8*>(toFill));
-	
+
     //	Update bytes processed
     mBytesProcessed += n;
 
@@ -165,4 +165,11 @@ URLAccessCFBinInputStream::readBytes(XMLByte* const    toFill
     return n;
 }
 
+const XMLCh* URLAccessCFBinInputStream::getContentType() const
+{
+    // TODO
+    //
+    return 0;
+}
+
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp
index 541d3953435295ad15bb3d21db242237695084cf..686d1c3c9ea032433ac76b7a5cd54fe5952d031f 100644
--- a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -49,13 +49,14 @@ public :
     URLAccessCFBinInputStream(const XMLURL&  urlSource);
     ~URLAccessCFBinInputStream();
 
-    XMLFilePos curPos() const;
-    XMLSize_t readBytes
+    virtual XMLFilePos curPos() const;
+    virtual XMLSize_t readBytes
     (
                 XMLByte* const  toFill
         , const XMLSize_t       maxToRead
     );
 
+    virtual const XMLCh* getContentType() const;
 
 private :
     CFDataRef			mDataRef;
diff --git a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp
index a01f7cc5a41828882131b5efe9da6db9091b49f0..5a58ec890e6ec6f108a5134266bc0d48a3666178 100644
--- a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -23,8 +23,6 @@
 #  include <config.h>
 #endif
 
-#include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
 
 #if HAVE_UNISTD_H
@@ -33,30 +31,24 @@
 #if HAVE_SYS_TYPES_H
 #  include <sys/types.h>
 #endif
-#if HAVE_SYS_SOCKET_H 
+#if HAVE_SYS_SOCKET_H
 #  include <sys/socket.h>
 #endif
-#if HAVE_NETINET_IN_H 
+#if HAVE_NETINET_IN_H
 #  include <netinet/in.h>
 #endif
 #if HAVE_ARPA_INET_H
 #  include <arpa/inet.h>
 #endif
-#if HAVE_NETDB_H 
+#if HAVE_NETDB_H
 #  include <netdb.h>
 #endif
 #include <errno.h>
 
-#include <xercesc/util/XMLNetAccessor.hpp>
 #include <xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp>
 #include <xercesc/util/XMLString.hpp>
 #include <xercesc/util/XMLExceptMsgs.hpp>
 #include <xercesc/util/Janitor.hpp>
-#include <xercesc/util/XMLUniDefs.hpp>
-#include <xercesc/util/TransService.hpp>
-#include <xercesc/util/TranscodingException.hpp>
-#include <xercesc/util/PlatformUtils.hpp>
-#include <xercesc/util/Base64.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -72,7 +64,14 @@ public:
     int* get() const { return fData; }
     int* release() { int* p = fData; fData = 0; return p; }
 
-    void reset(int* p = 0) { if(fData) close(*fData); fData=p; }
+    void reset(int* p = 0)
+    {
+        if(fData) {
+            shutdown(*fData, 2);
+            close(*fData);
+        }
+        fData = p;
+    }
     bool isDataNull() { return (fData == 0); }
 
 private :
@@ -87,545 +86,153 @@ private :
     //  Private data members
     //
     //  fData
-    //      This is the pointer to the socket that must be closed when 
+    //      This is the pointer to the socket that must be closed when
     //      this object is destroyed.
     // -----------------------------------------------------------------------
     int*  fData;
 };
 
 UnixHTTPURLInputStream::UnixHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo/*=0*/)
-      : fSocket(0)
-      , fBytesProcessed(0)
-      , fMemoryManager(urlSource.getMemoryManager())
+    : BinHTTPInputStreamCommon(urlSource.getMemoryManager()),
+      fSocket(0)
 {
-
     //
     //  Constants in ASCII to send/check in the HTTP request/response
     //
 
-    const char GET[] =
-    {
-        chLatin_G, chLatin_E, chLatin_T, chSpace, chNull
-    };
-
-    const char PUT[] =
-    {
-        chLatin_P, chLatin_U, chLatin_T, chSpace, chNull
-    };
-
-    const char POST[] =
-    {
-        chLatin_P, chLatin_O, chLatin_S, chLatin_T, chSpace, chNull
-    };
-
-    const char HTTP[] =
-    {
-        chLatin_H, chLatin_T, chLatin_T, chLatin_P, chNull
-    };
-
-    const char HTTP10[] =
-    {
-        chSpace, chLatin_H, chLatin_T, chLatin_T, chLatin_P, chForwardSlash, chDigit_1, chPeriod, chDigit_0, chCR, chLF, chNull
-    };
-
-    const char CRLF[] =
-    {
-        chCR, chLF, chNull
-    };
-
-    const char CRLF2X[] =
-    {
-        chCR, chLF, chCR, chLF, chNull
-    };
-
-    const char LF2X[] =
-    {
-        chLF, chLF, chNull
-    };
-
-    const char HOST[] =
-    {
-        chLatin_H, chLatin_o, chLatin_s, chLatin_t, chColon, chSpace, chNull
-    };
-
-    const char COLON[] =
-    {
-        chColon, chNull
-    };
-
-    const char AUTHORIZATION[] =
-    {
-        chLatin_A, chLatin_u, chLatin_t, chLatin_h, chLatin_o, chLatin_r, chLatin_i, chLatin_z, chLatin_a, chLatin_t, 
-        chLatin_i, chLatin_o, chLatin_n, chColon, chSpace, chLatin_B, chLatin_a, chLatin_s, chLatin_i, chLatin_c, chSpace, chNull
-    };
-
-    const char resp200 [] =
-    {
-        chSpace, chDigit_2, chDigit_0, chDigit_0, chSpace, chNull
-    };
-
-    const char LOCATION[] =
-    { 
-    	chLatin_L, chLatin_o, chLatin_c, chLatin_a, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, chSpace, chNull 
-   	};
-
-    XMLSize_t charsEaten;
-    XMLSize_t transSize;
-    XMLTransService::Codes failReason;
-    const XMLSize_t blockSize = 2048;
-    const unsigned int bufSize = 5;
-    static XMLCh portBuffer[bufSize+1];
-
-    //
-    // Pull all of the parts of the URL out of the urlSource object
-    //
-
-    const XMLCh*        hostName = urlSource.getHost();
-    const XMLCh*        path = urlSource.getPath();
-    const XMLCh*        fragment = urlSource.getFragment();
-    const XMLCh*        query = urlSource.getQuery();                        
+    static const char *CRLF2X = "\r\n\r\n";
+    static const char *LF2X = "\n\n";
 
     //
     //  Convert the hostName to the platform's code page for gethostbyname and
     //  inet_addr functions.
     //
 
-    char*               hostNameAsCharStar = XMLString::transcode(hostName, fMemoryManager);
-    ArrayJanitor<char>  janHostNameAsCharStar(hostNameAsCharStar, fMemoryManager);
-
-    //
-    //  Convert all the parts of the urlSource object to ASCII so they can be
-    //  sent to the remote host in that format
-    //
-
-    transSize = XMLString::stringLen(hostName)+1;
-    char*               hostNameAsASCII = (char*) fMemoryManager->allocate
-    (
-        (transSize+1) * sizeof(char)
-    );//new char[transSize+1];
-    ArrayJanitor<char>  janHostNameAsASCII(hostNameAsASCII, fMemoryManager);
-
-    XMLTranscoder* trans = XMLPlatformUtils::fgTransService->makeNewTranscoderFor("ISO8859-1", failReason, blockSize, fMemoryManager);
+    MemoryManager *memoryManager = urlSource.getMemoryManager();
 
-    trans->transcodeTo(hostName, transSize, (XMLByte*) hostNameAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-    Janitor<XMLTranscoder> janTranscoder(trans);
-
-    char*               pathAsASCII = 0;
-    ArrayJanitor<char>  janPathAsASCII(pathAsASCII, fMemoryManager);
-    if (path)
-    {
-        transSize = XMLString::stringLen(path)+1;
-        pathAsASCII = (char*) fMemoryManager->allocate
-        (
-            (transSize+1) * sizeof(char)
-        );//new char[transSize+1];
-        janPathAsASCII.reset(pathAsASCII, fMemoryManager);
-        trans->transcodeTo(path, transSize, (XMLByte*) pathAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-    }
-
-    char*               fragmentAsASCII = 0;
-    ArrayJanitor<char>  janfragmentAsASCII(fragmentAsASCII, fMemoryManager);
-    if (fragment)
-    {
-        transSize = XMLString::stringLen(fragment)+1;
-        fragmentAsASCII = (char*) fMemoryManager->allocate
-        (
-            (transSize+1) * sizeof(char)
-        );//new char[transSize+1];
-        janfragmentAsASCII.reset(fragmentAsASCII, fMemoryManager);
-        trans->transcodeTo(fragment, transSize, (XMLByte*) fragmentAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-    }
-
-    char*               queryAsASCII = 0;
-    ArrayJanitor<char>  janqueryAsASCII(queryAsASCII, fMemoryManager);
-    if (query)
-    {
-        transSize = XMLString::stringLen(query)+1;
-        queryAsASCII = (char*) fMemoryManager->allocate
-        (
-            (transSize+1) * sizeof(char)
-        );//new char[transSize+1];
-        janqueryAsASCII.reset(queryAsASCII, fMemoryManager);
-        trans->transcodeTo(query, transSize, (XMLByte*) queryAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-    }
-
-    unsigned short      portNumber = (unsigned short) urlSource.getPortNum();
-
-    //
-    //  Convert port number integer to unicode so we can transcode it to ASCII
-    //
-
-    XMLString::binToText((unsigned int) portNumber, portBuffer, bufSize, 10, fMemoryManager);
-    transSize = XMLString::stringLen(portBuffer)+1;
-    char*               portAsASCII = (char*) fMemoryManager->allocate
-    (
-        (transSize+1) * sizeof(char)
-    );//new char[transSize+1];
-    ArrayJanitor<char>  janportAsASCII(portAsASCII, fMemoryManager);
-    trans->transcodeTo(portBuffer, transSize, (XMLByte*) portAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-
-    const XMLCh* username = urlSource.getUser();
-    const XMLCh* password = urlSource.getPassword();
+    const XMLCh*        hostName = urlSource.getHost();
+    char*               hostNameAsCharStar = XMLString::transcode(hostName, memoryManager);
+    ArrayJanitor<char>  janHostNameAsCharStar(hostNameAsCharStar, memoryManager);
 
-    //
-    // Set up a socket.
-    //
-    bool sawRedirect=false;
-    bool lookUpHost = true;
+    XMLURL url(urlSource);
     int redirectCount = 0;
-    int s;
     SocketJanitor janSock(0);
-    
+
     do {
-        sawRedirect = false;
-		
+        //
+        // Set up a socket.
+        //
+
 #if HAVE_GETADDRINFO
         struct addrinfo hints, *res, *ai;
 
+        CharBuffer portBuffer(10, memoryManager);
+        portBuffer.appendDecimalNumber(url.getPortNum());
+
         memset(&hints, 0, sizeof(struct addrinfo));
         hints.ai_family = PF_UNSPEC;
         hints.ai_socktype = SOCK_STREAM;
-        int n = getaddrinfo(hostNameAsCharStar,portAsASCII,&hints, &res);
+        int n = getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res);
         if(n<0)
         {
             hints.ai_flags = AI_NUMERICHOST;
-            n = getaddrinfo(hostNameAsCharStar,portAsASCII,&hints, &res);
+            n = getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res);
             if(n<0)
-                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager);
+                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager);
         }
-        if (janSock.get())
-            janSock.release();
+        janSock.reset();
         for (ai = res; ai != NULL; ai = ai->ai_next) {
             // Open a socket with the correct address family for this address.
-            s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-            if (s < 0)
+            fSocket = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+            if (fSocket < 0)
                 continue;
-            if (connect(s, ai->ai_addr, ai->ai_addrlen) < 0)
+            if (connect(fSocket, ai->ai_addr, ai->ai_addrlen) < 0)
             {
                 freeaddrinfo(res);
                 ThrowXMLwithMemMgr1(NetAccessorException,
-                         XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager);
+                         XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager);
             }
             break;
         }
         freeaddrinfo(res);
-        if (s < 0)
+        if (fSocket < 0)
         {
             ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager);
+                     XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager);
         }
-        janSock.reset(&s);
+        janSock.reset(&fSocket);
 #else
-        struct hostent*     hostEntPtr = 0;
-        struct sockaddr_in  sa;
+        struct hostent *hostEntPtr = 0;
+        struct sockaddr_in sa;
 
         // Use the hostName in the local code page ....
-        if (lookUpHost &&
-            ((hostEntPtr = gethostbyname(hostNameAsCharStar)) == NULL))
-        {   
+        if((hostEntPtr = gethostbyname(hostNameAsCharStar)) == NULL)
+        {
             unsigned long  numAddress = inet_addr(hostNameAsCharStar);
             if ((hostEntPtr =
-                gethostbyaddr((char *) &numAddress,
-                              sizeof(unsigned long), AF_INET)) == NULL)
+                    gethostbyaddr((char *) &numAddress,
+                        sizeof(unsigned long), AF_INET)) == NULL)
             {
                 ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager);
+                    XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager);
             }
         }
-        lookUpHost = false;
 
         memset(&sa, '\0', sizeof(sockaddr_in));  // iSeries fix ??
         memcpy((void *) &sa.sin_addr,
-               (const void *) hostEntPtr->h_addr, hostEntPtr->h_length);
+            (const void *) hostEntPtr->h_addr, hostEntPtr->h_length);
         sa.sin_family = hostEntPtr->h_addrtype;
-        sa.sin_port = htons(portNumber);
+        sa.sin_port = htons((unsigned short)url.getPortNum());
 
-        if (janSock.get())
-            janSock.release();
-        s = socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0);
-        if (s < 0)
+        janSock.reset();
+        fSocket = socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0);
+        if(fSocket < 0)
         {
             ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager);
+                XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager);
         }
-        janSock.reset(&s);
+        janSock.reset(&fSocket);
 
-        if (connect(s, (struct sockaddr *) &sa, sizeof(sa)) < 0)
+        if(connect(fSocket, (struct sockaddr *) &sa, sizeof(sa)) < 0)
         {
             ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager);
+                XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager);
         }
 #endif
 
-        // The port is open and ready to go.
-        // Build up the http GET command to send to the server.
-        // To do:  We should really support http 1.1.  This implementation
-        //         is weak.
-        if(httpInfo==0)
-           strcpy(fBuffer, GET);
-        else
-            switch(httpInfo->fHTTPMethod)
-            {
-                case XMLNetHTTPInfo::GET:   strcpy(fBuffer, GET); break;
-                case XMLNetHTTPInfo::PUT:   strcpy(fBuffer, PUT); break;
-                case XMLNetHTTPInfo::POST:  strcpy(fBuffer, POST); break;
-            }
-        if (pathAsASCII != 0)
-        {
-             strcat(fBuffer, pathAsASCII);
-        }
-
-        if (queryAsASCII != 0)
-        {
-            size_t n = strlen(fBuffer);
-            fBuffer[n] = chQuestion;
-            fBuffer[n+1] = chNull;
-            strcat(fBuffer, queryAsASCII);
-        }
-
-        if (fragmentAsASCII != 0)
-        {
-            strcat(fBuffer, fragmentAsASCII);
-        }
-        strcat(fBuffer, HTTP10);
-
-        strcat(fBuffer, HOST);
-        strcat(fBuffer, hostNameAsASCII);
-        if (portNumber != 80)
-        {
-            strcat(fBuffer,COLON);
-            strcat(fBuffer,portAsASCII);
-        }
-        strcat(fBuffer, CRLF);
+        int status = sendRequest(url, httpInfo);
 
-        if (username && password)
-        {
-            XMLBuffer userPass(256, fMemoryManager);
-            userPass.append(username);
-            userPass.append(chColon);
-            userPass.append(password);
-            char* userPassAsCharStar = XMLString::transcode(userPass.getRawBuffer(), fMemoryManager);
-            ArrayJanitor<char>  janBuf(userPassAsCharStar, fMemoryManager);
-
-            XMLSize_t len;
-            XMLByte* encodedData = Base64::encode((XMLByte *)userPassAsCharStar, strlen(userPassAsCharStar), &len, fMemoryManager);
-            ArrayJanitor<XMLByte>  janBuf2(encodedData, fMemoryManager);
- 
-            if (encodedData)
-            {
-                // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line
-                XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte));
-                ArrayJanitor<XMLByte>  janBuf(authData, fMemoryManager);
-                XMLByte* cursor=authData;
-                for(XMLSize_t i=0;i<len;i++)
-                    if(encodedData[i]!=chLF)
-                        *cursor++=encodedData[i];
-                *cursor++=0;
-                strcat(fBuffer, AUTHORIZATION);
-                strcat(fBuffer, (char*)authData);
-                strcat(fBuffer, CRLF);
-            }
-        }      
-
-        if(httpInfo!=0 && httpInfo->fHeaders!=0)
-            strncat(fBuffer,httpInfo->fHeaders,httpInfo->fHeadersLen);
-
-        strcat(fBuffer, CRLF);
-
-        // Send the http request
-        int lent = strlen(fBuffer);
-        int  aLent = 0;
-
-        if ((aLent = write(s, (void *) fBuffer, lent)) != lent)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager);
-        }
-
-        if(httpInfo!=0 && httpInfo->fPayload!=0) {
-            int  aLent = 0;
-            if ((aLent = write(s, (void *) httpInfo->fPayload, httpInfo->fPayloadLen)) != httpInfo->fPayloadLen)
-            {
-                ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager);
-            }
-        }
-
-        //
-        // get the response, check the http header for errors from the server.
-        //
-        aLent = read(s, (void *)fBuffer, sizeof(fBuffer)-1);
-        if (aLent <= 0)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
+        if(status == 200) {
+            // HTTP 200 OK response means we're done.
+            // We're done
+            break;
         }
+        // a 3xx response means there was an HTTP redirect
+        else if(status >= 300 && status <= 307) {
+            redirectCount++;
 
-        fBufferEnd = fBuffer+aLent;
-        *fBufferEnd = 0;
+            XMLCh *newURLString = findHeader("Location");
+            ArrayJanitor<XMLCh> janNewURLString(newURLString, memoryManager);
 
-        // Find the break between the returned http header and any data.
-        //  (Delimited by a blank line)
-        // Hang on to any data for use by the first read from this BinHTTPURLInputStream.
-        //
-        fBufferPos = strstr(fBuffer, CRLF2X);
-        if (fBufferPos != 0)
-        {
-            fBufferPos += 4;
-            *(fBufferPos-2) = 0;
-        }
-        else
-        {
-            fBufferPos = strstr(fBuffer, LF2X);
-            if (fBufferPos != 0)
-            {
-                fBufferPos += 2;
-                *(fBufferPos-1) = 0;
+            XMLURL newURL(memoryManager);
+            newURL.setURL(url, newURLString);
+            if(newURL.getProtocol() != XMLURL::HTTP) {
+                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), memoryManager);
             }
-            else
-                fBufferPos = fBufferEnd;
-        }
 
-        // Make sure the header includes an HTTP 200 OK response.
-        //
-        char *p = strstr(fBuffer, HTTP);
-        if (p == 0)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-        }
+            url = newURL;
 
-        p = strchr(p, chSpace);
-        if (p == 0)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
+            janHostNameAsCharStar.release();
+            hostNameAsCharStar = XMLString::transcode(newURL.getHost(), memoryManager);
+            janHostNameAsCharStar.reset(hostNameAsCharStar, memoryManager);
         }
-  
-        if (memcmp(p, resp200, strlen(resp200)))
-        {
-            // a 3xx response means there was a HTTP redirect
-            if (p[1] = chDigit_3) {
-                sawRedirect = true;
-                redirectCount++;
-
-                p = strstr(fBuffer, LOCATION);               
-                if (p == 0)
-                {
-                    ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-                }
-                p += 10; // Length of string "Location: "
-            
-                char* endP = strstr(p, CRLF);
-                if (endP == 0) 
-                {
-                    ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-                }
-                endP[0] = chNull;
-
-                XMLURL newURL(fMemoryManager);                
-                XMLCh* newURLString = XMLString::transcode(p, fMemoryManager);
-                ArrayJanitor<XMLCh>  janNewURLString(newURLString, fMemoryManager);
-
-                // The location string is either of the form:
-                // local.xsd (ie. a relative URL)
-                // http://host/path (ie. an absolute path)
-                char* colonP = strstr(p, COLON);
-                if (colonP == 0) {
-                    // if no colon assume relative url
-                    newURL.setURL(urlSource, newURLString);                   
-                }
-                else {  
-                    // if colon then either a schema is specified or
-                    // a port is specified
-                    newURL.setURL(newURLString);     
-
-                    if (newURL.getProtocol() != XMLURL::HTTP) {                                               
-                        ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), fMemoryManager);                    
-                    }
-
-                    const XMLCh* newHostName = newURL.getHost();
-                    if (XMLString::compareIStringASCII(hostName, newHostName) != 0) {
-                        lookUpHost = true;
-                        janHostNameAsCharStar.release();
-                        hostNameAsCharStar = XMLString::transcode(newHostName, fMemoryManager);
-                        janHostNameAsCharStar.reset(hostNameAsCharStar, fMemoryManager);
-                        
-                        janHostNameAsASCII.release();
-                        transSize = XMLString::stringLen(newHostName)+1;
-                        hostNameAsASCII = (char*) fMemoryManager->allocate
-                            (
-                                (transSize+1) * sizeof(char)
-                            );//new char[transSize+1];
-                        janHostNameAsASCII.reset(hostNameAsASCII, fMemoryManager);
-                        trans->transcodeTo(newHostName, transSize, (unsigned char *) hostNameAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);                        
-                    }
-                }
-                    
-                path = newURL.getPath();   
-                if (path) {
-                    janPathAsASCII.release();
-                    transSize = XMLString::stringLen(path)+1;
-                    pathAsASCII = (char*) fMemoryManager->allocate
-                        (
-                            (transSize+1) * sizeof(char)
-                        );//new char[transSize+1];
-                    janPathAsASCII.reset(pathAsASCII, fMemoryManager);
-                    trans->transcodeTo(path, transSize, (unsigned char *) pathAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-                }                
-                
-                fragment = newURL.getFragment();
-                if (fragment) {
-                    janfragmentAsASCII.release();
-                    transSize = XMLString::stringLen(fragment)+1;
-                    fragmentAsASCII = (char*) fMemoryManager->allocate
-                        (
-                            (transSize+1) * sizeof(char)
-                        );//new char[transSize+1];
-                    janfragmentAsASCII.reset(fragmentAsASCII, fMemoryManager);
-                    trans->transcodeTo(fragment, transSize, (unsigned char *) fragmentAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-                }                
-                               
-                query = newURL.getQuery();                               
-                if (query) {
-                    janqueryAsASCII.release();
-                    transSize = XMLString::stringLen(query)+1;
-                    queryAsASCII = (char*) fMemoryManager->allocate
-                        (
-                            (transSize+1) * sizeof(char)
-                        );//new char[transSize+1];
-                    janqueryAsASCII.reset(queryAsASCII, fMemoryManager);
-                    trans->transcodeTo(query, transSize, (unsigned char *) queryAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);
-                }                
-                                 
-
-                portNumber = (unsigned short) newURL.getPortNum();                                
-                //
-                //  Convert port number integer to unicode so we can transcode it to ASCII
-                //
-
-                janportAsASCII.release();
-                XMLString::binToText((unsigned int) portNumber, portBuffer, bufSize, 10, fMemoryManager);
-                transSize = XMLString::stringLen(portBuffer)+1;
-                portAsASCII = (char*) fMemoryManager->allocate
-                    (
-                        (transSize+1) * sizeof(char)
-                    );//new char[transSize+1];
-                janportAsASCII.reset(portAsASCII, fMemoryManager);
-                trans->transcodeTo(portBuffer, transSize, (unsigned char *) portAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw);                        
-
-                username = newURL.getUser();
-                password = newURL.getPassword();
-            }
-            else {    		
-                // Most likely a 404 Not Found error.
-                //   Should recognize and handle the forwarding responses.
-                //
-                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlSource.getURLText(), fMemoryManager);
-            }
+        else {
+            // Most likely a 404 Not Found error.
+            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, url.getURLText(), memoryManager);
         }
+    } while(redirectCount < 6);
 
-    }
-    while (sawRedirect && redirectCount < 6);
-
-    fSocket = *janSock.release();
+    janSock.release();
 }
 
 
@@ -635,36 +242,23 @@ UnixHTTPURLInputStream::~UnixHTTPURLInputStream()
     close(fSocket);
 }
 
-
-XMLSize_t UnixHTTPURLInputStream::readBytes(XMLByte* const    toFill
-                                      , const XMLSize_t       maxToRead)
+bool UnixHTTPURLInputStream::send(const char *buf, XMLSize_t len)
 {
-    XMLSize_t len = fBufferEnd - fBufferPos;
-    if (len > 0)
-    {
-        // If there's any data left over in the buffer into which we first
-        //   read from the server (to get the http header), return that.
-        if (len > maxToRead)
-            len = maxToRead;
-        memcpy(toFill, fBufferPos, len);
-        fBufferPos += len;
-    }
-    else
-    {
-        // There was no data in the local buffer.
-        // Read some from the socket, straight into our caller's buffer.
-        //
-        int cbRead = read(fSocket, (void *) toFill, maxToRead);
-        if (cbRead == -1)
-        {
-            ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager);
-        }
-        len = cbRead;
+    XMLSize_t done = 0;
+    int ret;
+
+    while(done < len) {
+        ret = ::send(fSocket, buf + done, len - done, 0);
+        if(ret == -1) return false;
+        done += ret;
     }
 
-    fBytesProcessed += len;
-    return len;
+    return true;
 }
 
-XERCES_CPP_NAMESPACE_END
+int UnixHTTPURLInputStream::receive(char *buf, XMLSize_t len)
+{
+    return ::recv(fSocket, buf, len, 0);
+}
 
+XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp
index b5007ad4e0cdda8f9241a88b3ae828bbc8b69218..859a395dbe695548455f8830e9c216fa84d6f5df 100644
--- a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,11 +22,7 @@
 #if !defined(XERCESC_INCLUDE_GUARD_UNIXHTTPURLINPUTSTREAM_HPP)
 #define XERCESC_INCLUDE_GUARD_UNIXHTTPURLINPUTSTREAM_HPP
 
-
-#include <xercesc/util/XMLURL.hpp>
-#include <xercesc/util/XMLExceptMsgs.hpp>
-#include <xercesc/util/BinInputStream.hpp>
-#include <xercesc/util/XMLNetAccessor.hpp>
+#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -34,20 +30,14 @@ XERCES_CPP_NAMESPACE_BEGIN
 // This class implements the BinInputStream interface specified by the XML
 // parser.
 //
-
-class XMLUTIL_EXPORT UnixHTTPURLInputStream : public BinInputStream
+class XMLUTIL_EXPORT UnixHTTPURLInputStream : public BinHTTPInputStreamCommon
 {
 public :
     UnixHTTPURLInputStream(const XMLURL&  urlSource, const XMLNetHTTPInfo* httpInfo=0);
     ~UnixHTTPURLInputStream();
 
-    XMLFilePos curPos() const;
-    XMLSize_t readBytes
-    (
-                XMLByte* const  toFill
-        , const XMLSize_t    maxToRead
-    );
-
+    virtual bool send(const char *buf, XMLSize_t len);
+    virtual int receive(char *buf, XMLSize_t len);
 
 private :
     // -----------------------------------------------------------------------
@@ -61,31 +51,10 @@ private :
     //
     //  fSocket
     //      The socket representing the connection to the remote file.
-    //  fBytesProcessed
-    //      Its a rolling count of the number of bytes processed off this
-    //      input stream.
-    //  fBuffer
-    //      Holds the http header, plus the first part of the actual
-    //      data.  Filled at the time the stream is opened, data goes
-    //      out to user in response to readBytes().
-    //  fBufferPos, fBufferEnd
-    //      Pointers into fBuffer, showing start and end+1 of content
-    //      that readBytes must return.
     // -----------------------------------------------------------------------
 
     int                 fSocket;
-    unsigned int        fBytesProcessed;
-    char                fBuffer[4000];
-    char *              fBufferEnd;
-    char *              fBufferPos;
-    MemoryManager*      fMemoryManager;
-}; // UnixHTTPURLInputStream
-
-
-inline XMLFilePos UnixHTTPURLInputStream::curPos() const
-{
-    return fBytesProcessed;
-}
+};
 
 XERCES_CPP_NAMESPACE_END
 
diff --git a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
index 24b4097b736761c4f5d1e504d79f03cc3f2706a1..0d48cdbdb6dc9f20f5cc05cbec3e87789a79cec1 100644
--- a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp
@@ -19,7 +19,7 @@
  * $Id$
  */
 
-#include <winsock2.h>
+
 #include <windows.h>
 
 #ifdef WITH_IPV6
@@ -36,7 +36,6 @@
 #include <xercesc/util/XMLExceptMsgs.hpp>
 #include <xercesc/util/Janitor.hpp>
 #include <xercesc/util/XMLUniDefs.hpp>
-#include <xercesc/util/Base64.hpp>
 #include <xercesc/util/Mutexes.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
@@ -153,7 +152,14 @@ public:
     SOCKET* get() const { return fData; }
     SOCKET* release() {	SOCKET* p = fData; fData = 0; return p; }
 
-    void reset(SOCKET* p = 0) { if(fData) wrap_closesocket(*fData); fData=p; }
+    void reset(SOCKET* p = 0)
+    {
+        if(fData) {
+            wrap_shutdown(*fData, SD_BOTH);
+            wrap_closesocket(*fData);
+        }
+        fData = p;
+    }
     bool isDataNull() { return (fData == 0); }
 
 private :
@@ -283,11 +289,12 @@ void BinHTTPURLInputStream::Cleanup()
     }
 }
 
-
 BinHTTPURLInputStream::BinHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo /*=0*/)
-      : fSocketHandle(0)
-      , fBytesProcessed(0)
+      : BinHTTPInputStreamCommon(urlSource.getMemoryManager())
+      , fSocketHandle(0)
 {
+    MemoryManager *memoryManager = urlSource.getMemoryManager();
+
     // Check if we need to load the winsock library. While locking the
     // mutex every time may be somewhat slow, we don't care in this
     // particular case since the next operation will most likely be
@@ -297,434 +304,181 @@ BinHTTPURLInputStream::BinHTTPURLInputStream(const XMLURL& urlSource, const XMLN
         XMLMutexLock lock(XMLPlatformUtils::fgAtomicMutex);
 
         if (!fInitialized)
-          Initialize(urlSource.getMemoryManager());
+          Initialize(memoryManager);
     }
 
-    fMemoryManager = urlSource.getMemoryManager();
     //
-    // Pull all of the parts of the URL out of th urlSource object, and transcode them
-    //   and transcode them back to ASCII.
+    //  Constants in ASCII to send/check in the HTTP request/response
     //
-    const XMLCh*        hostName = urlSource.getHost();
-    char*               hostNameAsCharStar = XMLString::transcode(hostName, fMemoryManager);
-    ArrayJanitor<char>  janHostName(hostNameAsCharStar, fMemoryManager);
-
-    const XMLCh*        path = urlSource.getPath();
-    char*               pathAsCharStar = XMLString::transcode(path, fMemoryManager);
-    ArrayJanitor<char>  janPath(pathAsCharStar, fMemoryManager);
-
-    const XMLCh*        fragment = urlSource.getFragment();
-    char*               fragmentAsCharStar = 0;
-    if (fragment)
-        fragmentAsCharStar = XMLString::transcode(fragment, fMemoryManager);
-    ArrayJanitor<char>  janFragment(fragmentAsCharStar, fMemoryManager);
 
-    const XMLCh*        query = urlSource.getQuery();
-    char*               queryAsCharStar = 0;
-    if (query)
-        queryAsCharStar = XMLString::transcode(query, fMemoryManager);
-    ArrayJanitor<char>  janQuery(queryAsCharStar, fMemoryManager);
+    static const char *CRLF2X = "\r\n\r\n";
+    static const char *LF2X = "\n\n";
 
-    unsigned short      portNumber = (unsigned short) urlSource.getPortNum();
-
-    const XMLCh* username = urlSource.getUser();
-    const XMLCh* password = urlSource.getPassword();
     //
-    // Set up a socket.
+    // Pull all of the parts of the URL out of th urlSource object, and transcode them
+    //   and transcode them back to ASCII.
     //
-    bool sawRedirect;
+    const XMLCh*        hostName = urlSource.getHost();
+    char*               hostNameAsCharStar = XMLString::transcode(hostName, memoryManager);
+    ArrayJanitor<char>  janHostNameAsCharStar(hostNameAsCharStar, memoryManager);
+
+    XMLURL url(urlSource);
     int redirectCount = 0;
-    SOCKET s;
     SocketJanitor janSock(0);
-    bool lookUpHost = true;
 
     do {
+        //
+        // Set up a socket.
+        //
 
 #ifdef WITH_IPV6
 		struct addrinfo hints, *res, *ai;
 
+        CharBuffer portBuffer(10, memoryManager);
+        portBuffer.appendDecimalNumber(url.getPortNum());
+
 		memset(&hints, 0, sizeof(struct addrinfo));
 		hints.ai_family = PF_UNSPEC;
 		hints.ai_socktype = SOCK_STREAM;
-		char tempbuf[10];
-		XMLString::binToText(portNumber, tempbuf, 10, 10);
-		int n = wrap_getaddrinfo(hostNameAsCharStar,(const char*)tempbuf,&hints, &res);
+		int n = wrap_getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res);
 		if(n<0)
 		{
 			hints.ai_flags = AI_NUMERICHOST;
 			n = wrap_getaddrinfo(hostNameAsCharStar,(const char*)tempbuf,&hints, &res);
 			if(n<0)
-				ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager);
+				ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager);
 		}
-		if (janSock.get())
-			janSock.release();
+        janSock.reset();
 		for (ai = res; ai != NULL; ai = ai->ai_next) {
 			// Open a socket with the correct address family for this address.
-			s = wrap_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-			if (s == INVALID_SOCKET)
+			fSocket = wrap_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+			if (fSocket == INVALID_SOCKET)
 				continue;
-			if (wrap_connect(s, ai->ai_addr, (int)ai->ai_addrlen) == SOCKET_ERROR)
+			if (wrap_connect(fSocket, ai->ai_addr, (int)ai->ai_addrlen) == SOCKET_ERROR)
 			{
 				wrap_freeaddrinfo(res);
 				// Call WSAGetLastError() to get the error number.
 				ThrowXMLwithMemMgr1(NetAccessorException,
-						 XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager);
+						 XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager);
 			}
 			break;
 		}
 		wrap_freeaddrinfo(res);
-		if (s == INVALID_SOCKET)
+		if (fSocket == INVALID_SOCKET)
 		{
 			// Call WSAGetLastError() to get the error number.
 			ThrowXMLwithMemMgr1(NetAccessorException,
-					 XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager);
+					 XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager);
 		}
-		janSock.reset(&s);
+		janSock.reset(&fSocket);
 #else
-		struct hostent*     hostEntPtr = 0;
-		struct sockaddr_in  sa;
+        struct hostent*     hostEntPtr = 0;
+        struct sockaddr_in  sa;
+
 
-        if (lookUpHost &&
-            ((hostEntPtr = wrap_gethostbyname(hostNameAsCharStar)) == NULL))
+        if ((hostEntPtr = wrap_gethostbyname(hostNameAsCharStar)) == NULL)
         {
             unsigned long  numAddress = wrap_inet_addr(hostNameAsCharStar);
             if (numAddress == INADDR_NONE)
             {
                 // Call WSAGetLastError() to get the error number.
                 ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager);
+                    XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager);
             }
             if ((hostEntPtr =
-                wrap_gethostbyaddr((const char *) &numAddress,
-                              sizeof(unsigned long), AF_INET)) == NULL)
+                    wrap_gethostbyaddr((const char *) &numAddress,
+                        sizeof(unsigned long), AF_INET)) == NULL)
             {
                 // Call WSAGetLastError() to get the error number.
                 ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager);
+                    XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager);
             }
         }
-        lookUpHost = false;
 
         memcpy((void *) &sa.sin_addr,
-           (const void *) hostEntPtr->h_addr, hostEntPtr->h_length);
-
+            (const void *) hostEntPtr->h_addr, hostEntPtr->h_length);
         sa.sin_family = hostEntPtr->h_addrtype;
-        sa.sin_port = wrap_htons(portNumber);
+        sa.sin_port = wrap_htons((unsigned short)url.getPortNum());
 
-        if (janSock.get())
-            janSock.release();
-        s = wrap_socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0);
-        if (s == INVALID_SOCKET)
+        janSock.reset();
+        fSocketHandle = wrap_socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0);
+        if (fSocketHandle == INVALID_SOCKET)
         {
             // Call WSAGetLastError() to get the error number.
             ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager);
+                XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager);
         }
-        janSock.reset(&s);
+        janSock.reset(&fSocketHandle);
 
-        if (wrap_connect(s, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR)
+        if (wrap_connect(fSocketHandle, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR)
         {
             // Call WSAGetLastError() to get the error number.
             ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager);
+                XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager);
         }
 
 #endif
 
-        // Set a flag so we know that the headers have not been read yet.
-        bool fHeaderRead = false;
-        sawRedirect = false;
-
-        // The port is open and ready to go.
-        // Build up the http GET command to send to the server.
-        // To do:  We should really support http 1.1.  This implementation
-        //         is weak.
+        int status = sendRequest(url, httpInfo);
 
-        memset(fBuffer, 0, sizeof(fBuffer));
-
-        if(httpInfo==0)
-            strcpy(fBuffer, "GET ");
-        else {
-            switch(httpInfo->fHTTPMethod) {
-            case XMLNetHTTPInfo::GET:   strcpy(fBuffer, "GET "); break;
-            case XMLNetHTTPInfo::PUT:   strcpy(fBuffer, "PUT "); break;
-            case XMLNetHTTPInfo::POST:  strcpy(fBuffer, "POST "); break;
-            }
+        if(status == 200) {
+            // HTTP 200 OK response means we're done.
+            // We're done
+            break;
         }
-        strcat(fBuffer, pathAsCharStar);
+        // a 3xx response means there was an HTTP redirect
+        else if(status >= 300 && status <= 307) {
+            redirectCount++;
 
-        if (queryAsCharStar != 0)
-        {
-            // Tack on a ? before the fragment
-            strcat(fBuffer,"?");
-            strcat(fBuffer, queryAsCharStar);
-        }
+            XMLCh *newURLString = findHeader("Location");
+            ArrayJanitor<XMLCh> janNewURLString(newURLString, memoryManager);
 
-        if (fragmentAsCharStar != 0)
-        {
-            strcat(fBuffer, fragmentAsCharStar);
-        }
-        strcat(fBuffer, " HTTP/1.0\r\n");
-
-
-        strcat(fBuffer, "Host: ");
-        strcat(fBuffer, hostNameAsCharStar);
-        if (portNumber != 80)
-        {
-            strcat(fBuffer, ":");
-            size_t i = strlen(fBuffer);
-            XMLString::binToText(portNumber, fBuffer+i, 10, 10);
-        }
-        strcat(fBuffer, "\r\n");
-
-        if (username && password)
-        {
-            XMLBuffer userPass(256, fMemoryManager);
-            userPass.append(username);
-            userPass.append(chColon);
-            userPass.append(password);
-            char* userPassAsCharStar = XMLString::transcode(userPass.getRawBuffer(), fMemoryManager);
-            ArrayJanitor<char>  janBuf(userPassAsCharStar, fMemoryManager);
-            XMLSize_t len;
-            XMLByte* encodedData = Base64::encode((XMLByte *)userPassAsCharStar, strlen(userPassAsCharStar), &len, fMemoryManager);
-            ArrayJanitor<XMLByte>  janBuf2(encodedData, fMemoryManager);
-
-            if (encodedData)
-            {
-                // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line
-                XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte));
-                ArrayJanitor<XMLByte>  janBuf(authData, fMemoryManager);
-                XMLByte* cursor=authData;
-                for(XMLSize_t i=0;i<len;i++)
-                    if(encodedData[i]!=chLF)
-                        *cursor++=encodedData[i];
-                *cursor++=0;
-                strcat(fBuffer, "Authorization: Basic ");
-                strcat(fBuffer, (char*)authData);
-                strcat(fBuffer, "\r\n");
+            XMLURL newURL(memoryManager);
+            newURL.setURL(url, newURLString);
+            if(newURL.getProtocol() != XMLURL::HTTP) {
+                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), memoryManager);
             }
-        }
-
-        if(httpInfo!=0 && httpInfo->fHeaders!=0)
-            strncat(fBuffer,httpInfo->fHeaders,httpInfo->fHeadersLen);
 
-        strcat(fBuffer, "\r\n");
+            url = newURL;
 
-        // Send the http request
-        int lent = (int)strlen(fBuffer);
-        int  aLent = 0;
-        if ((aLent = wrap_send(s, fBuffer, lent, 0)) != lent)
-        {
-            // Call WSAGetLastError() to get the error number.
-            ThrowXMLwithMemMgr1(NetAccessorException,
-                 XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager);
+            janHostNameAsCharStar.release();
+            hostNameAsCharStar = XMLString::transcode(newURL.getHost(), memoryManager);
+            janHostNameAsCharStar.reset(hostNameAsCharStar, memoryManager);
         }
-
-        if(httpInfo!=0 && httpInfo->fPayload!=0) {
-            if ((aLent = wrap_send(s, httpInfo->fPayload, httpInfo->fPayloadLen, 0)) != httpInfo->fPayloadLen)
-            {
-                // Call WSAGetLastError() to get the error number.
-                ThrowXMLwithMemMgr1(NetAccessorException,
-                     XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager);
-            }
-        }
-
-        // get the response, check the http header for errors from the server.
-        //
-        memset(fBuffer, 0, sizeof(fBuffer));
-        aLent = wrap_recv(s, fBuffer, sizeof(fBuffer)-1, 0);
-        if (aLent == SOCKET_ERROR || aLent == 0)
-        {
-            // Call WSAGetLastError() to get the error number.
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-        }
-
-        fBufferEnd = fBuffer+aLent;
-        *fBufferEnd = 0;
-
-        do {
-            // Find the break between the returned http header and any data.
-            //  (Delimited by a blank line)
-            // Hang on to any data for use by the first read from this BinHTTPURLInputStream.
-            //
-            fBufferPos = strstr(fBuffer, "\r\n\r\n");
-            if (fBufferPos != 0)
-            {
-                fBufferPos += 4;
-                *(fBufferPos-2) = 0;
-                fHeaderRead = true;
-            }
-            else
-            {
-                fBufferPos = strstr(fBuffer, "\n\n");
-                if (fBufferPos != 0)
-                {
-                    fBufferPos += 2;
-                    *(fBufferPos-1) = 0;
-                    fHeaderRead = true;
-                }
-                else
-                {
-                    //
-                    // Header is not yet read, do another recv() to get more data...
-                    aLent = wrap_recv(s, fBufferEnd, (int)((sizeof(fBuffer) - 1) - (fBufferEnd - fBuffer)), 0);
-                    if (aLent == SOCKET_ERROR || aLent == 0)
-                    {
-                        // Call WSAGetLastError() to get the error number.
-                        ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-                    }
-                    fBufferEnd = fBufferEnd + aLent;
-                    *fBufferEnd = 0;
-                }
-            }
-        } while(fHeaderRead == false);
-
-        // Make sure the header includes an HTTP 200 OK response.
-        //
-        char *p = strstr(fBuffer, "HTTP");
-        if (p == 0)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-        }
-
-        p = strchr(p, ' ');
-        if (p == 0)
-        {
-            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-        }
-
-        int httpResponse = atoi(p);
-        if (httpResponse != 200)
-        {
-            // a 3xx response means there was a HTTP redirect
-            if (httpResponse >= 300 && httpResponse < 400) {
-                sawRedirect = true;
-                redirectCount++;
-
-                p = strstr(fBuffer, "Location: ");
-                if (p == 0)
-                {
-                    ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-                }
-                p += 10; // Length of string "Location: "
-
-                char* endP = strstr(p, "\r\n");
-                if (endP == 0)
-                {
-                    ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager);
-                }
-                endP[0] = chNull;
-
-                XMLURL newURL(fMemoryManager);
-                XMLCh* newURLString = XMLString::transcode(p, fMemoryManager);
-                ArrayJanitor<XMLCh>  janNewURLString(newURLString, fMemoryManager);
-
-                // The location string is either of the form:
-                // local.xsd (ie. a relative URL)
-                // http://host/path (ie. an absolute path)
-                char* colonP = strstr(p, ":");
-                if (colonP == 0) {
-                    // if no colon assume relative url
-                    newURL.setURL(urlSource, newURLString);
-                }
-                else {
-                    // if colon then either a schema is specified or
-                    // a port is specified
-                    newURL.setURL(newURLString);
-
-                    if (newURL.getProtocol() != XMLURL::HTTP) {
-                        ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), fMemoryManager);
-                    }
-
-                    const XMLCh* newHostName = newURL.getHost();
-                    if (XMLString::compareIStringASCII(hostName, newHostName) != 0) {
-                        lookUpHost = true;
-                        janHostName.release();
-                        hostNameAsCharStar = XMLString::transcode(newHostName, fMemoryManager);
-                        janHostName.reset(hostNameAsCharStar);
-                    }
-                }
-
-                path = newURL.getPath();
-                janPath.release();
-                pathAsCharStar = XMLString::transcode(path, fMemoryManager);
-                janPath.reset(pathAsCharStar);
-
-                fragment = newURL.getFragment();
-                janFragment.release();
-                fragmentAsCharStar = 0;
-                if (fragment)
-                    fragmentAsCharStar = XMLString::transcode(fragment, fMemoryManager);
-                janFragment.reset(fragmentAsCharStar);
-
-                query = newURL.getQuery();
-                janQuery.release();
-                queryAsCharStar = 0;
-                if (query)
-                    queryAsCharStar = XMLString::transcode(query, fMemoryManager);
-                janQuery.reset(queryAsCharStar);
-
-                portNumber = (unsigned short) newURL.getPortNum();
-
-                username = newURL.getUser();
-                password = newURL.getPassword();
-            }
-            else {
-                // Most likely a 404 Not Found error.
-                //   Should recognize and handle the forwarding responses.
-                //
-                ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlSource.getURLText(), fMemoryManager);
-            }
+        else {
+            // Most likely a 404 Not Found error.
+            ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, url.getURLText(), memoryManager);
         }
+    } while(redirectCount < 6);
 
-    }
-    while(sawRedirect && redirectCount <6);
-
-    fSocketHandle = (unsigned int) *janSock.release();
+    janSock.release();
 }
 
-
-
 BinHTTPURLInputStream::~BinHTTPURLInputStream()
 {
     wrap_shutdown(fSocketHandle, SD_BOTH);
     wrap_closesocket(fSocketHandle);
 }
 
-
-//
-//  readBytes
-//
-XMLSize_t BinHTTPURLInputStream::readBytes(XMLByte* const    toFill
-                                    , const XMLSize_t        maxToRead)
+bool BinHTTPURLInputStream::send(const char *buf, XMLSize_t len)
 {
-    XMLSize_t len = fBufferEnd - fBufferPos;
-    if (len > 0)
-    {
-        // If there's any data left over in the buffer into which we first
-        //   read from the server (to get the http header), return that.
-        if (len > maxToRead)
-            len = maxToRead;
-        memcpy(toFill, fBufferPos, len);
-        fBufferPos += len;
-    }
-    else
-    {
-        // There was no data in the local buffer.
-        // Read some from the socket, straight into our caller's buffer.
-        //
-        int iLen = wrap_recv((SOCKET) fSocketHandle, (char *) toFill, (int)maxToRead, 0);
-        if (iLen == SOCKET_ERROR)
-        {
-            // Call WSAGetLastError() to get the error number.
-            ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager);
-        }
-		len = iLen;
+    XMLSize_t done = 0;
+    int ret;
+
+    while(done < len) {
+        ret = wrap_send(fSocketHandle, buf + done, len - done, 0);
+        if(ret == SOCKET_ERROR) return false;
+        done += ret;
     }
 
-    fBytesProcessed += len;
-    return len;
+    return true;
 }
 
+int BinHTTPURLInputStream::receive(char *buf, XMLSize_t len)
+{
+    int iLen = wrap_recv(fSocketHandle, buf, len, 0);
+    if (iLen == SOCKET_ERROR) return -1;
+    return iLen;
+}
 
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp
index a166a2a23e06b48172a187f63902a1a6ceca5867..0d325aba48cd1afff9bb5722546589d6e8053cfa 100644
--- a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp
@@ -23,40 +23,34 @@
 #define XERCESC_INCLUDE_GUARD_BINHTTPURLINPUTSTREAM_HPP
 
 
-#include <xercesc/util/XMLURL.hpp>
-#include <xercesc/util/XMLExceptMsgs.hpp>
-#include <xercesc/util/BinInputStream.hpp>
-#include <xercesc/util/XMLNetAccessor.hpp>
+#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp>
+
+#include <winsock2.h>
+
+XERCES_CPP_NAMESPACE_BEGIN
 
 //
 // This class implements the BinInputStream interface specified by the XML
 // parser.
 //
-
-XERCES_CPP_NAMESPACE_BEGIN
-
-class XMLUTIL_EXPORT BinHTTPURLInputStream : public BinInputStream
+class XMLUTIL_EXPORT BinHTTPURLInputStream : public BinHTTPInputStreamCommon
 {
 public :
     BinHTTPURLInputStream(const XMLURL&  urlSource, const XMLNetHTTPInfo* httpInfo=0);
     ~BinHTTPURLInputStream();
 
-    XMLFilePos curPos() const;
-    XMLSize_t readBytes
-    (
-                XMLByte* const  toFill
-        , const XMLSize_t       maxToRead
-    );
+    virtual bool send(const char *buf, XMLSize_t len);
+    virtual int receive(char *buf, XMLSize_t len);
 
 	static void Cleanup();
 
-
 private :
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators
     // -----------------------------------------------------------------------
     BinHTTPURLInputStream(const BinHTTPURLInputStream&);
     BinHTTPURLInputStream& operator=(const BinHTTPURLInputStream&);
+
     // -----------------------------------------------------------------------
     //  Private data members
     //
@@ -64,35 +58,14 @@ private :
     //      The socket representing the connection to the remote file.
     //      We deliberately did not define the type to be SOCKET, so as to
     //      avoid bringing in any Windows header into this file.
-    //  fBytesProcessed
-    //      Its a rolling count of the number of bytes processed off this
-    //      input stream.
-    //  fBuffer
-    //      Holds the http header, plus the first part of the actual
-    //      data.  Filled at the time the stream is opened, data goes
-    //      out to user in response to readBytes().
-    //  fBufferPos, fBufferEnd
-    //      Pointers into fBuffer, showing start and end+1 of content
-    //      that readBytes must return.
     // -----------------------------------------------------------------------
-    MemoryManager*      fMemoryManager;
-    unsigned int        fSocketHandle;
-    XMLSize_t           fBytesProcessed;
-    char                fBuffer[4000];
-    char *              fBufferEnd;
-    char *              fBufferPos;
+    SOCKET              fSocketHandle;
+
     static bool         fInitialized;
 
     static void Initialize(MemoryManager* const manager  = XMLPlatformUtils::fgMemoryManager);
-
 };
 
-
-inline XMLFilePos BinHTTPURLInputStream::curPos() const
-{
-    return fBytesProcessed;
-}
-
 XERCES_CPP_NAMESPACE_END
 
 #endif // BINHTTPURLINPUTSTREAM_HPP
diff --git a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp
index 0ee6a17701622bd45f0762a63c5aa0b953998e62..acef5241474757bbd9821936c22f5e5f7d352e7f 100644
--- a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -253,4 +253,11 @@ XMLSize_t BinURLInputStream::readBytes(XMLByte* const  toFill
     return retval;
 }
 
+const XMLCh* BinURLInputStream::getContentType() const
+{
+    // TODO
+    //
+    return 0;
+}
+
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp
index eecaf7535281fd39ee56b15535d0889dd77f3105..a35f5b0ad3ffbab37e20bb3ea2cb64c3fedc39c3 100644
--- a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -48,12 +48,14 @@ public :
     BinURLInputStream(const XMLURL&  urlSource);
     ~BinURLInputStream();
 
-    XMLFilePos curPos() const;
-    XMLSize_t readBytes
+    virtual XMLFilePos curPos() const;
+    virtual XMLSize_t readBytes
     (
                 XMLByte* const  toFill
         , const XMLSize_t    maxToRead
     );
+    virtual const XMLCh* getContentType() const;
+
     void reset();
     unsigned int bytesAvail() const;
 
@@ -63,7 +65,7 @@ private :
     //  Unimplemented constructors and operators
     // -----------------------------------------------------------------------
     BinURLInputStream(const BinURLInputStream&);
-    BinURLInputStream& operator=(const BinURLInputStream&); 
+    BinURLInputStream& operator=(const BinURLInputStream&);
 
     // -----------------------------------------------------------------------
     //  Private data members
diff --git a/src/xercesc/util/XMLURL.cpp b/src/xercesc/util/XMLURL.cpp
index 0b79cc18e8e0d86fd61f73dc1943b986f908f3f5..8ec3d6b6ea6465e37d56da5a7f8986e949baa7dc 100644
--- a/src/xercesc/util/XMLURL.cpp
+++ b/src/xercesc/util/XMLURL.cpp
@@ -1130,10 +1130,13 @@ void XMLURL::parse(const XMLCh* const urlText)
     }
 
     // If we are at the end, then we are done now
-    if (!*srcPtr)
-	{
+    if (!*srcPtr) {
+        if(fHost) {
+            static const XMLCh slash[] = { chForwardSlash, chNull };
+            fPath = XMLString::replicate(slash, fMemoryManager);
+        }
         return;
-	}
+    }
 
     //
     //  Next is the path part. It can be absolute, i.e. starting with a
@@ -1404,10 +1407,13 @@ bool XMLURL::parse(const XMLCh* const urlText, XMLURL& xmlURL)
     }
 
     // If we are at the end, then we are done now
-    if (!*srcPtr)
-	{
+    if (!*srcPtr) {
+        if(xmlURL.fHost) {
+            static const XMLCh slash[] = { chForwardSlash, chNull };
+            xmlURL.fPath = XMLString::replicate(slash, xmlURL.fMemoryManager);
+        }
         return true;
-	}
+    }
 
     //
     //  Next is the path part. It can be absolute, i.e. starting with a