diff --git a/ChangeLog b/ChangeLog
index b04644916767824f7510fa56ecae123c9d335180_Q2hhbmdlTG9n..8ab8f85070e95f893da813111785a46c3b92ed9b_Q2hhbmdlTG9n 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu Dec  5 18:05:44 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* libxslt/transform.c: xsl:element generated superfluous xmlns
+	  declarations, closes bug #99905
+	* tests/docs/Makefile.am tests/docs/bug-101.xml
+	  tests/general/Makefile.am tests/general/bug-101.*: added the
+	  example in the regression tests for this case
+
 Wed Dec  4 18:12:24 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* libxslt/xslt.c: Matt Sergeant reported a bug when having comments
diff --git a/libxslt/transform.c b/libxslt/transform.c
index b04644916767824f7510fa56ecae123c9d335180_bGlieHNsdC90cmFuc2Zvcm0uYw==..8ab8f85070e95f893da813111785a46c3b92ed9b_bGlieHNsdC90cmFuc2Zvcm0uYw== 100644
--- a/libxslt/transform.c
+++ b/libxslt/transform.c
@@ -2242,8 +2242,16 @@
 	goto error;
     }
     if (generateDefault == 1) {
-        ns = xmlNewNs(copy, comp->ns, NULL);
-	copy->ns = ns;
+	xmlNsPtr defaultNs = NULL;
+
+	if ((ctxt->insert != NULL) && (ctxt->insert->type == XML_ELEMENT_NODE))
+	    defaultNs = xmlSearchNs(ctxt->insert->doc, ctxt->insert, NULL);
+	if ((defaultNs == NULL) || (!xmlStrEqual(defaultNs->href, comp->ns))) {
+	    ns = xmlNewNs(copy, comp->ns, NULL);
+	    copy->ns = ns;
+	} else {
+	    copy->ns = defaultNs;
+	}
     } else if ((ns == NULL) && (oldns != NULL)) {
 	/* very specific case xsltGetNamespace failed */
         ns = xmlNewNs(copy, oldns->href, oldns->prefix);
diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am
index b04644916767824f7510fa56ecae123c9d335180_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ==..8ab8f85070e95f893da813111785a46c3b92ed9b_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ== 100644
--- a/tests/docs/Makefile.am
+++ b/tests/docs/Makefile.am
@@ -100,6 +100,7 @@
 	bug-98.xml \
 	bug-99.xml \
 	bug-100.xml \
+	bug-101.xml \
 	character.xml \
 	array.xml \
 	items.xml
diff --git a/tests/docs/bug-101.xml b/tests/docs/bug-101.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ab8f85070e95f893da813111785a46c3b92ed9b_dGVzdHMvZG9jcy9idWctMTAxLnhtbA==
--- /dev/null
+++ b/tests/docs/bug-101.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am
index b04644916767824f7510fa56ecae123c9d335180_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ==..8ab8f85070e95f893da813111785a46c3b92ed9b_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ== 100644
--- a/tests/general/Makefile.am
+++ b/tests/general/Makefile.am
@@ -104,6 +104,7 @@
     bug-98.out bug-98.xsl \
     bug-99.out bug-99.xsl \
     bug-100.out bug-100.xsl \
+    bug-101.out bug-101.xsl \
     character.out character.xsl \
     character2.out character2.xsl \
     itemschoose.out itemschoose.xsl \
diff --git a/tests/general/bug-101.out b/tests/general/bug-101.out
new file mode 100644
index 0000000000000000000000000000000000000000..8ab8f85070e95f893da813111785a46c3b92ed9b_dGVzdHMvZ2VuZXJhbC9idWctMTAxLm91dA==
--- /dev/null
+++ b/tests/general/bug-101.out
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<foo xmlns="http://baz.xml"><bar/></foo>
diff --git a/tests/general/bug-101.xsl b/tests/general/bug-101.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..8ab8f85070e95f893da813111785a46c3b92ed9b_dGVzdHMvZ2VuZXJhbC9idWctMTAxLnhzbA==
--- /dev/null
+++ b/tests/general/bug-101.xsl
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:template match="/">
+    <xsl:element xmlns="http://baz.xml" name="foo">
+      <xsl:element name="bar"/>
+    </xsl:element>
+  </xsl:template>
+</xsl:stylesheet>