Index: c/src/xalanc/XalanTransformer/XalanTransformer.cpp
===================================================================
--- c/src/xalanc/XalanTransformer/XalanTransformer.cpp	(.../vendor/xml-xalan/1.10)	(revision 13764)
+++ c/src/xalanc/XalanTransformer/XalanTransformer.cpp	(.../trunk/3rdparty/xml-xalan)	(revision 13764)
@@ -102,6 +102,7 @@
 
 
 static MemoryManagerType* s_initMemoryManager = 0;
+static long s_initCount = 0;
 
 XalanTransformer::XalanTransformer(MemoryManagerType& theManager):
     m_memoryManager(theManager),
@@ -192,7 +200,13 @@
 void
 XalanTransformer::initialize(MemoryManagerType&  theManager)
 {
-    // Initialize Xalan. 
+	if (s_initCount > 0)
+	{
+		++s_initCount;
+		return;
+	}
+
+	// Initialize Xalan. 
     XalanMemMgrAutoPtr<XSLTInit, true>          initGuard(theManager, XSLTInit::create(theManager));
     XalanAutoPtr<XSLTInputSource>   inputSourceGuard(new (&theManager) XSLTInputSource(theManager));
     EnsureFunctionsInstallation     instalGuard(theManager); 
@@ -204,6 +218,8 @@
     s_emptyInputSource = inputSourceGuard.release();
 
     s_initMemoryManager = &theManager;
+
+	++s_initCount;
 }
 
 
@@ -211,6 +227,10 @@
 void
 XalanTransformer::terminate()
 {
+	assert(s_initCount > 0);
+	if (--s_initCount != 0)
+		return;
+
     assert( s_initMemoryManager!= 0 );
 
     {

