diff --git a/python/libxml.c b/python/libxml.c
index f81ebb7..f79af7d 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -1404,6 +1404,30 @@
 
 /************************************************************************
  *									*
+ *			Extra stuff					*
+ *									*
+ ************************************************************************/
+PyObject *
+libxml_xmlNewNode(PyObject *self, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * name;
+    xmlNodePtr node;
+
+    if (!PyArg_ParseTuple(args, "s:xmlNewNode", &name))
+        return(NULL);
+    node = (xmlNodePtr) xmlNewNode(NULL, name);
+    printf("NewNode: %s : %p\n", name, node);
+
+    if (node == NULL) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    py_retval = libxml_xmlNodePtrWrap(node);
+    return(py_retval);
+}
+
+/************************************************************************
+ *									*
  *			The registration stuff				*
  *									*
  ************************************************************************/
@@ -1418,6 +1442,7 @@
     { "parent", libxml_parent, METH_VARARGS, NULL },
     { "type", libxml_type, METH_VARARGS, NULL },
     { "doc", libxml_doc, METH_VARARGS, NULL },
+    { "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL },
     { NULL }
 };
 
diff --git a/python/libxml2-python-api.xml b/python/libxml2-python-api.xml
index 4777319..5026ee1 100644
--- a/python/libxml2-python-api.xml
+++ b/python/libxml2-python-api.xml
@@ -1,10 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <api name='libxml2-python'>
-  <files>
-    <file name='python'>
-     <exports symbol='libxml_registerXPathFunction'/>
-    </file>
-  </files>
   <symbols>
     <function name='xmlRegisterXPathFunction' file='python'>
       <info>Register a Python written function to the XPath interpreter</info>
@@ -14,6 +9,11 @@
       <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
       <arg name='f' type='pythonObject' info='the python function'/>
     </function>
+    <function name='xmlNewNode' file='python'>
+      <info>Create a new Node</info>
+      <return type='xmlNodePtr' info="A new element node"/>
+      <arg name='name' type='xmlChar *' info='the node name'/>
+    </function>
     <function name='xmlRegisterErrorHandler' file='python'>
       <info>Register a Python written function to for error reporting. The function is called back as f(ctx, error).</info>
       <return type='int' info="1 in case of success, 0 or -1 in case of error"/>
diff --git a/python/libxml2class.txt b/python/libxml2class.txt
index 0b78625..16cab8e 100644
--- a/python/libxml2class.txt
+++ b/python/libxml2class.txt
@@ -121,6 +121,7 @@
 debugMemory()
 dumpMemory()
 htmlCreatePushParser()
+newNode()
 registerErrorHandler()
 
 # functions from module tree
@@ -343,7 +344,6 @@
     copyNamespaceList()
     freeNs()
     freeNsList()
-    newNode()
 
 
 Class xmlDtd(xmlNode)
diff --git a/python/types.c b/python/types.c
index d9fbd94..81865df 100644
--- a/python/types.c
+++ b/python/types.c
@@ -346,7 +346,7 @@
 
 xmlXPathObjectPtr
 libxml_xmlXPathObjectPtrConvert(PyObject * obj) {
-    xmlXPathObjectPtr ret;
+    xmlXPathObjectPtr ret = NULL;
 
 #ifdef DEBUG
     printf("libxml_xmlXPathObjectPtrConvert: obj = %p\n", obj);
@@ -362,6 +362,25 @@
 	str = xmlStrndup((const xmlChar *)PyString_AS_STRING(obj),
 		         PyString_GET_SIZE(obj));
 	ret = xmlXPathWrapString(str);
+    } else if PyList_Check(obj) {
+	int i;
+	PyObject *node;
+	xmlNodePtr cur;
+	xmlNodeSetPtr set;
+
+	set = xmlXPathNodeSetCreate(NULL);
+
+	for (i = 0;i < PyList_Size(obj);i++) {
+	    node = PyList_GetItem(obj, i);
+	    if ((node == NULL) || (node->ob_type == NULL) ||
+		(!PyCObject_Check(node)))
+		continue;
+	    cur = PyxmlNode_Get(node);
+	    if (cur != NULL) {
+		xmlXPathNodeSetAdd(set, cur);
+	    }
+	}
+	ret = xmlXPathWrapNodeSet(set);
     } else {
 	printf("Unable to convert Python Object to XPath");
     }
