diff --git a/ChangeLog b/ChangeLog
index d4d2e9c950644c9aff98393768b9ad669c57295e_Q2hhbmdlTG9n..57eb514612470ad6097d3300d9d8a173caf8710f_Q2hhbmdlTG9n 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu Nov 14 10:03:12 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* libxslt/functions.c: make sure the fixup for key() reported
+	  by John Escott actually works.
+	* tests/docs/Makefile.am tests/docs/bug-98.xml
+	  tests/general/Makefile.am tests/general/bug-98.*: added the
+	  example in the regression tests for this case
+
 Wed Nov 13 10:35:46 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* libxslt/pattern.c: fixes bug #97969 for @*[...] patterns
diff --git a/libxslt/functions.c b/libxslt/functions.c
index d4d2e9c950644c9aff98393768b9ad669c57295e_bGlieHNsdC9mdW5jdGlvbnMuYw==..57eb514612470ad6097d3300d9d8a173caf8710f_bGlieHNsdC9mdW5jdGlvbnMuYw== 100644
--- a/libxslt/functions.c
+++ b/libxslt/functions.c
@@ -270,4 +270,5 @@
 	return;
     }
 
+    obj2 = valuePop(ctxt);
     xmlXPathStringFunction(ctxt, 1);
@@ -273,5 +274,4 @@
     xmlXPathStringFunction(ctxt, 1);
-    obj2 = valuePop(ctxt);
     if ((obj2 == NULL) ||
 	(ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
 	xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
@@ -283,7 +283,7 @@
     }
     obj1 = valuePop(ctxt);
 
-    if (obj2->type == XPATH_NODESET) {
+    if ((obj2->type == XPATH_NODESET) || (obj2->type == XPATH_XSLT_TREE)) {
 	int i;
 	xmlXPathObjectPtr newobj, ret;
 
diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am
index d4d2e9c950644c9aff98393768b9ad669c57295e_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ==..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ== 100644
--- a/tests/docs/Makefile.am
+++ b/tests/docs/Makefile.am
@@ -97,6 +97,7 @@
 	bug-95.xml \
 	bug-96.xml \
 	bug-97.xml \
+	bug-98.xml \
 	character.xml \
 	array.xml \
 	items.xml
diff --git a/tests/docs/bug-98.xml b/tests/docs/bug-98.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZG9jcy9idWctOTgueG1s
--- /dev/null
+++ b/tests/docs/bug-98.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<root>
+  <list type="one"/>
+  <list type="two"/>
+  <entries>
+    <entry cat1="a" cat2="a" qty="1"/>
+    <entry cat1="a" cat2="b" qty="2"/>
+    <entry cat1="b" cat2="b" qty="3"/>
+  </entries>
+</root>
diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am
index d4d2e9c950644c9aff98393768b9ad669c57295e_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ==..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ== 100644
--- a/tests/general/Makefile.am
+++ b/tests/general/Makefile.am
@@ -101,6 +101,7 @@
     bug-95.out bug-95.xsl \
     bug-96.out bug-96.xsl \
     bug-97.out bug-97.xsl \
+    bug-98.out bug-98.xsl \
     character.out character.xsl \
     character2.out character2.xsl \
     itemschoose.out itemschoose.xsl \
diff --git a/tests/general/bug-98.out b/tests/general/bug-98.out
new file mode 100644
index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9idWctOTgub3V0
--- /dev/null
+++ b/tests/general/bug-98.out
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<result>
+  <total><type>one</type><a>3</a><b>3</b></total>
+  <total><type>two</type><a>1</a><b>5</b></total>
+  
+</result>
diff --git a/tests/general/bug-98.xsl b/tests/general/bug-98.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9idWctOTgueHNs
--- /dev/null
+++ b/tests/general/bug-98.xsl
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="xml" indent="yes"/>
+  <xsl:template match="/">
+    <result>
+      <xsl:apply-templates/>
+    </result>
+  </xsl:template>
+  <xsl:key name="k1" match="entry" use="@cat1"/>
+  <xsl:key name="k2" match="entry" use="@cat2"/>
+  <xsl:template match="list">
+    <xsl:variable name="k">
+      <xsl:choose>
+        <xsl:when test="@type='one'">k1</xsl:when>
+        <xsl:otherwise>k2</xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    <total>
+      <type>
+        <xsl:value-of select="@type"/>
+      </type>
+      <a>
+        <xsl:value-of select="sum( key($k,'a')/@qty )"/>
+      </a>
+      <b>
+        <xsl:value-of select="sum( key($k,'b')/@qty )"/>
+      </b>
+    </total>
+  </xsl:template>
+  <xsl:template match="entries"/>
+</xsl:stylesheet>