diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp
index 29cb7b7ca83186a3b7deb9ed6e3e2636a2d91125..cdd931be1e678f265dda0d05f546bef53a4198e9 100644
--- a/src/xercesc/internal/IGXMLScanner2.cpp
+++ b/src/xercesc/internal/IGXMLScanner2.cpp
@@ -1697,7 +1697,8 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
 
                             // normalize the attribute according to schema whitespace facet
                             DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME);
-                            ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true);
+                            normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, valuePtr, fXsiType);
+                            ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, true);
                             if (!fXsiType.isEmpty()) {
                                 int colonPos = -1;
                                 unsigned int uriId = resolveQName (
@@ -1712,16 +1713,18 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
                         else if (XMLString::equals(suffPtr, SchemaSymbols::fgATT_NILL))
                         {
                             // normalize the attribute according to schema whitespace facet
-                            XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer();
+                            XMLBufBid bbXsi(&fBufMgr);
+                            XMLBuffer& fXsiNil = bbXsi.getBuffer();
+
                             DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN);
-                            ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true);
+                            normalizeAttRawValue(SchemaSymbols::fgATT_NILL, valuePtr, fXsiNil);
+                            ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true);
                             if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_TRUE))
                                 ((SchemaValidator*)fValidator)->setNillable(true);
                             else if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_FALSE))
                                 ((SchemaValidator*)fValidator)->setNillable(false);
                             else
                                 emitError(XMLErrs::InvalidAttValue, fXsiNil.getRawBuffer(), valuePtr);
-                            fBufMgr.releaseBuffer(fXsiNil);
                         }
                     }
                 }
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index f16414e8eb3e82dbaa0c968ea2823c9ba861a31e..35c089b6e981d333bc0ffad9fa2f3ae9a402500e 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -3524,7 +3524,8 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
 
                         // normalize the attribute according to schema whitespace facet
                         DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME);
-                        ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true);
+                        normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, valuePtr, fXsiType);
+                        ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, true);
                         if (!fXsiType.isEmpty()) {
                             int colonPos = -1;
                             unsigned int uriId = resolveQName (
@@ -3539,16 +3540,18 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount)
                     else if (XMLString::equals(suffPtr, SchemaSymbols::fgATT_NILL))
                     {
                         // normalize the attribute according to schema whitespace facet
-                        XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer();
+                        XMLBufBid bbXsi(&fBufMgr);
+                        XMLBuffer& fXsiNil = bbXsi.getBuffer();
+
                         DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN);
-                        ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true);
+                        normalizeAttRawValue(SchemaSymbols::fgATT_NILL, valuePtr, fXsiNil);
+                        ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true);
                         if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_TRUE))
                             ((SchemaValidator*)fValidator)->setNillable(true);
                         else if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_FALSE))
                             ((SchemaValidator*)fValidator)->setNillable(false);
                         else
                             emitError(XMLErrs::InvalidAttValue, fXsiNil.getRawBuffer(), valuePtr);
-                        fBufMgr.releaseBuffer(fXsiNil);
                     }
                 }
             }
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df5e3ff9419cfb8608419cdd889ea1447226b658
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<p xsi:type="&#10;&#9;Person&#13;" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+   xsi:noNamespaceSchemaLocation="test.xsd">
+   <name>John Doe</name>
+</p>
+
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..24b5b5578716426d531d325555b39afa93f25a85
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	<xsd:complexType name="Person">
+		<xsd:sequence>
+			<xsd:element name="name"/>
+		</xsd:sequence>
+	</xsd:complexType>
+</xsd:schema>
+
diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet
index beb9616a95a943d90d260d1f4726d5e3ce676957..88e46808299b309a284d1ab0898541108478c950 100644
--- a/tests/src/XSTSHarness/regression/Xerces.testSet
+++ b/tests/src/XSTSHarness/regression/Xerces.testSet
@@ -826,4 +826,20 @@
       <current status="accepted" date="2010-08-09"/>
     </instanceTest>
   </testGroup>
+  <testGroup name="XERCESC-1945">
+    <annotation>
+      <documentation>Whitespace in xsi:type</documentation>
+    </annotation>
+    <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1945"/>
+    <schemaTest name="XERCESC-1945-1">
+      <schemaDocument xlink:href="./XERCESC-1945/test.xsd"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2010-09-28"/>
+    </schemaTest>
+    <instanceTest name="XERCESC-1945-2">
+      <instanceDocument xlink:href="./XERCESC-1945/test.xml"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2010-09-28"/>
+    </instanceTest>
+  </testGroup>
 </testSet>