diff --git a/samples/PSVIWriter/PSVIWriterHandlers.cpp b/samples/PSVIWriter/PSVIWriterHandlers.cpp
index 5503621b6a380afb225d4b290590b4c5929ac218..115fe3c3ae512cab04f512e0d6a06d010bbe0c10 100644
--- a/samples/PSVIWriter/PSVIWriterHandlers.cpp
+++ b/samples/PSVIWriter/PSVIWriterHandlers.cpp
@@ -124,8 +124,8 @@ PSVIWriterHandlers::PSVIWriterHandlers(XMLFormatter* outputFormatter, XMLFormatt
 	fErrorFormatter = (errorFormatter != NULL) ? errorFormatter : outputFormatter;
 	
 	fAttrList = new StringList(8, false);
-	fTempResult = new XMLCh[50];
-	fIndentChars = new XMLCh[100];
+	fTempResult = new XMLCh[51];
+    fIndentChars = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate(101*sizeof(XMLCh));
 	fBaseUri = 0;
 	
 	XMLString::copyString(fIndentChars, XMLUni::fgZeroLenString);
@@ -154,7 +154,7 @@ PSVIWriterHandlers::~PSVIWriterHandlers() {
 		XMLString::release(&fBaseUri);
 	delete fAttrList;
 	delete[] fTempResult;
-	delete[] fIndentChars;
+	XMLPlatformUtils::fgMemoryManager->deallocate(fIndentChars);
 	
 	delete fIdMap;
 	delete fDefinedIds;
@@ -1574,10 +1574,16 @@ const XMLCh* PSVIWriterHandlers::getIdName(XSObject* obj) {
 }
 
 void PSVIWriterHandlers::incIndent() {
-	XMLCh tab[] = {chHTab, chNull};
-	checkCapacity(fIndent, &fIndentCap, &fIndentChars);
-	XMLString::catString(fIndentChars, tab);
-	fIndent++;
+    XMLCh tab[] = {chHTab, chNull};
+    if (fIndent >= fIndentCap) {
+        fIndentCap *= 2;
+        XMLCh* temp = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate((fIndentCap+1)*sizeof(XMLCh));
+        XMLString::copyString(temp, fIndentChars);
+        XMLPlatformUtils::fgMemoryManager->deallocate(fIndentChars);
+        fIndentChars = temp;
+    }
+    XMLString::catString(fIndentChars, tab);
+    fIndent++;
 }
 
 void PSVIWriterHandlers::decIndent() {
@@ -1585,16 +1591,3 @@ void PSVIWriterHandlers::decIndent() {
 	fIndent--;
 }
 
-void PSVIWriterHandlers::checkCapacity(unsigned int actual, unsigned int* capacity, XMLCh** buffer) {
-	if (actual >= *capacity) {
-		doubleCapacity(buffer, capacity);
-	}
-}
-
-void PSVIWriterHandlers::doubleCapacity(XMLCh** buffer, unsigned int* bufferCap) {
-	*bufferCap *= 2;
-	XMLCh* temp = new XMLCh[*bufferCap];
-	XMLString::copyString(temp, *buffer);
-	delete[] *buffer;
-	*buffer = temp;
-}
diff --git a/samples/PSVIWriter/PSVIWriterHandlers.hpp b/samples/PSVIWriter/PSVIWriterHandlers.hpp
index ae710a1bd118cc0159be678047dfe12b717de04d..6d206c404d922a79d75f7e3350a731a6ec68e6a8 100644
--- a/samples/PSVIWriter/PSVIWriterHandlers.hpp
+++ b/samples/PSVIWriter/PSVIWriterHandlers.hpp
@@ -284,8 +284,6 @@ private:
     const XMLCh* getIdName(XSObject* obj);
     void incIndent();
     void decIndent();
-    void checkCapacity(unsigned int actual, unsigned int* capacity, XMLCh** buffer);
-    void doubleCapacity(XMLCh** buffer, unsigned int* bufferCap);
     
 protected:    
 	XMLFormatter* fFormatter;
diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp
index 3fd8e63462c401b8d0be40d5f6572c1dd9fb73dd..9d9d2abc73f3b6e5a91602bd51a7a686dc31609e 100644
--- a/src/xercesc/internal/IGXMLScanner.cpp
+++ b/src/xercesc/internal/IGXMLScanner.cpp
@@ -2826,7 +2826,7 @@ bool IGXMLScanner::scanStartTagNS(bool& gotData)
 
     // if we have a PSVIHandler, now's the time to call
     // its handleAttributesPSVI method:
-    if(fPSVIHandler)
+    if(fPSVIHandler && fGrammarType == Grammar::SchemaGrammarType)
     {
         QName *eName = elemDecl->getElementName();
         fPSVIHandler->handleAttributesPSVI
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index 1b9b8df407c32ad41485a918bf8a7a205d892604..8d9d1caf0f48f1d5e0f8567f8bf7501ccff94307 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -2666,9 +2666,9 @@ SGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
             if(getPSVIHandler())
             {
                 psviAttr = fPSVIAttrList->getPSVIAttributeToFill(suffPtr, fURIStringPool->getValueForId(uriId));
-	            XSSimpleTypeDefinition *validatingType = (attrValidator)
-                            ? (XSSimpleTypeDefinition *)fModel->getXSObject(attrValidator)
-                            : 0;
+                XSSimpleTypeDefinition *validatingType = 0;
+                if (attrValidator && fModel)
+                    validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(attrValidator);
                 // no attribute declarations for these...
 	            psviAttr->reset(
 	                fRootElemName