diff --git a/ChangeLog b/ChangeLog
index 2e46601..96abbf3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Thu Feb  7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* Makefile.am: cleanup
+	* debugXML.c: always use stdout if output is NULL
+	* xmlIO.c: don't close filedescriptors passed to outputBuffers
+	* python/Makefile.am python/generator.py python/libxml2class.txt
+	  python/libxml_wrap.h python/types.c: augmented the number of bindings
+	  handling FILE * and XPath contexts
+	* python/tests/Makefile.am: avoid a stupid problem due to the
+	  use of TEST.
+
 Wed Feb  6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* configure.in: fixed stupid bug #70738 found by alfons hoogervorst
diff --git a/Makefile.am b/Makefile.am
index 6d87054..2fff495 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -552,8 +552,8 @@
 cleantar:
 	@(rm -f libxslt*.tar.gz)
 
-rpm: cleantar dist
-	rpm -ta $(distdir).tar.gz
+rpm: cleantar
+	@(unset CDPATH ; $(MAKE) dist && rpm -ta $(distdir).tar.gz)
 
 ## We create xml2Conf.sh here and not from configure because we want
 ## to get the paths expanded correctly.  Macros like srcdir are given
diff --git a/debugXML.c b/debugXML.c
index 41dd37f..6300455 100644
--- a/debugXML.c
+++ b/debugXML.c
@@ -40,6 +40,8 @@
 {
     int i;
 
+    if (output == NULL)
+	output = stdout;
     if (str == NULL) {
         fprintf(output, "(NULL)");
         return;
@@ -558,6 +560,8 @@
 void
 xmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth)
 {
+    if (output == NULL)
+	output = stdout;
     while (attr != NULL) {
         xmlDebugDumpAttr(output, attr, depth);
         attr = attr->next;
@@ -578,6 +582,8 @@
     int i;
     char shift[100];
 
+    if (output == NULL)
+	output = stdout;
     for (i = 0; ((i < depth) && (i < 25)); i++)
         shift[2 * i] = shift[2 * i + 1] = ' ';
     shift[2 * i] = shift[2 * i + 1] = 0;
@@ -740,6 +746,8 @@
 void
 xmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth)
 {
+    if (output == NULL)
+	output = stdout;
     if (node == NULL) {
 	int i;
 	char shift[100];
@@ -768,6 +776,8 @@
 void
 xmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth)
 {
+    if (output == NULL)
+	output = stdout;
     while (node != NULL) {
         xmlDebugDumpNode(output, node, depth);
         node = node->next;
@@ -893,6 +903,8 @@
 void
 xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
 {
+    if (output == NULL)
+	output = stdout;
     if (dtd == NULL) {
 	fprintf(output, "DTD is NULL\n");
         return;
diff --git a/python/Makefile.am b/python/Makefile.am
index fb1b663..b1e0305 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -33,9 +33,6 @@
 	$(mkinstalldirs) $(DESTDIR)$(DOCS_DIR)
 	-@(for doc in $(DOCS) ; \
 	   do @INSTALL@ -m 0644 $$doc $(DESTDIR)$(DOCS_DIR) ; done)
-else
-all: 
-endif
 
 libxml.o: libxml.c libxml2-export.c libxml_wrap.h
 	$(CC) $(SHCFLAGS) -c -o libxml.o $(srcdir)/libxml.c
@@ -55,6 +52,9 @@
 
 $(GENERATED): $(srcdir)/$(GENERATE) $(API_DESC)
 	cd $(srcdir) && $(PYTHON) $(GENERATE)
+else
+all: 
+endif
 
 tests: all
 	cd tests && $(MAKE) tests
diff --git a/python/generator.py b/python/generator.py
index e665a87..0b13c41 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -259,10 +259,13 @@
     'const htmlNode *':  ('O', "xmlNode", "xmlNodePtr", "xmlNodePtr"),
     'xmlXPathContextPtr':  ('O', "xmlXPathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
     'xmlXPathContext *':  ('O', "xpathContext", "xmlXPathContextPtr", "xmlXPathContextPtr"),
+    'xmlXPathParserContextPtr':  ('O', "xmlXPathParserContext", "xmlXPathParserContextPtr", "xmlXPathParserContextPtr"),
     'xmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
     'xmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
     'htmlParserCtxtPtr': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
     'htmlParserCtxt *': ('O', "parserCtxt", "xmlParserCtxtPtr", "xmlParserCtxtPtr"),
+    'xmlCatalogPtr': ('O', "catalog", "xmlCatalogPtr", "xmlCatalogPtr"),
+    'FILE *': ('O', "File", "FILEPtr", "FILE *"),
 }
 
 py_return_types = {
@@ -459,7 +462,10 @@
 
 print "Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
 							  failed, skipped);
-print "Missing type converters: %s" % (unknown_types.keys())
+print "Missing type converters: "
+for type in unknown_types.keys():
+    print "%s:%d " % (type, len(unknown_types[type])),
+print
 
 #######################################################################
 #
@@ -492,8 +498,12 @@
     "xmlAttributePtr": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
     "xmlAttribute *": ("._o", "xmlAttribute(_obj=%s)", "xmlAttribute"),
     "xmlXPathContextPtr": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
+    "xmlXPathContext *": ("._o", "xpathContext(_obj=%s)", "xpathContext"),
+    "xmlXPathParserContext *": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
+    "xmlXPathParserContextPtr": ("._o", "xpathParserContext(_obj=%s)", "xpathParserContext"),
     "xmlParserCtxtPtr": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
     "xmlParserCtxt *": ("._o", "parserCtxt(_obj=%s)", "parserCtxt"),
+    "xmlCatalogPtr": ("._o", "catalog(_obj=%s)", "catalog"),
 }
 
 converter_type = {
@@ -515,6 +525,7 @@
 classes_destructors = {
     "xpathContext": "xmlXPathFreeContext",
     "parserCtxt": "xmlFreeParserCtxt",
+    "catalog": "xmlFreeCatalog",
 }
 
 function_classes = {}
@@ -565,6 +576,9 @@
     elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
         func = name[10:]
         func = string.lower(func[0:1]) + func[1:]
+    elif name[0:11] == "xmlACatalog":
+        func = name[11:]
+        func = string.lower(func[0:1]) + func[1:]
     elif name[0:l] == classe:
 	func = name[l:]
 	func = string.lower(func[0:1]) + func[1:]
diff --git a/python/libxml2class.txt b/python/libxml2class.txt
index 749efdc..00070a5 100644
--- a/python/libxml2class.txt
+++ b/python/libxml2class.txt
@@ -23,6 +23,7 @@
 catalogAdd()
 catalogCleanup()
 catalogConvert()
+catalogDump()
 catalogGetPublic()
 catalogGetSystem()
 catalogRemove()
@@ -32,11 +33,15 @@
 catalogResolveURI()
 catalogSetDebug()
 initializeCatalog()
+loadACatalog()
 loadCatalog()
 loadCatalogs()
+loadSGMLSuperCatalog()
+newCatalog()
 parseCatalogFile()
 
 # functions from module debugXML
+debugDumpString()
 shellPrintXPathError()
 
 # functions from module encoding
@@ -147,6 +152,9 @@
 # functions from module xmlversion
 checkVersion()
 
+# functions from module xpathInternals
+valuePop()
+
 
 #
 # Set of classes of the module
@@ -160,7 +168,11 @@
     nsDefs()
 
     # functions from module debugXML
+    debugDumpNode()
+    debugDumpNodeList()
+    debugDumpOneNode()
     lsCountNode()
+    lsOneNode()
     shellPrintNode()
 
     # functions from module tree
@@ -233,6 +245,19 @@
     # functions from module xpathInternals
     xpathNewNodeSet()
     xpathNewValueTree()
+    xpathNextAncestor()
+    xpathNextAncestorOrSelf()
+    xpathNextAttribute()
+    xpathNextChild()
+    xpathNextDescendant()
+    xpathNextDescendantOrSelf()
+    xpathNextFollowing()
+    xpathNextFollowingSibling()
+    xpathNextNamespace()
+    xpathNextParent()
+    xpathNextPreceding()
+    xpathNextPrecedingSibling()
+    xpathNextSelf()
 
 
 Class xmlDoc(xmlNode)
@@ -242,12 +267,20 @@
     htmlIsAutoClosed()
 
     # functions from module HTMLtree
+    htmlDocDump()
     htmlGetMetaEncoding()
+    htmlNodeDumpFile()
+    htmlNodeDumpFileFormat()
     htmlSaveFile()
     htmlSaveFileEnc()
     htmlSaveFileFormat()
     htmlSetMetaEncoding()
 
+    # functions from module debugXML
+    debugDumpDocument()
+    debugDumpDocumentHead()
+    debugDumpEntities()
+
     # functions from module entities
     addDocEntity()
     addDtdEntity()
@@ -262,6 +295,8 @@
     copyDoc()
     createIntSubset()
     docCompressMode()
+    dump()
+    elemDump()
     freeDoc()
     getRootElement()
     intSubset()
@@ -298,7 +333,7 @@
     xpathNewContext()
 
 
-Class xmlEntity(xmlNode)
+Class xmlAttribute(xmlNode)
 
 
 Class xmlNs(xmlNode)
@@ -311,19 +346,11 @@
     newNode()
 
 
-Class xmlAttr(xmlNode)
-
-    # functions from module tree
-    freeProp()
-    freePropList()
-    removeProp()
-
-
-Class xmlAttribute(xmlNode)
-
-
 Class xmlDtd(xmlNode)
 
+    # functions from module debugXML
+    debugDumpDTD()
+
     # functions from module tree
     copyDtd()
     freeDtd()
@@ -333,9 +360,65 @@
     dtdElementDesc()
     dtdQAttrDesc()
     dtdQElementDesc()
+Class catalog()
 
+    # functions from module catalog
+    add()
+    catalogIsEmpty()
+    convertSGMLCatalog()
+    dump()
+    freeCatalog()
+    remove()
+    resolve()
+    resolvePublic()
+    resolveSystem()
+    resolveURI()
+Class xpathParserContext()
 
-Class xmlElement(xmlNode)
+    # functions from module xpathInternals
+    xpathAddValues()
+    xpathBooleanFunction()
+    xpathCeilingFunction()
+    xpathCompareValues()
+    xpathConcatFunction()
+    xpathContainsFunction()
+    xpathCountFunction()
+    xpathDivValues()
+    xpathEqualValues()
+    xpathEvalExpr()
+    xpathFalseFunction()
+    xpathFloorFunction()
+    xpathFreeParserContext()
+    xpathIdFunction()
+    xpathLangFunction()
+    xpathLastFunction()
+    xpathLocalNameFunction()
+    xpathModValues()
+    xpathMultValues()
+    xpathNamespaceURIFunction()
+    xpathNormalizeFunction()
+    xpathNotFunction()
+    xpathNumberFunction()
+    xpathParseNCName()
+    xpathParseName()
+    xpathPopBoolean()
+    xpathPopNumber()
+    xpathPopString()
+    xpathPositionFunction()
+    xpathRoot()
+    xpathRoundFunction()
+    xpathStartsWithFunction()
+    xpathStringFunction()
+    xpathStringLengthFunction()
+    xpathSubValues()
+    xpathSubstringAfterFunction()
+    xpathSubstringBeforeFunction()
+    xpathSubstringFunction()
+    xpathSumFunction()
+    xpathTranslateFunction()
+    xpathTrueFunction()
+    xpathValueFlipSign()
+    xpatherror()
 Class parserCtxt()
     # accessors
     doc()
@@ -358,7 +441,6 @@
     # functions from module parserInternals
     decodeEntities()
     freeParserCtxt()
-    handleEntity()
     namespaceParseNCName()
     namespaceParseNSDef()
     nextChar()
@@ -403,6 +485,27 @@
     scanName()
     skipBlankChars()
     stringDecodeEntities()
+
+
+Class xmlElement(xmlNode)
+
+
+Class xmlEntity(xmlNode)
+
+    # functions from module parserInternals
+    handleEntity()
+
+
+Class xmlAttr(xmlNode)
+
+    # functions from module debugXML
+    debugDumpAttr()
+    debugDumpAttrList()
+
+    # functions from module tree
+    freeProp()
+    freePropList()
+    removeProp()
 Class xpathContext()
 
     # functions from module python
@@ -414,6 +517,7 @@
 
     # functions from module xpathInternals
     xpathFreeContext()
+    xpathNewParserContext()
     xpathNsLookup()
     xpathRegisterAllFunctions()
     xpathRegisterNs()
diff --git a/python/libxml_wrap.h b/python/libxml_wrap.h
index 679260a..fb8b79e 100644
--- a/python/libxml_wrap.h
+++ b/python/libxml_wrap.h
@@ -31,6 +31,14 @@
     xmlXPathContextPtr obj;
 } PyxmlXPathContext_Object;
 
+#define PyxmlXPathParserContext_Get(v) (((v) == Py_None) ? NULL : \
+	(((PyxmlXPathParserContext_Object *)(v))->obj))
+
+typedef struct {
+    PyObject_HEAD
+    xmlXPathParserContextPtr obj;
+} PyxmlXPathParserContext_Object;
+
 #define PyparserCtxt_Get(v) (((v) == Py_None) ? NULL : \
         (((PyparserCtxt_Object *)(v))->obj))
 
@@ -39,6 +47,17 @@
     xmlParserCtxtPtr obj;
 } PyparserCtxt_Object;
 
+#define Pycatalog_Get(v) (((v) == Py_None) ? NULL : \
+        (((Pycatalog_Object *)(v))->obj))
+
+typedef struct {
+    PyObject_HEAD
+    xmlCatalogPtr obj;
+} Pycatalog_Object;
+
+#define PyFile_Get(v) (((v) == Py_None) ? NULL : \
+	(PyFile_Check(v) ? NULL : (PyFile_AsFile(v))))
+
 PyObject * libxml_intWrap(int val);
 PyObject * libxml_longWrap(long val);
 PyObject * libxml_xmlCharPtrWrap(xmlChar *str);
@@ -54,6 +73,8 @@
 PyObject * libxml_doubleWrap(double val);
 PyObject * libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt);
 PyObject * libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt);
+PyObject * libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt);
 PyObject * libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj);
+PyObject * libxml_xmlCatalogPtrWrap(xmlCatalogPtr obj);
 
 xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj);
diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
index c73f0c6..c9481b9 100644
--- a/python/tests/Makefile.am
+++ b/python/tests/Makefile.am
@@ -1,6 +1,6 @@
 EXAMPLE_DIR = $(prefix)/share/doc/libxml2-python-$(LIBXML_VERSION)/examples
 
-TESTS=		\
+PYTESTS=	\
     build.py	\
     tst.py	\
     tstxpath.py	\
@@ -16,12 +16,12 @@
     valid.xml	\
     invalid.xml
 
-EXTRA_DIST = $(TESTS) $(XMLS)
+EXTRA_DIST = $(TESTSPY) $(XMLS)
 
 if WITH_PYTHON
-tests: $(TESTS)
+tests: $(TESTSPY)
 	-@(PYTHONPATH=".." ; export PYTHONPATH; \
-	   for test in $(TESTS) ; do echo "-- $$test" ; $(PYTHON) $$test ; done)
+	   for test in $(TESTSPY) ; do echo "-- $$test" ; $(PYTHON) $$test ; done)
 else
 tests:
 endif
@@ -31,6 +31,6 @@
 
 install-data-local:
 	$(mkinstalldirs) $(DESTDIR)$(EXAMPLE_DIR)
-	-(for test in $(TESTS) $(XMLS); \
+	-(for test in $(TESTSPY) $(XMLS); \
 	  do @INSTALL@ -m 0644 $$test $(DESTDIR)$(EXAMPLE_DIR) ; done)
 
diff --git a/python/types.c b/python/types.c
index 56f472f..70f7701 100644
--- a/python/types.c
+++ b/python/types.c
@@ -215,6 +215,23 @@
 }
 
 PyObject *
+libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt)
+{
+    PyObject *ret;
+
+#ifdef DEBUG
+    printf("libxml_xmlXPathParserContextPtrWrap: ctxt = %p\n", ctxt);
+#endif
+    if (ctxt == NULL) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+    ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+                                       "xmlXPathParserContextPtr", NULL);
+    return (ret);
+}
+
+PyObject *
 libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt) {
     PyObject *ret;
 
@@ -305,4 +322,19 @@
     return(ret);
 }
 
+PyObject *
+libxml_xmlCatalogPtrWrap(xmlCatalogPtr catal) {
+    PyObject *ret;
+
+#ifdef DEBUG
+    printf("libxml_xmlNodePtrWrap: catal = %p\n", catal);
+#endif
+    if (catal == NULL) {
+	Py_INCREF(Py_None);
+	return(Py_None);
+    }
+    ret = PyCObject_FromVoidPtrAndDesc((void *) catal, "xmlCatalogPtr", NULL);
+    return(ret);
+}
+
 
diff --git a/xmlIO.c b/xmlIO.c
index 291b4d7..815df62 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -1966,7 +1966,7 @@
     if (ret != NULL) {
         ret->context = (void *) (long) fd;
 	ret->writecallback = xmlFdWrite;
-	ret->closecallback = xmlFdClose;
+	ret->closecallback = NULL;
     }
 
     return(ret);
