diff --git a/ChangeLog b/ChangeLog
index 6156030..231fcc6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Aug 22 15:16:53 CEST 2004 Daniel Veillard <daniel@veillard.com>
+
+	* xmllint.c xpath.c include/libxml/xpath.h 
+	  include/libxml/xpathInternals.h python/libxml.c 
+	  python/libxml_wrap.h: trying to remove some warning when compiling
+	  on Fedora Core 3 and 64bits
+
 Sat Aug 21 0:035:10 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>
 
 	* xmlschemas.c: modified parsing of <list>, <union>, <restriction>,
diff --git a/include/libxml/xpath.h b/include/libxml/xpath.h
index 8a2e210..20426e7 100644
--- a/include/libxml/xpath.h
+++ b/include/libxml/xpath.h
@@ -198,6 +198,52 @@
 };
 
 /**
+ * xmlXPathFunction:
+ * @ctxt:  the XPath interprestation context
+ * @nargs:  the number of arguments
+ *
+ * An XPath function.
+ * The arguments (if any) are popped out from the context stack
+ * and the result is pushed on the stack.
+ */
+
+typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
+
+/*
+ * Function and Variable Lookup.
+ */
+
+/**
+ * xmlXPathVariableLookupFunc:
+ * @ctxt:  an XPath context
+ * @name:  name of the variable
+ * @ns_uri:  the namespace name hosting this variable
+ *
+ * Prototype for callbacks used to plug variable lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath object value or NULL if not found.
+ */
+typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
+                                         const xmlChar *name,
+                                         const xmlChar *ns_uri);
+
+/**
+ * xmlXPathFuncLookupFunc:
+ * @ctxt:  an XPath context
+ * @name:  name of the function
+ * @ns_uri:  the namespace name hosting this function
+ *
+ * Prototype for callbacks used to plug function lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath function or NULL if not found.
+ */
+typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
+					 const xmlChar *name,
+					 const xmlChar *ns_uri);
+
+/**
  * xmlXPathContext:
  *
  * Expression evaluation occurs with respect to a context.
@@ -247,7 +293,7 @@
 
     /* the set of namespace declarations in scope for the expression */
     xmlHashTablePtr nsHash;		/* The namespaces hash table */
-    void *varLookupFunc;		/* variable lookup func */
+    xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
     void *varLookupData;		/* variable lookup data */
 
     /* Possibility to link in an extra item */
@@ -258,7 +304,7 @@
     const xmlChar *functionURI;
 
     /* function lookup function and data */
-    void *funcLookupFunc;		/* function lookup func */
+    xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
     void *funcLookupData;		/* function lookup data */
 
     /* temporary namespace lists kept for walking the namespace axis */
@@ -305,18 +351,6 @@
     xmlNodePtr         ancestor;	/* used for walking preceding axis */
 };
 
-/**
- * xmlXPathFunction:
- * @ctxt:  the XPath interprestation context
- * @nargs:  the number of arguments
- *
- * An XPath function.
- * The arguments (if any) are popped out from the context stack
- * and the result is pushed on the stack.
- */
-
-typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
-
 /************************************************************************
  *									*
  *			Public API					*
diff --git a/include/libxml/xpathInternals.h b/include/libxml/xpathInternals.h
index 4ee1965..88ee27c 100644
--- a/include/libxml/xpathInternals.h
+++ b/include/libxml/xpathInternals.h
@@ -327,20 +327,6 @@
 /*
  * Variable Lookup forwarding.
  */
-/**
- * xmlXPathVariableLookupFunc:
- * @ctxt:  an XPath context
- * @name:  name of the variable
- * @ns_uri:  the namespace name hosting this variable
- *
- * Prototype for callbacks used to plug variable lookup in the XPath
- * engine.
- *
- * Returns the XPath object value or NULL if not found.
- */
-typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
-					 const xmlChar *name,
-					 const xmlChar *ns_uri);
 
 XMLPUBFUN void XMLCALL	
 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
@@ -350,20 +336,6 @@
 /*
  * Function Lookup forwarding.
  */
-/**
- * xmlXPathFuncLookupFunc:
- * @ctxt:  an XPath context
- * @name:  name of the function
- * @ns_uri:  the namespace name hosting this function
- *
- * Prototype for callbacks used to plug function lookup in the XPath
- * engine.
- *
- * Returns the XPath function or NULL if not found.
- */
-typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
-					 const xmlChar *name,
-					 const xmlChar *ns_uri);
 
 XMLPUBFUN void XMLCALL	
 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
diff --git a/python/libxml.c b/python/libxml.c
index 1c65e72..07cb069 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -3030,7 +3030,7 @@
 	va_end(ap);
 }
 
-static PyObject *
+PyObject *
 libxml_xmlSchemaSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
 {
 	PyObject *py_retval;
@@ -3086,7 +3086,7 @@
 	return(py_retval);
 }
 
-static PyObject *
+PyObject *
 libxml_xmlSchemaFreeValidCtxt(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
 {
 	xmlSchemaValidCtxtPtr ctxt;
diff --git a/python/libxml_wrap.h b/python/libxml_wrap.h
index ad62be2..e821075 100644
--- a/python/libxml_wrap.h
+++ b/python/libxml_wrap.h
@@ -233,3 +233,4 @@
 PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid);
 #endif /* LIBXML_SCHEMAS_ENABLED */
 PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error);
+PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args);
diff --git a/xmllint.c b/xmllint.c
index 6225df9..b0dada3 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -92,6 +92,9 @@
 #ifdef LIBXML_PATTERN_ENABLED
 #include <libxml/pattern.h>
 #endif
+#ifdef LIBXML_C14N_ENABLED
+#include <libxml/c14n.h>
+#endif
 
 #ifndef XML_XML_DEFAULT_CATALOG
 #define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
diff --git a/xpath.c b/xpath.c
index fd9c694..3d21e72 100644
--- a/xpath.c
+++ b/xpath.c
@@ -2811,7 +2811,7 @@
 			    void *funcCtxt) {
     if (ctxt == NULL)
 	return;
-    ctxt->funcLookupFunc = (void *) f;
+    ctxt->funcLookupFunc = f;
     ctxt->funcLookupData = funcCtxt;
 }
 
@@ -2834,7 +2834,7 @@
 	xmlXPathFunction ret;
 	xmlXPathFuncLookupFunc f;
 
-	f = (xmlXPathFuncLookupFunc) ctxt->funcLookupFunc;
+	f = ctxt->funcLookupFunc;
 	ret = f(ctxt->funcLookupData, name, NULL);
 	if (ret != NULL)
 	    return(ret);
@@ -2865,7 +2865,7 @@
 	xmlXPathFunction ret;
 	xmlXPathFuncLookupFunc f;
 
-	f = (xmlXPathFuncLookupFunc) ctxt->funcLookupFunc;
+	f = ctxt->funcLookupFunc;
 	ret = f(ctxt->funcLookupData, name, ns_uri);
 	if (ret != NULL)
 	    return(ret);
@@ -2961,7 +2961,7 @@
 	 xmlXPathVariableLookupFunc f, void *data) {
     if (ctxt == NULL)
 	return;
-    ctxt->varLookupFunc = (void *) f;
+    ctxt->varLookupFunc = f;
     ctxt->varLookupData = data;
 }
 
