diff --git a/ChangeLog b/ChangeLog
index e0e1f6a..93c146f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Feb  4 20:26:22 CET 2003 Daniel Veillard <daniel@veillard.com>
+
+	* catalog.c: fixed bug #104817 with delegateURI
+	* xpath.c: fixing bugs #104123 and #104125
+
 Tue Feb  4 17:12:56 CET 2003 Daniel Veillard <daniel@veillard.com>
 
 	* configure.in valid.c xmlreader.c python/libxml_wrap.h 
diff --git a/catalog.c b/catalog.c
index e0159e2..c7da306 100644
--- a/catalog.c
+++ b/catalog.c
@@ -1705,7 +1705,8 @@
 	 */
 	cur = catal;
 	while (cur != NULL) {
-	    if ((cur->type == XML_CATA_DELEGATE_SYSTEM) &&
+	    if (((cur->type == XML_CATA_DELEGATE_SYSTEM) ||
+	         (cur->type == XML_CATA_DELEGATE_URI)) &&
 		(!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))) {
 		for (i = 0;i < nbList;i++)
 		    if (xmlStrEqual(cur->URL, delegates[i]))
diff --git a/xpath.c b/xpath.c
index 86163f1..4bbb7dd 100644
--- a/xpath.c
+++ b/xpath.c
@@ -53,6 +53,10 @@
 #include <libxml/threads.h>
 #include <libxml/globals.h>
 
+/*
+ * TODO: when compatibility allows remove all "fake node libxslt" strings
+ *       the test should just be name[0] = ' '
+ */
 /* #define DEBUG */
 /* #define DEBUG_STEP */
 /* #define DEBUG_STEP_NTH */
@@ -1676,6 +1680,9 @@
 
     if (val == NULL) return;
 
+    if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
+	return;	/* an XSLT fake node */
+
     /* @@ with_ns to check wether namespace nodes should be looked at @@ */
     /*
      * check against doublons
@@ -1731,6 +1738,9 @@
 xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
     if (val == NULL) return;
 
+    if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
+	return;	/* an XSLT fake node */
+
     /* @@ with_ns to check wether namespace nodes should be looked at @@ */
     /*
      * grow the nodeTab if needed
@@ -5269,8 +5279,9 @@
 		if (ctxt->context->node->parent == NULL)
 		    return((xmlNodePtr) ctxt->context->doc);
 		if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
-		    (xmlStrEqual(ctxt->context->node->parent->name,
-				 BAD_CAST "fake node libxslt")))
+		    ((ctxt->context->node->parent->name[0] == ' ') ||
+		     (xmlStrEqual(ctxt->context->node->parent->name,
+				 BAD_CAST "fake node libxslt"))))
 		    return(NULL);
 		return(ctxt->context->node->parent);
             case XML_ATTRIBUTE_NODE: {
@@ -5340,8 +5351,9 @@
 		if (ctxt->context->node->parent == NULL)
 		    return((xmlNodePtr) ctxt->context->doc);
 		if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
-		    (xmlStrEqual(ctxt->context->node->parent->name,
-				 BAD_CAST "fake node libxslt")))
+		    ((ctxt->context->node->parent->name[0] == ' ') ||
+		     (xmlStrEqual(ctxt->context->node->parent->name,
+				 BAD_CAST "fake node libxslt"))))
 		    return(NULL);
 		return(ctxt->context->node->parent);
             case XML_ATTRIBUTE_NODE: {
@@ -5391,7 +5403,9 @@
 	    if (cur->parent == NULL)
 		return(NULL);
 	    if ((cur->parent->type == XML_ELEMENT_NODE) &&
-		(xmlStrEqual(cur->parent->name, BAD_CAST "fake node libxslt")))
+		((cur->parent->name[0] == ' ') ||
+		 (xmlStrEqual(cur->parent->name,
+			      BAD_CAST "fake node libxslt"))))
 		return(NULL);
 	    return(cur->parent);
 	case XML_ATTRIBUTE_NODE: {
@@ -5959,7 +5973,10 @@
 	case XML_ELEMENT_NODE:
 	case XML_ATTRIBUTE_NODE:
 	case XML_PI_NODE:
-	    valuePush(ctxt,
+	    if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
+		valuePush(ctxt, xmlXPathNewCString(""));
+	    else
+		valuePush(ctxt,
 		      xmlXPathNewString(cur->nodesetval->nodeTab[i]->name));
 	    break;
 	case XML_NAMESPACE_DECL:
@@ -6069,13 +6086,15 @@
         switch (cur->nodesetval->nodeTab[i]->type) {
             case XML_ELEMENT_NODE:
             case XML_ATTRIBUTE_NODE:
-                if ((cur->nodesetval->nodeTab[i]->ns == NULL) ||
-                    (cur->nodesetval->nodeTab[i]->ns->prefix == NULL))
+		if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
+		    valuePush(ctxt, xmlXPathNewCString(""));
+		else if ((cur->nodesetval->nodeTab[i]->ns == NULL) ||
+                         (cur->nodesetval->nodeTab[i]->ns->prefix == NULL)) {
                     valuePush(ctxt,
                               xmlXPathNewString(cur->nodesetval->
                                                 nodeTab[i]->name));
 
-                else {
+		} else {
                     char name[2000];
 
                     snprintf(name, sizeof(name), "%s:%s",
