diff --git a/tree.c b/tree.c
index 67b7d16..7df24d5 100644
--- a/tree.c
+++ b/tree.c
@@ -338,6 +338,8 @@
 	doc->extSubset = cur;
     cur->doc = doc;
 
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -463,6 +465,10 @@
 #endif
 	return;
     }
+
+    if (xmlDeregisterNodeDefaultValue)
+	xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
     if (cur->children != NULL) {
 	xmlNodePtr next, c = cur->children;
 
@@ -530,6 +536,9 @@
     cur->compression = -1; /* not initialized */
     cur->doc = cur;
     cur->charset = XML_CHAR_ENCODING_UTF8;
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -550,6 +559,10 @@
 #endif
 	return;
     }
+
+    if (xmlDeregisterNodeDefaultValue)
+	xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
     /*
      * Do this before freeing the children list to avoid ID lookups
      */
@@ -1127,6 +1140,9 @@
 	    cur->prev = prev;
 	}
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1204,6 +1220,9 @@
 	    cur->prev = prev;
 	}
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1333,6 +1352,9 @@
 	    tmp = tmp->next;
 	}
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1374,6 +1396,10 @@
 #endif
 	return;
     }
+
+    if (xmlDeregisterNodeDefaultValue)
+	xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
+
     /* Check for ID removal -> leading to invalid references ! */
     if ((cur->parent != NULL) && (cur->parent->doc != NULL) &&
 	((cur->parent->doc->intSubset != NULL) ||
@@ -1471,6 +1497,9 @@
     if (content != NULL) {
 	cur->content = xmlStrdup(content);
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
     return(cur);
 }
 
@@ -1509,6 +1538,9 @@
     
     cur->name = xmlStrdup(name);
     cur->ns = ns;
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1579,6 +1611,7 @@
 	    UPDATE_LAST_CHILD_AND_PARENT(cur)
 	}
     }
+
     return(cur);
 }
 
@@ -1667,6 +1700,9 @@
     cur->type = XML_DOCUMENT_FRAG_NODE;
 
     cur->doc = doc;
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1697,6 +1733,9 @@
     if (content != NULL) {
 	cur->content = xmlStrdup(content);
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1797,6 +1836,9 @@
 	    cur->name = xmlStrndup(name, len);
     } else
 	cur->name = xmlStrdup(name);
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1848,6 +1890,9 @@
 	cur->children = (xmlNodePtr) ent;
 	cur->last = (xmlNodePtr) ent;
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1896,6 +1941,9 @@
     if (content != NULL) {
 	cur->content = xmlStrndup(content, len);
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1945,6 +1993,9 @@
     if (content != NULL) {
 	cur->content = xmlStrdup(content);
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -1977,6 +2028,9 @@
     if (content != NULL) {
 	cur->content = xmlStrndup(content, len);
     }
+
+    if (xmlRegisterNodeDefaultValue)
+	xmlRegisterNodeDefaultValue(cur);
     return(cur);
 }
 
@@ -2398,6 +2452,9 @@
     /*
      * add the first element at the end of the children list.
      */
+    if (cur->parent == parent)
+	return(cur);
+
     if (parent->children == NULL) {
         parent->children = cur;
     } else {
@@ -2407,7 +2464,7 @@
 	if ((cur->type == XML_TEXT_NODE) && 
 	    (parent->last->type == XML_TEXT_NODE) &&
 	    (cur->name == parent->last->name)) {
-	    xmlNodeAddContent(parent->last, cur->content);
+    	    xmlNodeAddContent(parent->last, cur->content);
 	    /*
 	     * if it's the only child, nothing more to be done.
 	     */
@@ -2477,13 +2534,15 @@
      */
     if (cur->type == XML_TEXT_NODE) {
 	if ((parent->type == XML_TEXT_NODE) &&
-	    (parent->content != NULL)) {
+	    (parent->content != NULL) &&
+	    (parent != cur)) {
 	    xmlNodeAddContent(parent, cur->content);
 	    xmlFreeNode(cur);
 	    return(parent);
 	}
 	if ((parent->last != NULL) && (parent->last->type == XML_TEXT_NODE) &&
-	    (parent->last->name == cur->name)) {
+	    (parent->last->name == cur->name) &&
+	    (parent->last != cur)) {
 	    xmlNodeAddContent(parent->last, cur->content);
 	    xmlFreeNode(cur);
 	    return(parent->last);
@@ -2493,16 +2552,23 @@
     /*
      * add the new element at the end of the children list.
      */
+    prev = cur->parent;
     cur->parent = parent;
     if (cur->doc != parent->doc) {
 	xmlSetTreeDoc(cur, parent->doc);
     }
+    /* this check prevents a loop on tree-traversions if a developer
+     * tries to add a node to its parent multiple times
+     */
+    if (prev == parent)
+	return(cur);
 
     /*
      * Coalescing
      */
     if ((parent->type == XML_TEXT_NODE) &&
-	(parent->content != NULL)) {
+	(parent->content != NULL) &&
+	(parent != cur)) {
 	xmlNodeAddContent(parent, cur->content);
 	xmlFreeNode(cur);
 	return(parent);
@@ -2588,6 +2654,10 @@
         next = cur->next;
 	/* unroll to speed up freeing the document */
 	if (cur->type != XML_DTD_NODE) {
+
+	    if (xmlDeregisterNodeDefaultValue)
+		xmlDeregisterNodeDefaultValue(cur);
+
 	    if ((cur->children != NULL) &&
 		(cur->type != XML_ENTITY_REF_NODE))
 		xmlFreeNodeList(cur->children);
@@ -2655,6 +2725,7 @@
 #endif
 	return;
     }
+
     /* use xmlFreeDtd for DTD nodes */
     if (cur->type == XML_DTD_NODE) {
 	xmlFreeDtd((xmlDtdPtr) cur);
@@ -2668,6 +2739,10 @@
 	xmlFreeProp((xmlAttrPtr) cur);
 	return;
     }
+
+    if (xmlDeregisterNodeDefaultValue)
+	xmlDeregisterNodeDefaultValue(cur);
+
     if ((cur->children != NULL) &&
 	(cur->type != XML_ENTITY_REF_NODE))
 	xmlFreeNodeList(cur->children);
