--- XalanTransformer.cpp.orig	Thu Apr 21 11:59:59 2011
+++ XalanTransformer.cpp.new	Thu Apr 21 11:59:48 2011
@@ -110,6 +110,7 @@
     m_compiledStylesheets(m_memoryManager),
     m_parsedSources(m_memoryManager),
     m_params(m_memoryManager),
+	m_xobjectParamPairs(m_memoryManager),
     m_functions(m_memoryManager),
     m_traceListeners(m_memoryManager),
     m_errorMessage(1, '\0', m_memoryManager),
@@ -168,6 +169,10 @@
         m_functions.end(),
         MapValueDeleteFunctor<FunctionMapType>(m_memoryManager));
 
+
+	clearExtraStylesheetParams();
+
+
 #if defined(XALAN_USE_ICU)
     // Uninstall the ICU collation compare functor, and destroy it...
     XalanDestroy(
@@ -865,6 +870,24 @@
 
 void
 XalanTransformer::setStylesheetParam(
+			const XalanDOMString&	key,
+			const XObjectPtr&		value)
+{
+	// Store the stylesheet parameter in a vector.
+
+	m_xobjectParamPairs.push_back(
+		XObjectParamPairType(
+			new XalanDOMString(key, m_memoryManager),
+            value
+		)
+	);
+}
+
+
+
+
+void
+XalanTransformer::setStylesheetParam(
             const char*     qname,
             const char*     expression)
 {
@@ -882,6 +905,9 @@
 bool
 XalanTransformer::removeTraceListener(TraceListener*    theTraceListener)
 {
+	clearExtraStylesheetParams();
+
+
     XALAN_USING_STD(find)
 
     const TraceListenerVectorType::iterator     i =
@@ -1280,6 +1306,17 @@
                         (*i).first,
                         (*i).second);
             }
+
+			
+			for (XObjectParamPairVectorType::size_type j = 0; j < m_xobjectParamPairs.size(); ++j)
+			{
+                assert ( m_xobjectParamPairs[j].first != 0);
+
+				theProcessor.setStylesheetParam(
+						* (m_xobjectParamPairs[j].first),
+						   m_xobjectParamPairs[j].second);
+			}
+
         }
 
         // Create an input source for the source document...
