I can't remember whether we already mentioned that you can capture a template's results into a variable, which can also help avoid extensions:
<xsl:variable name="foo"> <xsl:apply-template ...> </xsl:variable> Of course that doesn't return the original nodes, just the result generated by the template. And in XSLT 1.0, if you want to further process the result you'll need to use the exslt nodeset function to make the Result Tree Fragment accessible that way. But this, combined with named templates, can sometimes be persuaded to substitute for things you'd otherwise need an extension for. ______________________________________ "... Three things see no end: A loop with exit code done wrong, A semaphore untested, And the change that comes along. ..." -- "Threes" Rev 1.1 - Duane Elms / Leslie Fish ( http://www.ovff.org/pegasus/songs/threes-rev-11.html)